Tuesday, September 29, 2009

Утечка памяти

Некоторое время назад стали возникать проблемы с сессией у «Мечетей России». Время от времени сессия слетала, причем без видимой причины. Стал копать, и понял, что слетает не сессия, а умирает целиком домен приложения. Инспекция логов ничего не дала, доступа к EventLog-у уровня Application сервера у меня нет, а на локальной машине все работает. Стал грешить на код - вернее на его недостаточную потоко-безопасность, как результат стал немного умнее, почитав интернет и проконсультировавшись на эту тему с коллегой. В результате внесенных изменений, код потоко-безопасный (на мой взгляд) а домен приложения все равно время от времени умирает, никого не спросив.
Написал в техподдержку с просьбой либо дать мне доступ к системным логам, либо самим посмотреть, что там происходит. Вчера пришел ответ:
Доступ к Application логу, к сожалению, не предоставляется.
Мы сделали выборку из лога, относящуюся к перезапуску пула, в котором работает приложение. Из лога видно, что пул перезапускается по причине отъедания доступных лимитов памяти.

Вообще мы рекомендуем Вам проанализировать Ваше приложение и оптимизировать его таким образом, чтобы доступные лимиты памяти не исчерпывались. Либо рассмотреть возможность перехода на более старшие тарифные планы, где лимиты больше.

Выборка из лога:

System 14829195 2009-09-17 03:25:06 2009-09-17 03:25:06 5117 4 Information event 0 None WAS 4024 | *****   A worker process with process id of '4024' serving application pool '****' has requested a recycle because it reached its private bytes memory limit.
System 14831941 2009-09-17 10:08:02 2009-09-17 10:08:02 5117 4 Information event 0 None WAS 5624 | *****  A worker process with process id of '5624' serving application pool '****' has requested a recycle because it reached its private bytes memory limit.
System 14833067 2009-09-17 12:37:01 2009-09-17 12:37:01 5117 4 Information event 0 None WAS 9096 | ***** A worker process with process id of '9096' serving application pool '****' has requested a recycle because it reached its private bytes memory limit.

Короче буду ставить профайлер и анализировать кто «отъедает» системные ресурсы. Если получится, то оптимизирую, если нет, то перейдем на более «старший» тарифный план, иншаАллах.

No comments: