forum.bitel.ru
http://forum.bitel.ru/

Высвобождение памяти
http://forum.bitel.ru/viewtopic.php?f=44&t=10154
Страница 1 из 1

Автор:  oldb0y [ 08 фев 2015, 13:46 ]
Заголовок сообщения:  Высвобождение памяти

Пользовался статьей с wiki по мониторингу через SNMP.

На графике в 11 часов были поставлены логи на обработку в ~11:45 клиент биллинга показал, что обработка завершена. И вот прошло 2 часа после завершения обработки, а процессы аккаунтига до сих пор пикуют! Через сколько будет высвобождена оперативная память?

На всякий уточню, а то может не правильно понимаю:
HeapUsed - Используемая аккаунтиргом в настоящий момент память, которая высвобождается сборщиком мусора.
HeapCommitted - Занятая аккаунтиргом память (само приложение + данные "data-файлов" + выборки из БД + неведомые нужды), также высвобождается сборщиком мусора.

Вложение:
1.png
1.png [ 29.65 КБ | Просмотров: 1986 ]

Автор:  Amir [ 08 фев 2015, 14:19 ]
Заголовок сообщения:  Re: Высвобождение памяти

Не совсем - HeapCommited - это сколько памяти JVM взяла у системы.
HeapUsed - это сколько из HeapCommited на самом деле используется.
Когда HeapUsed падает вниз - это работает сборщик мусора. Сборщик работает по своим алгоритмам и может не вызываться пока HeapUsed не подойдет к HeapCommited (не вплотную, но близко), особенно при большой нагрузке и/или при большом кол-ве свободной памяти и/или малом кол-ве занятой, как здесь ~150MB. А может и вызываться. Или вызываться и собирать далеко не все.
HeapCommited обычно падает вниз когда HeapUsed достаточно долго меньше HeapCommited.

Т.е. чтобы подтвердить, что есть утечка памяти - нужно вызывать accounting.sh gc пару раз и посмотреть, не упадет ли до среднего значения HeapUsed.
Если есть потребность, чтобы JVM не забирала у системы лишнего, а просто чаще вызывала сборщик мусора - то можно поставить ограничение Xmx, но с запасом. Но мы не рекомендуем ставить меньше 256.

Автор:  oldb0y [ 09 фев 2015, 10:42 ]
Заголовок сообщения:  Re: Высвобождение памяти

Спасибо, теперь пришло правильное понимание HeapCommited. Можно в дополнение получить разъяснения по NonHeap...? А то совсем не понятно.

Из всего можно сделать вывод: про сборщик мусора известно одно - он начинает работу когда реальный объем памяти подходит к показателям Commited. Что именно он оставляет/уберает - не до конца известно (главное чтобы оставлял данные которые "сейчас" находятся в обработке, и не происходил повторный запрос на их получение).

Что еще примечательно как только приложение забирает свои "мегабайты", высвобождать ресурсы оно не спешит (пока не перезапустишь приложение). Что в принципе эффективно, ибо тратится меньше процессорного времени для обработки сборщика мусора. На графике эти волны занимают 1-3 часа.
Вложение:
27_1.png
27_1.png [ 36.61 КБ | Просмотров: 1966 ]


Буду дальше наблюдать за графиками и ждать какие-нибудь интересные моменты...

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/