Как использовать MemoryPoolMXBean - PullRequest
4 голосов
/ 10 августа 2010

Мы разрабатываем сервер и хотим запрограммировать в него контроль перегрузки.Что мы хотим сделать, это обнаружить, когда объем свободной кучи ниже определенного порога, и прекратить принимать новые данные, пока объем свободной памяти снова не увеличится.Наш первый подход использовал runtime.freeMemory.Это вызвало ложные срабатывания, так как объем свободной кучи опустился ниже порогового значения до того, как включился GC. Я нашел похожий вопрос на этом сайте, и ответом было использование MemoryPoolMXBean.Это выглядит как правильный путь, так как мы можем получить уведомление, когда свободная память ПОСЛЕ GC находится ниже границы.Но ... какой пул контролировать? Я не хочу, чтобы моя реализация зависела от типа GC, который JVM решила использовать.Одним из вариантов будет суммирование использования всех пулов динамической памяти и использование этого показателя. Это хорошее решение?

Спасибо, Дорон

1 Ответ

0 голосов
/ 09 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...