Быстрая инициализация сервисов

0 голосов
спросил 26 Дек, 09 от TDenis (42,620 баллов) в категории Программные продукты Esri
Можно ли как-нибудь ускорить запуск сервиса?
Проблема следующая.
При загрузке сервера и первом обращении к сервису - пауза в несколько секунд. При этом видно, что сервер что-то там начинает яростно грузить с жесткого диска. Некоторые приложения, например сделанные на Flex, в итоге после такой паузы загружаются нормально, а вот у Silverlight похоже возникает какой-то внутренний тайм-аут и приходится приложение перезапускать, чтоб появилась карта. Что напрягает. (ДОБАВЛЕНО: зря катил бочку на silverlight. Используя Fiddler выяснил, что обе технологии работают одинаково, просто так получилось, что мои приложения на Flex используют только те сервисы, которые всегда стабильно запускаются. Проблема в сервисах, а не во Flex/Silverlight).

При повторных запусках (хоть через час) подобной проблемы нет, видимо, потому что в настройках сервисов "The maximum time an idle instance can be kept running" ставлю в 0 (а может это тут непричем, не знаю).
Сервисы все "pooled" и "low isolation".
Есть какие-нибудь рекомендации, как сделать чтобы сервисы открывались мгновенно и при первом запуске тоже? Как-то может можно "прогреть" их автоматически при старте сервера? Положить в планировщик на запуск компьютера приложение, которое обращается к соответствующим web-страничкам и затем убивает себя? Или есть какое-нибудь другое, стандартное решение, специальная галочка где-нибудь?
Приложение работает в локальной сети, и самый максимум числа одновременных просмотров - 10. Хотелось бы чтобы эти 10 человек работали комфортно.
P.S. Само собой, что часто выключать сервер - звучит немного дико. Но пока, к сожалению, приходится так делать.
    
    
    
    
    
    

13 Ответы

0 голосов
ответил 26 Дек, 09 от PITKS1 (20,860 баллов)
1. Не использовать low isolation
2. сделать http://support.esri.com/index.cfm?fa=knowledgebase.techarticles.articleShow&d=32620
3. Установить минимум сервисов для карты в 5 (для 10 одновременных юзеров)
0 голосов
ответил 26 Дек, 09 от TDenis (42,620 баллов)
Спасибо!
Пара вопросов, если можно.
А почему low isolation в данном случае хуже? Что-то я запутался, для каких случаев он тогда вообще нужен?
Сделал как написано по ссылке. Только у меня Windows Server 2008, там, наверное, надо только заменить группу IIS_WPG на IIS_IUSRS, а так вроде всё то же самое?
Что такое "минимум сервисов для карты"? Я правильно понял, что это "Minimum number of instances" во вкладке Pooling? А почему 5 для 10, а не 10 сразу?

Кстати, судя по диспетчеру задач никто процессор сильно-то и не грузит. Q9300, 3 ГБ оперативки (добавить не проблема, ежели чего), места на жестких дисках валом. Картографические сервисы кешированы, кэш лежит на отдельном диске, всё вроде работает шустро, кроме самой первой загрузки.

Всё сделал, под нагрузкой не тестировал, но вот разницы в инициализации не видно.

Что интересно, если даже как-то запихать в планировщик программку/скрипт, которая будет открывать html-страницу сервиса, то надо будет ещё парсить ответ. Потому что первое время страница успешно открывается, но при этом возвращает:

Service 'XXX/YYY' of type 'MapServer' does not exist or is inaccessible.

Либо предварительно делать задержку и обращаться к этой странице через 3-5 минут, тогда сервис проинициализируется и подгрузится. Но такое техническое решение с задержкой - как-то кривовато выглядит.

И что странно, некоторые сервисы запускаются и работают стабильно, другие же - сначала возвращают такую вот ошибку. И уж только на второй раз запускаются. Причем не запускаются с первого раза тоже стабильно - перезагружался и перепроверял уже раз 10.
Пока не разобрался от чего это зависит.
От сложности проекта точно не зависит - некоторые сложные и насыщенные карты успевают запуститься, в то время как простые, состоящие из одного слоя в 10 простеньких объектов - возвращают ошибку. Продолжаю наблюдения)
    
0 голосов
ответил 29 Дек, 09 от TDenis (42,620 баллов)
Во, километровые темы с аналогичной проблемой.
Я не одинок, уже радует)
http://forums.esri.com/Thread.asp?c=158&f=2276&t=228654
http://forums.esri.com/Thread.asp?c=158&f=2421&t=264894

Довольно серьёзный, между прочим, баг, когда сервисы после некоторого бездействия засыпают и просыпаются не с первого раза. Первое сообщение об ошибке датируется аж июлем 2007 года! А сегодня уже почти 2010-й (кстати, с наступающим всех читающих :) ). Так что я, честно говоря, немного в шоке.
Наверное надо накинуть ещё миллион деревянных к цене сервера и ТП, чтоб можно было нанять пару индусов, которые будут баги исправлять))

-----------
Вроде теперь всё работает нормально.
Кинул в планировщик винды vb-скрипт, который при запуске сервера обращается ко всем rest-страничкам сервисов, инициализируя их. Там в первой ссылке этот скрипт есть, выложил камрад Joshua Campbell.
"The maximum time an idle instance can be kept running" ставлю в 0, чтобы сервисы не умирали.
Авось сие знание еще кому-нибудь пригодится)

Про isolation и число сервисов карты я так и не понял. Хотя всё сделал, как сказали)
Но объясните, пожалуйста, смысл, интересно же)
0 голосов
ответил 18 Янв, 10 от Levran1 (4,060 баллов)
TDenis, согласен полностью - есть такая проблема. Начинаешь обращаться через WEB к сервисам. Причем при первом обращении к любой web-карте идет задержка загрузки. такое ощущение что грузится интерфейс. Потом уже не важно как и на какой сервис заходишь. Скорость приемлемаю Это наблюдается как локально на самом сервере, так и на удаленных станциях.
0 голосов
ответил 18 Янв, 10 от PITKS1 (20,860 баллов)
Если обращение идет через REST и сервер долго никто не использовал - все просто Application pool перестартовывает. Победить можно настройкими его самого. Кроме того - не должно быть фарволов межу WebADF и SOM/SOC серверами.

Что касается low/high isolation - при low упавший поток внутри SOC убьет всех юзеров работающих через этот SOC. В high - только одного. Это для динамических сервисов. Кеш работает по другому.
0 голосов
ответил 20 Фев, 10 от TDenis (42,620 баллов)
Вчера попробовал подключиться через ArcMap с другого компьютера. Добавил новое подключение к интернет-сервису (после праздников попробую подключиться как к локальному, сразу что-то сглупил), выбрал свой сервис, сервис добавлялся на карту секунд 10-15, потом ещё и тормозил при перемещении карты.
Сервис представляет собой дополнительно закэшированный растровый каталог в SDE (места ушло немерено, для этого по-хорошему надо Image Extension покупать, верно?).

WebADF/SOM/SOC - всё на одном компьютере: Windows Server 2008, SQL Server 2008, ArcGIS Server 9.3.1 SP1, 3GB RAM, отдельный хард под кэш, сеть между компьютерами гигабитная. Не пойму, в чем дело. Смотрю на загрузку процессора через таск-менеджер - не выше 10-15%, хард тоже простаивает, оперативки ещё гиг свободен. Клиентский компьютер тоже не загружен.
На сервере переустановил всё, к нему сейчас обращений практически нет - он пока исключительно для тестов.
В Application pool создан новый интегрированный пул, тайм-аут простоя поставлен в 0, перезапуск пула по времени отключен.
Может есть какой-то лог производительности? Может где-то имя сервера ресолвится долго?

Может как-то отдельно проверить производительность IIS, SDE, ArcGIS Server? Сеть? Кто из них тормозит. А то я не знаю чего думать, куда копать. Ведь вряд ли это нормальное поведение - запускаться 15 секунд, даже если сервис долго не трогали. Думаю, раз уж сервис полностью закэширован, то серверу ничего рисовать не надо и загружаться карта должна практически сразу же.
Тяжело улыбаться и радостно демонстрировать начальству возможности ГИС-сервера, когда такие тормоза при запуске.
Посоветуйте, пожалуйста, с чего можно начать?
    
0 голосов
ответил 20 Фев, 10 от PITKS1 (20,860 баллов)
Посмотри правильно ли у тебя настроены виртуальные папки на сервере. Кроме того - запусти фидлер и постмотри время выполнения одного запроса. Если запрос типа http://server/arcgis/rest/servicename/export - он грузит SOC и может быть чуть медленнее. Если же http://server/arcgis/rest/service/2/4/4.png - это прямой запрос на кеш. Сервер в этом случае вобще не используется (только REST .NET приложение). 
0 голосов
ответил 20 Фев, 10 от TDenis (42,620 баллов)
Посмотри правильно ли у тебя настроены виртуальные папки на сервере.

Виртуальные папки ArcGIS Server или IIS?
А что конкретно там надо смотреть?

Если же http://server/arcgis/rest/service/2/4/4.png - это прямой запрос на кеш. Сервер в этом случае вобще не используется (только REST .NET приложение).

Похоже всё же что-то там используется.
У меня при первом обращении долго открывается как http://server/arcgis/rest/service, так и http://server/arcgis/rest/service/2/4/4.png (открываю через браузер). Как раз те же симптомы: хард не шуршит ни на клиенте, ни на сервере, процессор везде простаивает, просто чего-то ждём. Через сколько-то секунд ссылка наконец успешно открывается, и после этого вроде все запросы проходят очень шустро.
Если перезапустить IIS (или только пул, под которым запускается /arcgis/rest), то при первом обращении снова пауза.
Что происходит, когда идёт обращение по этому пути (arcgis/rest/service)?

Там в rest.config прописаны какие-то веб-ссылки. Мой сервер отрублен от интернета. Он никуда не пытается обратиться?

Ко всякому статичному содержимому IIS пускает мгновенно и после перезапуска.
Чтобы исключить клиента, попробовал открыть rest/service с сервера - всё то же самое.

P.S. А я уж думал, что успешно решил свою проблему с производительностью.
    
0 голосов
ответил 20 Фев, 10 от TDenis (42,620 баллов)
Первое обращение
GET /ArcGIS/rest/services HTTP/1.1


Request Count:      1
Bytes Sent:      470
Bytes Received: 1 512

ACTUAL PERFORMANCE
--------------
Requests started at:     18:12:37:7161
Responses completed at:     18:12:55:9914

Aggregate Session time:     00:00:18:2752
Sequence (clock) time:     00:00:18.2752944

RESPONSE CODES
--------------
HTTP/200:      1

Почти 20 секунд. Следующие обращения обычно уже вот такие:

GET /ArcGIS/rest/services/Atlas HTTP/1.1

Request Count:      1
Bytes Sent:      527
Bytes Received: 1 888

ACTUAL PERFORMANCE
--------------
Requests started at:     18:14:13:4104
Responses completed at:     18:14:13:5879

Aggregate Session time:     00:00:00:1775
Sequence (clock) time:     00:00:00.1775664

RESPONSE CODES
--------------
HTTP/200:      1
    
    
0 голосов
ответил 20 Фев, 10 от TDenis (42,620 баллов)
Поэкспериментировал ещё.
Вобщем, у меня, похоже, две разные проблемы.
1. Инициализация сервиса после перезапуска соответствующего пула IIS. При этом ждём 20 секунд.
Есть ли какие-нибудь рекомендации для увеличения производительности IIS кроме создания выделенного пула для АркГиса и установки тайм-аутов в 0? Что IIS, интересно, делает эти 20 секунд?
А у вас такое не наблюдается при перезапуске пула?

2. С ArcMap глючил, оказывается, только один сервис. Если подключаться через Internet-соединение, при каждом перемещении карты ArcMap зависал на 40 секунд (глобус крутится, нагрузка 0). Если подключаться через Local-соединение, то пририсовка идёт без тормозов. Причем проверил все параметры сервиса - они были такими же, как у других сервисов, работающих нормально.
Пересоздал сервис без удаления кэша - теперь всё нормально. Но я так и не понял, что это было. Надеюсь снова не проявится.

Кстати, Local-соединение работает заметно быстрее, чем Internet. Это из-за IIS?
    
    
    
    
    
    
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...