SASGIS - SAS.Планета
View Issue Details
0002301SAS.Планета[All Projects] Багpublic28-12-2013 21:0629-01-2014 19:04
dmytro_ovdiienko 
zed 
normalmajorsometimes
resolvedfixed 
WindowsXPSP3
131111 
140303140303 
0002301: Залипания во время просмотра карты
В какой-то момент начинает жутко тормозить выкачка тейлов во время просмотра карты. Слои OSM MAPNIK и OSM Mapsurfer. Когда с ними все плохо, перехожу на OSM CycleMap. Но тогда и он начинает тупить. И вроде как начинаю думать на тормоза OSM сервера, но в браузере никаких тормозов нет. Если же SASPlanet закрыть и открыть по новой, все сразу начинает летать.

В чем может быть проблема? Может это зависание всех воркеров выкачки тейлов? Если да, можно как-то очистить очередь задач?
No tags attached.
related to 0001103closed vdemidov Останавливается скачивание тайлов для вывода на экран 
related to 0002312resolved zed Очередь загрузки тайлов видимой области обнуляется через 30 секунд, даже если тайлы ещё не загрузились 
child of 0002307resolved zed В процессе закачки видимой области "моргают" тайлы 
7z SAS.DeBug.2301.7z (2,672,234) 13-01-2014 19:56
https://bugtracker.sasgis.org/file_download.php?file_id=1652&type=bug
Issue History
28-12-2013 21:06dmytro_ovdiienkoNew Issue
28-12-2013 22:00dmytro_ovdiienkoNote Added: 0013452
29-12-2013 08:32gmaNote Added: 0013453
29-12-2013 11:05zedRelationship addedrelated to 0001103
29-12-2013 11:14zedNote Added: 0013456
29-12-2013 11:14zedStatusnew => feedback
29-12-2013 14:21dmytro_ovdiienkoNote Added: 0013457
29-12-2013 14:21dmytro_ovdiienkoStatusfeedback => new
29-12-2013 19:18gmaNote Added: 0013462
29-12-2013 19:19gmaNote Edited: 0013462bug_revision_view_page.php?rev_id=5895
29-12-2013 19:21gmaNote Added: 0013463
30-12-2013 06:09zedNote Added: 0013465
30-12-2013 13:29PapazolNote Added: 0013468
30-12-2013 16:26gmaNote Added: 0013469
30-12-2013 22:11PapazolNote Added: 0013470
31-12-2013 05:24zedNote Added: 0013471
31-12-2013 07:47PapazolNote Added: 0013472
31-12-2013 11:26zedNote Deleted: 0013462
31-12-2013 11:26zedNote Deleted: 0013463
31-12-2013 11:26zedNote Deleted: 0013465
31-12-2013 11:26zedNote Deleted: 0013468
31-12-2013 11:26zedNote Deleted: 0013469
31-12-2013 11:27zedNote Deleted: 0013470
31-12-2013 11:27zedNote Deleted: 0013471
31-12-2013 11:27zedNote Deleted: 0013472
31-12-2013 11:28zedNote Added: 0013474
31-12-2013 11:32dmytro_ovdiienkoNote Added: 0013475
31-12-2013 11:41zedNote Added: 0013477
31-12-2013 11:56vdemidovNote Added: 0013478
10-01-2014 23:46dmytro_ovdiienkoNote Added: 0013533
11-01-2014 08:03gmaNote Added: 0013535
11-01-2014 08:10zedNote Added: 0013536
12-01-2014 14:38zedNote Added: 0013549
12-01-2014 15:13zedNote Added: 0013550
12-01-2014 15:13zedNote Edited: 0013550bug_revision_view_page.php?bugnote_id=13550#r5901
12-01-2014 17:07gmaNote Added: 0013555
12-01-2014 17:09zedNote Added: 0013556
12-01-2014 17:44zedRelationship addedrelated to 0002312
12-01-2014 17:58zedNote Added: 0013557
12-01-2014 18:03dmytro_ovdiienkoNote Added: 0013558
12-01-2014 18:13zedNote Added: 0013559
12-01-2014 18:15dmytro_ovdiienkoNote Added: 0013560
12-01-2014 18:20zedNote Added: 0013561
12-01-2014 18:22dmytro_ovdiienkoNote Added: 0013562
12-01-2014 18:24dmytro_ovdiienkoNote Added: 0013563
12-01-2014 18:24zedNote Added: 0013564
12-01-2014 18:24dmytro_ovdiienkoNote Edited: 0013563bug_revision_view_page.php?bugnote_id=13563#r5903
12-01-2014 19:23dmytro_ovdiienkoNote Added: 0013565
12-01-2014 19:23dmytro_ovdiienkoFile Added: http1.log.zip
12-01-2014 19:24zedNote Added: 0013566
12-01-2014 19:25dmytro_ovdiienkoNote Added: 0013567
12-01-2014 19:26dmytro_ovdiienkoNote Added: 0013568
12-01-2014 19:28dmytro_ovdiienkoNote Added: 0013569
12-01-2014 19:41zedNote Added: 0013570
12-01-2014 19:42zedNote Added: 0013571
12-01-2014 19:45zedNote Added: 0013572
12-01-2014 19:59zedNote Added: 0013573
12-01-2014 19:59zedNote Edited: 0013573bug_revision_view_page.php?bugnote_id=13573#r5905
12-01-2014 20:34dmytro_ovdiienkoNote Added: 0013574
12-01-2014 20:36dmytro_ovdiienkoNote Added: 0013575
12-01-2014 20:38dmytro_ovdiienkoNote Edited: 0013575bug_revision_view_page.php?bugnote_id=13575#r5907
12-01-2014 20:41dmytro_ovdiienkoFile Added: sas-osm.7z
12-01-2014 21:06zedNote Added: 0013576
12-01-2014 21:08dmytro_ovdiienkoNote Added: 0013577
12-01-2014 21:10dmytro_ovdiienkoNote Added: 0013578
12-01-2014 21:10dmytro_ovdiienkoNote Edited: 0013578bug_revision_view_page.php?bugnote_id=13578#r5909
12-01-2014 21:10dmytro_ovdiienkoNote Edited: 0013578bug_revision_view_page.php?bugnote_id=13578#r5910
12-01-2014 21:11zedNote Added: 0013579
12-01-2014 21:13dmytro_ovdiienkoNote Added: 0013580
12-01-2014 21:16zedNote Added: 0013581
12-01-2014 21:21dmytro_ovdiienkoNote Added: 0013582
12-01-2014 21:27zedNote Added: 0013583
12-01-2014 21:30dmytro_ovdiienkoNote Added: 0013584
12-01-2014 21:37zedNote Added: 0013585
12-01-2014 21:38zedNote Edited: 0013585bug_revision_view_page.php?bugnote_id=13585#r5912
12-01-2014 21:53zedNote Added: 0013586
12-01-2014 21:56dmytro_ovdiienkoNote Added: 0013587
12-01-2014 21:59dmytro_ovdiienkoNote Added: 0013588
12-01-2014 22:06zedNote Added: 0013589
12-01-2014 22:07dmytro_ovdiienkoNote Added: 0013590
12-01-2014 22:07zedNote Edited: 0013589bug_revision_view_page.php?bugnote_id=13589#r5914
12-01-2014 22:11zedNote Added: 0013591
13-01-2014 19:05dmytro_ovdiienkoNote Added: 0013593
13-01-2014 19:06dmytro_ovdiienkoNote Added: 0013594
13-01-2014 19:08dmytro_ovdiienkoNote Edited: 0013594bug_revision_view_page.php?bugnote_id=13594#r5916
13-01-2014 19:56zedFile Added: SAS.DeBug.2301.7z
13-01-2014 20:03zedNote Added: 0013595
13-01-2014 20:12zedFile Deleted: http1.log.zip
13-01-2014 20:12zedFile Deleted: sas-osm.7z
13-01-2014 20:14dmytro_ovdiienkoNote Added: 0013596
13-01-2014 20:15zedNote Added: 0013597
13-01-2014 20:20dmytro_ovdiienkoNote Added: 0013598
13-01-2014 20:28zedNote Added: 0013599
13-01-2014 23:49dmytro_ovdiienkoNote Added: 0013600
13-01-2014 23:53dmytro_ovdiienkoNote Added: 0013601
14-01-2014 00:12dmytro_ovdiienkoNote Added: 0013602
14-01-2014 00:29dmytro_ovdiienkoNote Edited: 0013602bug_revision_view_page.php?bugnote_id=13602#r5918
14-01-2014 08:54dmytro_ovdiienkoNote Edited: 0013602bug_revision_view_page.php?bugnote_id=13602#r5919
14-01-2014 08:54dmytro_ovdiienkoNote Edited: 0013602bug_revision_view_page.php?bugnote_id=13602#r5920
14-01-2014 09:08vdemidovNote Added: 0013605
14-01-2014 09:19zedNote Added: 0013607
14-01-2014 09:23zedNote Added: 0013608
14-01-2014 09:53zedNote Added: 0013610
14-01-2014 10:11vdemidovNote Added: 0013611
14-01-2014 10:14zedNote Added: 0013612
14-01-2014 10:20dmytro_ovdiienkoNote Added: 0013613
14-01-2014 10:28dmytro_ovdiienkoNote Added: 0013614
14-01-2014 10:32zedNote Added: 0013615
14-01-2014 10:48vdemidovNote Added: 0013616
14-01-2014 10:50zedNote Added: 0013617
14-01-2014 11:40vdemidovNote Added: 0013618
14-01-2014 11:41zedNote Added: 0013619
14-01-2014 11:50vdemidovNote Added: 0013620
14-01-2014 11:51zedNote Added: 0013621
14-01-2014 12:49dmytro_ovdiienkoNote Added: 0013623
14-01-2014 13:04zedNote Added: 0013624
14-01-2014 13:30dmytro_ovdiienkoNote Added: 0013625
14-01-2014 13:38zedNote Added: 0013626
15-01-2014 08:40gmaNote Added: 0013627
15-01-2014 09:40vdemidovNote Added: 0013628
15-01-2014 10:27zedNote Added: 0013629
15-01-2014 10:31zedNote Added: 0013630
15-01-2014 10:39zedRelationship addedchild of 0002307
15-01-2014 16:02gmaNote Added: 0013631
15-01-2014 16:40zedNote Added: 0013633
16-01-2014 10:04gmaNote Added: 0013637
17-01-2014 21:50nvetNote Added: 0013644
18-01-2014 18:44zedNote Added: 0013646
18-01-2014 20:16nvetNote Added: 0013648
18-01-2014 20:42nvetNote Edited: 0013648bug_revision_view_page.php?bugnote_id=13648#r5926
20-01-2014 08:27zedNote Added: 0013651
27-01-2014 16:29zedNote Added: 0013689
27-01-2014 16:29zedStatusnew => feedback
29-01-2014 16:34zedNote Added: 0013696
29-01-2014 16:38zedTarget Version => 140303
29-01-2014 16:38zedStatusfeedback => resolved
29-01-2014 16:38zedFixed in Version => 140303
29-01-2014 16:38zedResolutionopen => fixed
29-01-2014 16:38zedAssigned To => zed
29-01-2014 19:04vdemidovNote Added: 0013697

Notes
(0013452)
dmytro_ovdiienko   
28-12-2013 22:00   
Вот опять залипло. "Queue: 0". И почемуто только OSM MAPNIK и Mapsurfer. Слои Bing или OSM CycleMap не глючат. Перезапуск программы решает проблему.
(0013453)
gma   
29-12-2013 08:32   
Аналогично. Всё собирался создать инц., да грешил на свою машину. Если достаточно долго (мин. 5--10) сёрфить по любой карте -- она сначала начинает тормозить, а потом перестаёт скачиваться вовсе. При этом загрузка по области (если запущена параллельно) продолжается, как ни в чём не бывало. Замечено в течение последнего года на разных версиях, в т.ч. ночнушках. Перезагрузка помогает всегда.
Win-vistahome.
(0013456)
zed   
29-12-2013 11:14   
Проверьте воспроизводимость на текущей ночнушке.
(0013457)
dmytro_ovdiienko   
29-12-2013 14:21   
Воспроизводится.
(0013474)
zed   
31-12-2013 11:28   
У меня не воспроизводится. Можно по шагам, на чистой ночнушке?
(0013475)
dmytro_ovdiienko   
31-12-2013 11:32   
Сложно объяснить... Просто выбираю OSM MAPNIK и дергаю карту туда сюда на монике с разрешением 1680*1080. В какойто момент карта перестает загружаться. Переключаюсь на mapsurfer. Опять дергаю туда-сюда. И эта зависает. Переключение опять на MAPNIK н помогает.

Может сделать каокй-то билд, к которому можно было бы подключиться дебагером и получить дамп? А дамп потом можно было бы посмотреть у тебя на машине.
(0013477)
zed   
31-12-2013 11:41   
В ночнушке идёт SASPlanet.Debug.exe который ловит ошибки, но если там что-то тихо-мирно просто висит, то тут мало что поможет.

Раз проблема только на OSM, наверное имеет смысл сделать дамп запросов на сервер любым снифером. Может там что-то крайне неожиданное прилетает от сервера и сокет просто остаётся в подвешенном состоянии. И можно попробовать в zmp ограничить или наоборот увеличить число подключений к серверу (MaxConnectionsCount) и прописать в хидерах "Connection: Close".

Но не факт, что проблема в http-стеке. Может просто глючит очередь или ещё в одном из тысячи возможных мест...
(0013478)
vdemidov   
31-12-2013 11:56   
А еще, возможно просто есть отличие между отправляемым САС.Планетой запросом и запросом из браузера. И сервер по этой разнице начинает банить такие запросы.
(0013533)
dmytro_ovdiienko   
10-01-2014 23:46   
Может какие-то логи добавить для отладки?
(0013535)
gma   
11-01-2014 08:03   
"У меня не воспроизводится. Можно по шагам, на чистой ночнушке?" вчерашняя 1400110 -- воспроизводится, м.б. чуть позже, чем на прошлогодних. По шагам: запускаю САС, выбираю карту (в моём случае это любые спутники, вчера тестировал на Imagery2) и стрелочками двигаю карту (z16, если важно) вверх, вниз, влево, вправо. Минут 5--7 всё летает, потом начинает подтормаживать, а минут через 15--20 от начала и вовсе встаёт (именно эта карта, которая тестировалась -- остальные поначалу помогают растормаживать и с ними всё нормально, а потом только другие и качаются). Принудительная загрузка конкретных тайлов (на правой кнопке) работает, т.е. тормоза не абсолютные, а только на сёрфинг. И, как я говорил выше, закачка по областям тоже работает нормально.
(0013536)
zed   
11-01-2014 08:10   
> и стрелочками двигаю карту (z16, если важно) вверх, вниз, влево, вправо
Так может клинит именно это перемещение? Плавную анимацию отключать пробовали?
(0013549)
zed   
12-01-2014 14:38   
Да, есть такое-то странное поведение на этой карте. До полного "залипания" довести ситуацию не получилось, но то, что тайлы начинают качаться медленно и не все, это факт. Причём, все запросы ушедшие на сервер возвращаются с 200 ОК, но вот очередь тайлов может быстренько скатиться до 0 (с 32-х), скачав при этом всего несколько тайлов.
(0013550)
zed   
12-01-2014 15:13   
Понял почему счётчик слетает до нуля. Если загрузка тайлов очень медленная (по 15 сек. на тайл), то по TTL (30 сек.) этот поток будет успешно прибит и очередь обнулится. Но вопрос, почему эти тайлы начинают вдруг так медленно качаться, остаётся открытым.

(0013555)
gma   
12-01-2014 17:07   
"Так может клинит именно это перемещение?" -- нет, программе равно, чем её перемещают, мышкой или клавой.
"Плавную анимацию отключать пробовали?" -- не отключается. Там есть "Аним. при масштабировании" -- она у меня выключена по умолчанию. И есть "Движение по инерции" -- вот оно, будучи выключенным, всё равно продолжается. Вер: 140110.7793.
Кстати, обратный счётчик показывает цены на яхты, но где-то не здесь. Впрочем, это отдельный баг и оформлять его нужно соотв. )
(0013556)
zed   
12-01-2014 17:09   
Со счётчиком всё в порядке.
(0013557)
zed   
12-01-2014 17:58   
В общем, полечил загадочное поведение 0002301:0013549, а по поводу снижения скорости загрузки, я без понятия. У меня это торможение наблюдается практически сразу после запуска (RAM-кэш + активная смена зума и позиции, не дожидаясь окончания загрузки тайлов). Но снифером видно, что все потоки качают, но сервер отдаёт очень медленно. Ну, или может это мы вдруг начинаем спать между приёмом пакетов - но с чего бы? Тем более, что при закачке того же гугла всё летает.
(0013558)
dmytro_ovdiienko   
12-01-2014 18:03   
И после рестарта приложения все опять работает без тормозов. И выкачка региона тайлов, как говорит gma, работает нормально. Чем отлиается реализация выкачки региона и экрана?
(0013559)
zed   
12-01-2014 18:13   
> И после рестарта приложения все опять работает без тормозов.

Перезапуск не обязательное условие. Можно просто переключиться на другую карту и/или подождать некоторый таймаут, пока SAS не закроет все соединения с этим сервером или пока сервер не решит, что можно уже и не тормозить.

> И выкачка региона тайлов, как говорит gma, работает нормально. Чем отлиается реализация выкачки региона и экрана?

У меня эти вещи работают одинаково медленно. И реализация там ничем не отличается - закачка идёт через одну и туже очередь.
(0013560)
dmytro_ovdiienko   
12-01-2014 18:15   
С перезапуском ты продолжаешь работать с той же картой. То есть, врядли это тормоза на стороне сервера. Можно посчитать задержку между прибытием пакета на сетевуху и появлением ее на экране.
(0013561)
zed   
12-01-2014 18:20   
А вот у меня, перезапуск не помогает. Только что проверил. Видно я сегодня за вечер уже порядком поднадоел серверу.

> Можно посчитать задержку между прибытием пакета на сетевуху и появлением ее на экране.
Вы для начала, посчитайте скорость прибытия пакетов на сетевуху. Т.е. нужны убедительные доказательства, что это тормозит не сервер и что это не проявления своеобразного бана. А то, что в браузере всё работает - совсем не показатель. Там же куки и все дела, а тут - робот.
(0013562)
dmytro_ovdiienko   
12-01-2014 18:22   
Дело в том, что скорость прибытия пакетов на сетевуху зависит от скорости их выкачки. Если приложение тормозит, то и на той стороне посылают с задержкой.
(0013563)
dmytro_ovdiienko   
12-01-2014 18:24   
Ок. попробую посчитать скорость ответа на HTTP запрос

(0013564)
zed   
12-01-2014 18:24   
Поставьте кэширующий прокси между SAS и сервером. Пускай прокси выкачивает без задержек, если у него получится и отдаёт тайлы SAS-у.
(0013565)
dmytro_ovdiienko   
12-01-2014 19:23   
Похоже, тормозит именно SAS. Ответ от WEB сервера приходит сразу. А вот новые запросы SAS отправляет с задержкой. Ща выложу лог проксисервера и попробую поснифить.

Хм... может в системе не хватает ресурсов. Может надо стараться переиспользовать сокеты?
(0013566)
zed   
12-01-2014 19:24   
Keep-Alive же?
(0013567)
dmytro_ovdiienko   
12-01-2014 19:25   
Вот к примеру залип на 3 сек начиная с "!-<12/01 21:11:25".
(0013568)
dmytro_ovdiienko   
12-01-2014 19:26   
>Keep-Alive же?
В логе видно, как выделяются постоянно новые ТЦП порты
(0013569)
dmytro_ovdiienko   
12-01-2014 19:28   
Запись "!->12/01 21:11:27 [127.0.0.1:61011>3128] (t3 421) >Proxy in:7426 out:253
" похоже означает закрытие сокета на строне SAS.
(0013570)
zed   
12-01-2014 19:41   
> Ответ от WEB сервера приходит сразу
Приход ответа, это не мгновенная операция в любом случае. И из ваших логов можно только увидеть, когда ответ начал приходить, но не видно, когда же он пришёл целиком. У меня некоторые тайлы по 20 секунд грузились и в снифере было хорошо видно, как приходят "пакеты".
(0013571)
zed   
12-01-2014 19:42   
> В логе видно, как выделяются постоянно новые ТЦП порты
Значит виноват прокси. Через снифер порты не выделяются и я наблюдаю честный Keep-Alive (OSM MAPNIK).
(0013572)
zed   
12-01-2014 19:45   
И для тестов лучше в zmp прописать MaxConnectToServerCount=1 и в скрипте убрать генерирование a/b/c префиксов в url (и слать всегда, скажем, на "а").
(0013573)
zed   
12-01-2014 19:59   
У меня, кстати, было опять начало качать быстро, но насёрфив около 800 тайлов оно таки начало тормозить. Хотя всё шло в один поток и с Keep-Alive. И после перезапуска SAS, оно хоть и начало ходить через другой порт, но всё так же медленно, с самого же первого тайла.

Так что тут (конкретно на карте OSM MAPNIK), SAS однозначно ни при чём.

(0013574)
dmytro_ovdiienko   
12-01-2014 20:34   
Поймал зависон. Ваершарк показвыает, что никаких пакетов со стороны SAS не уходит. У мну WinXP SP3.
(0013575)
dmytro_ovdiienko   
12-01-2014 20:36   
(edited on: 12-01-2014 20:38)
А через 58сек соединение с OSM закрылось. На попытки подвигать карту OSM никак не реагирует. Закрытие подключения инициировал OSM.

(0013576)
zed   
12-01-2014 21:06   
> никаких пакетов со стороны SAS не уходит
Это скорее всего баг с очисткой очереди 0002312 - нужно проверять в завтрашней ночнушке.

> На попытки подвигать карту OSM никак не реагирует
Т.е. не отвечает на запросы или SAS их не шлёт?
(0013577)
dmytro_ovdiienko   
12-01-2014 21:08   
SAS не завис. На мышь и клаву реагирует. Просто не шлет запросы на веб сервер.
(0013578)
dmytro_ovdiienko   
12-01-2014 21:10   
А этот баг с очисткой очереди, как-то объясняет, почему, если переключиться на другую карту, то она работает?

(0013579)
zed   
12-01-2014 21:11   
Да. Но этот баг на смещение карты не завязан, т.е. закачка должна была возобновиться.
(0013580)
dmytro_ovdiienko   
12-01-2014 21:13   
Я ждал минуты 4-5. Закачка не возобновилась.
(0013581)
zed   
12-01-2014 21:16   
Она должна была начаться мгновенно после смещения карты (если конечно в кэше тайлов нету).

А по логу (sas-osm) я никаких замечаний не вижу.
(0013582)
dmytro_ovdiienko   
12-01-2014 21:21   
> Она должна была начаться мгновенно после смещения карты (если конечно в кэше тайлов нету).

Я переключил SAS в режим Internet. Кеш не должен был использоваться. Но по ощущениям, SAS еще кеширует в памяти. Еще я в ZMP добавил MaxConnectToServerCount=1, но подключений было 3шт (судя по pcap файлу)

> А по логу (sas-osm) я никаких замечаний не вижу.
Ага. Ничего необычного. Но на последнем тайле все наглухо остановилоась и SAS больше не пробовал что-либо качать.
(0013583)
zed   
12-01-2014 21:27   
>но подключений было 3шт (судя по pcap файлу)
Потому что у сервера алиасы a/b/c:
a.tile.openstreetmap.org
b.tile.openstreetmap.org
c.tile.openstreetmap.org

и я рекомендовал исправить скрипт, чтобы оно всегда шло на a.tile.openstreetmap.org

>Но по ощущениям, SAS еще кеширует в памяти
Да, где-то в конфигах есть переменная TileMaxAgeInInternet
(0013584)
dmytro_ovdiienko   
12-01-2014 21:30   
Предлагаю нашпиговать SAS логами и выдать мне на растерзание.
(0013585)
zed   
12-01-2014 21:37   
(edited on: 12-01-2014 21:38)
Надо подумать, что именно мониторить.

Попробуйте завтра взять ночнушку, включить у карты RAM-кэш и в режиме интернет+кэш погонять до посинения.

Почему RAM-кэш, а не просто режим Интернет? Потому что у первого есть конфиги, доступные через zmp:

UseMemCache - использовать кэш в памяти (при CacheType=9 (RAM-кэш) отключение данной опции приведёт к ошибке), включено по-умолчанию
MemCacheCapacity - количество тайлов кэшируемых в память. По-умолчанию = 100
MemCacheTTL - время жизни тайлов (в миллисекундах), кэшируемых в память. По-умолчанию = 60000 мс. (1 мин.)
MemCacheClearStrategy - стратегия очистки (по TTL) кэшируемых в память тайлов. Принимает значения: 0 - удалять ВСЕ тайлы из мем-кэша, если истёк TTL у самого СТАРОГО тайла; 1 - удалять ВСЕ тайлы из мем-кэша, если истёк TTL у самого МОЛОДОГО тайла; 2 - удалять только те тайлы, у которых истёк TTL. По-умолчанию включён режим 1.
RestartDownloadOnMemCacheTTL - автоматически перезакачивать тайлы в пределах видимой области экрана при очистке мем-кэша (работает только если UseMemCache=1). По-умолчанию отключено.

Описание формата пользовательских карт zmp

(0013586)
zed   
12-01-2014 21:53   
Кстати, в режиме Интернет, оно пишет в кэш и перезаписывает существующие тайлы. Возможно каким-то боком зависает запись в кэш, а все потоки его дружно ждут.
(0013587)
dmytro_ovdiienko   
12-01-2014 21:56   
Это объясняет, почему другие карты продолжают работать?
(0013588)
dmytro_ovdiienko   
12-01-2014 21:59   
Для включения RAM Cache нужно добавить в zmp только это?

UseMemCache=1
(0013589)
zed   
12-01-2014 22:06   
(edited on: 12-01-2014 22:07)
> Это объясняет, почему другие карты продолжают работать?
Зависание кэша? Естественно - у каждой карты свой кэш и своя качалка.

> Для включения RAM
Для включения - достаточно в гуе зайти в настройки карты (Ctr+Alt+P) и выбрать "Тип кэша - ОЗУ". А в zmp можно уменьшить MemCacheTTL до 15000 (15 секунд) или количество кэшируемых тайлов. Но это уже на усмотрение.

(0013590)
dmytro_ovdiienko   
12-01-2014 22:07   
Ок. Завтра проверю.
(0013591)
zed   
12-01-2014 22:11   
И вдогонку, по тем же 3 кнопкам Ctr+Alt+P, в самом низу есть надпись: "Разрешено скачивание" и в поле - "Да". Так вот, когда оно перестанет качать, загляните сюда, возможно оно там что-то интересное напишет.
(0013593)
dmytro_ovdiienko   
13-01-2014 19:05   
Воспроизвел на SAS.Planet.Nightly.140113.7797. Кеш - RAM. Когда зависло, размер очерели == 0 и при перемещении карты не увеличивался. Похоже, что SAS не добавляет тайлы в очередь.
(0013594)
dmytro_ovdiienko   
13-01-2014 19:06   
(edited on: 13-01-2014 19:08)
Мне кажется, где-то увеличивается счетчик подключения к серверу и не декрементируется.

(0013595)
zed   
13-01-2014 20:03   
Приложил сборку для тестов. Запустить Dbgview.exe, затем SASPlanet.exe, добиться зависания и сбросить лог дебагера сюда. Дебажные сообщения выводятся только для одного класса TUiTileDownload, на всякий случай в архиве исходник этого класса, где видно когда и какие сообщения выводятся (и какие вообще могут быть).
Сообщения с текстом "Nothing to do", кроме "Nothing to do: if VNeedDownload" когда тайлы есть в кэше, следует рассматривать как крайне подозрительные.
(0013596)
dmytro_ovdiienko   
13-01-2014 20:14   
Во время загрузки в лог что-то должно выводиться? Я запустил, скачал несколко тайлов, но ничего не вижу в dbgview
(0013597)
zed   
13-01-2014 20:15   
Да, должны бежать строчки очень активно.
(0013598)
dmytro_ovdiienko   
13-01-2014 20:20   
Не пишет. Моя программа пишет, а SAS - не пишет.

#include <Windows.h>

int main() {
    OutputDebugString("123\n");
}
(0013599)
zed   
13-01-2014 20:28   
Вот блин :(
Вариант - скачать виртуалку http://yadi.sk/d/bZ3bEBzMC2biN и попробовать запустить там. Тем более, там вы при желании сможете запустить SAS прямо под отладчиком и посмотреть как минимум на имена потоков и их наличие в момент бага. Ну и брекпоинты, тоже полезная вещь.
(0013600)
dmytro_ovdiienko   
13-01-2014 23:49   
файлы от 27.03.2013.. это точно последнее?
(0013601)
dmytro_ovdiienko   
13-01-2014 23:53   
У меня есть CBuilder6. Дай плз сурсы от SAS.Planet.Nightly.140113.7797
(0013602)
dmytro_ovdiienko   
14-01-2014 00:12   
(edited on: 14-01-2014 08:54)
Нашел сурсы. Что выполняется при перемещении карты?
Где бряки ставить?

(0013605)
vdemidov   
14-01-2014 09:08   
Мне кажется вы фигней занимаетесь. В первую очередь нужно проверить где затык: в сервере, подсистеме загрузки или в загрузчике видимой области. Последний отсекается очень просто. После того как тайлы качаться перестали нажимаем Ctrl-A и запускаем скачивание текущего экрана как области. Если качается, то ошибка именно в загрузке видимой области, если нет, то в подсистеме загрузки.
(0013607)
zed   
14-01-2014 09:19   
>файлы от 27.03.2013.. это точно последнее?
В виртуалке - старые исходники и компоненты, но их легко обновить:

- зайти в папку c:\SASPlanet и выполнить в консоли 2 команды "hg pull" (затянуть свежие сорцы с сервера) и "hg update -C" (применить обновление и отбросить локальные изменения)

- зайти в папку C:\Program Files\CodeGear\RAD Studio\5.0\lib_sas, удалить папку pascalscript и выполнить те же 2 команды: "hg pull" и "hg update -C"

После этого можно запускать SASPlanet.dpr.

>У меня есть CBuilder6
Не подойдёт.

>Что выполняется при перемещении карты?
В u_UiTileDownload.pas вызывается TUiTileDownload.OnPosChange; Соответственно, поток который ставить тайлы в очередь закачки, будет называться TUiTileDownload (он создаётся вот так: VDownloadTask := TBackgroundTask.Create)

Очередь запросов в u_InterfaceQueue.pas, поток, который обрабатывает очередь - u_TileRequestQueueProcessorThread.pas (имя потока в дебагере TTileRequestQueueProcessorThread, количество потоков во время загрузки ограничено значением MaxConnectToServerCount).
(0013608)
zed   
14-01-2014 09:23   
>нужно проверить где затык: в сервере, подсистеме загрузки или в загрузчике видимой области
Сервер уже исключили. И очень большое подозрение именно на загрузчика видимой области (читай второе сообщение 0002301:0013453), именно на него (TUiTileDownload) я и натыкал дебажных сообщений, чтобы понять, где там может быть затык.

У себя я так и не смог воспроизвести, поэтому вся надежда на dmytro_ovdiienko
(0013610)
zed   
14-01-2014 09:53   
dmytro_ovdiienko
И да, если будете расставлять бряки в отладчике, то в папке Maps лучше оставить только одну карту, иначе в OnPosChange будут прилетать мусорные сообщения от всех остальных карт.
(0013611)
vdemidov   
14-01-2014 10:11   
>Сервер уже исключили. И очень большое подозрение именно на загрузчика видимой области (читай второе сообщение 0002301:0013453), именно на него (TUiTileDownload) я и натыкал дебажных сообщений, чтобы понять, где там может быть затык.
Ну так я и описал способ в этом убедиться на 100% даже без отладчика.
(0013612)
zed   
14-01-2014 10:14   
Ну убедились, а дальше что? Как баг найти?
(0013613)
dmytro_ovdiienko   
14-01-2014 10:20   
Ок. Я сначала еще раз проверю, что поблема в выкачке. Потом буду дебажить. Хотя не уверен, что у меня получится это на виртуалке. На Win7, например, почему-то не воспроизводится. Может, это какаято особенность моей ОС.
(0013614)
dmytro_ovdiienko   
14-01-2014 10:28   
И мне нужны исходники того кода, с которым собирался Дебаг, который мне выдал zed.
(0013615)
zed   
14-01-2014 10:32   
Я уже объяснил, как получить сорцы 0002301:0013607, а единственное отличие моего дебага - изменения в u_UiTileDownload.pas, который я также приложил в аттаче. Так что заменив его, вы получите идентичную копию сборки.
(0013616)
vdemidov   
14-01-2014 10:48   
> Ну убедились, а дальше что? Как баг найти?
Точно убедились? Я не уверен, что баг именно в TUiTileDownload. Не так уж много там кода.
(0013617)
zed   
14-01-2014 10:50   
Тут одно из двух: либо прилетает OnPosChange и где-то в TUiTileDownload не обрабатывается, либо не прилетает и тогда проблема выше.
(0013618)
vdemidov   
14-01-2014 11:40   
> Тут одно из двух: либо прилетает OnPosChange и где-то в TUiTileDownload не обрабатывается, либо не прилетает и тогда проблема выше.
Если бы это было бы так, то не было бы такого:
> Вот опять залипло. "Queue: 0".
(0013619)
zed   
14-01-2014 11:41   
Именно такое и было бы :)
(0013620)
vdemidov   
14-01-2014 11:50   
Я про "либо не прилетает"
(0013621)
zed   
14-01-2014 11:51   
Да в обоих случаях счётчик будет стоять на нуле. Ты посмотри, где он увеличивается.
(0013623)
dmytro_ovdiienko   
14-01-2014 12:49   
Если бы не прилетало событие, тогда другие карты тоже бы не работали. Верно?
(0013624)
zed   
14-01-2014 13:04   
Если карта вдруг не отписалась от уведомлений, то да. Вот и выходит, что затык в TUiTileDownload.
(0013625)
dmytro_ovdiienko   
14-01-2014 13:30   
А она может отписаться?
(0013626)
zed   
14-01-2014 13:38   
Отписка происходит только в момент уничтожения карты (TUiTileDownload.Destroy), поэтому, практически - нет.
(0013627)
gma   
15-01-2014 08:40   
"После того как тайлы качаться перестали нажимаем Ctrl-A и запускаем скачивание текущего экрана как области" -- Дождался затыка, запустил закачку области -- пошла на ура на хорошей скорости. Экран после этого всё равно не завёлся.
(0013628)
vdemidov   
15-01-2014 09:40   
Имхо чем пытаться починить TUiTileDownload лучше сразу его переписать полностью. То есть завести массивчик отправленных запросов и итератор тайлов как поля объекта. Убрать оттуда отдельный поток для каждой карты, а завести один поток на все карты, который будет дергать активные. Выкинуть тот семафор нафиг. И тд.
(0013629)
zed   
15-01-2014 10:27   
>Дождался затыка, запустил закачку области
Удалось ли собрать дополнительную информацию при помощи dbgview во время затыка?

>Имхо чем пытаться починить TUiTileDownload лучше сразу его переписать полностью
Поскольку неизвестно в чём баг, то нет никаких гарантий, что ты его не перенесёшь в новую реализацию. Сейчас по твоим словам реализация простая до предела и глючить там нечему (а оно таки глючит), но предлагаешь усложнить реализацию на порядок, в надежде избавиться от глюка. Где логика? Хотя, несомненно, ты можешь попробовать всё переписать как запланировал, возможно и поможет. Но dmytro_ovdiienko и gma я бы попросил продолжить поиск бага в текущей реализации, а не ждать нового движка от vdemidov.

Мне кажется, что OnPosChange должен прилетать и скорее всего мы стартуем поток, но где-то в if/then с завидным постоянством выходим в отсутствующий else блок (куда я напихал OutpuDebugString) и ничего не делаем. И это может быть проблема не собственно TUiTileDownload, а каких-то внешних факторов.
(0013630)
zed   
15-01-2014 10:31   
gma
>Экран после этого всё равно не завёлся
И небольшое уточнение терминологии: "затык" это когда карта перестаёт качать и Queue: 0? Показания счётчика в этом случае очень важно.
(0013631)
gma   
15-01-2014 16:02   
"И небольшое уточнение терминологии: "затык" это когда карта перестаёт качать и Queue: 0? Показания счётчика в этом случае очень важно" -- Да, когда перестаёт качать. Про счётчик я выше уже говорил, что в норме! он показывает количество лун у марса, иногда у земли, но это число ни от чего не зависит.
Сегодня на работе скачал Dbw и попробовал добиться результата с ним -- ничего не вышло, качает как миленькая, дошло до почти трёх тысяч (почти час качал) и тут рабочее время кончилось. Но раньше я ОСМ такими объёмами никогда не качал, да и вообще настройки у меня сильно отличаются, не знаю, важно ли это.
(0013633)
zed   
15-01-2014 16:40   
> Про счётчик я выше уже говорил, что в норме!
Что в норме? Он-то в норме, это и так ясно, но должен быть равен нулю, если зависло. Если не равен нулю, значит не зависло, а просто идёт очень медленная загрузка тайлов в фоне.

> он показывает количество лун у марса, иногда у земли, но это число ни от чего не зависит.

А я вам ответил, что со счётчиком всё в порядке. Может вы просто не понимаете, что он отображает или перевод вводит в заблуждение. В английском варианте этот счётчик называется Queue - Очередь. В него записывается число тайлов поставленных в очередь на загрузку. Каждая карта имеет свою собственну очередь, но счётчик показывает суммарное число для всех отображаемых карт. К тому же, есть ещё такой момент - для каждой карты введён лимит на количество тайлов, одномоментно находящихся в очереди. И по-умолчанию этот лимит равен 32. Таким образом, если включена одна карта на HD мониторе, то для загрузки экрана нужно скачать порядка 50 тайлов. Карта ставит в очередь 32 штуки и ждёт, пока скачается хотя бы один. В этот момент счётчик показывает эти самые 32. Как только тайл скачался, счётчик становится 31, карта тут же добавляет ещё один тайл в очередь и опять ждёт. При этом операция может произойти настолько быстро, что смены цифр 32 - 31 - 32 вы можете и не увидеть, поэтому некоторое время в Queue будет отображаться 32, а потом начнёт падать до нуля. Или может закачаться сразу 4 тайла (по-умолчанию каждая карта качается в 4 потока), тогда счётчик упадёт до 28, а потом опять увеличится до 32 и уже это изменение счётчика вы можете заметить.
Соответственно, если включены 2 карты, то счётчик будет крутиться возле 64-х и не выше, хотя вообще, нужно загрузить 100 тайлов (условно), чтобы обновить экран.
(0013637)
gma   
16-01-2014 10:04   
"если включены 2 карты, то счётчик будет крутиться возле 64-х и не выше" -- включена как правило одна карта, лун у марса две, у земли -- одна, вот примерно эти числа он мне и показывает чаще всего, иногда 7, 4 или другое что, но логики в его показаниях я не могу найти. В скачанном дебаге САСовый счётчик показывал всё правильно, у меня он может полчаса показывать единицу, независимо от происходящего на экране.
(0013644)
nvet   
17-01-2014 21:50   
Остановка закачки в Ui может происходить на разных картах.У меня например наблюдается для спутника Гугла после скачки нескольких тысяч тайлов.
После остановки, под отладчиком нашел "подозрительные" места в коде:
-в модуле TBackgroundTask в процедуре Execute в строке 134 переменная VOperatonID принимает значение 0.
-в результате в модуле TUiTileDownload в процедуре DoProcessDownloadRequests в строке 377,378 происходит обход кода закачки.
Если закачка идет, VOperatonID имеет значение не равное 0.
(0013646)
zed   
18-01-2014 18:44   
> в модуле TBackgroundTask в процедуре Execute в строке 134 переменная VOperatonID принимает значение 0

Значит поток был только что создан и это первая задача. 0 - абсолютно нормальное значение.

> в результате в модуле TUiTileDownload в процедуре DoProcessDownloadRequests в строке 377,378 происходит обход кода закачки

Имеется в виду проверка "if ACancelNotifier.IsOperationCanceled(AOperationID) then"? Первый раз может и сработать, если карта движется и прежде чем мы дошли до этой строчки у нас уже успела стартануть новая задача (должны были прилететь вот сюда, отменить старую задачу и увеличить счётчик следующей операции).

И обновите свою версию исходников, сейчас на строках 377,378 выполняются совсем другие операции.
(0013648)
nvet   
18-01-2014 20:16   
(edited on: 18-01-2014 20:42)
> Имеется в виду проверка

Да, эта самая проверка(нов 407 строка).
Попробую повторить остановку на свежей ночной сборке.
Если будет, то и на обновленных исходниках.

Проверка на версии SAS 140118.7798
Карта спутник гугл.Остановка произошла на 1926 тайлах,осталось 0.
Загрузка по контекстному меню происходит, счетчик при этом увеличивается на 1(1927 и т.д.).
Перемещения карты мышкой и стрелками к загрузке не приводят,очередь загрузки стоит на нуле во время перемещений.

(0013651)
zed   
20-01-2014 08:27   
Если кому-то удастся воспроизвести баг на виртуалке под дебагером, то эту виртуалку можно поставить на паузу и выложить её куда-нить на обменник, а ссылку запостить тут. Я думаю должно сработать.
(0013689)
zed   
27-01-2014 16:29   
Куда все пропали? Жду логов от дебажной сборки из старого аттача.
(0013696)
zed   
29-01-2014 16:34   
Словил я его. Висело в WaitForMultipleObjects из-за логической ошибки использования семафора.
(0013697)
vdemidov   
29-01-2014 19:04   
Спасибо. Теперь, когда проблема найдена, она кажется очевидной, но вот поди ж ты - сколько времени понадобилось что бы ее выловить.