Изменение размера прямой буферной памяти
У меня есть приложение, работающее на Websphere 8.5, я знаю, что объем памяти кучи этой конкретной JVM был увеличен в прошлом. Объем выделенной памяти сейчас составляет 5,6 ГБ, но у нас есть проблемы с памятью, связанные с памятью прямого буфера, и теперь нам необходимо изменить ее размер. Я вижу, как эта проблема происходит в процессе мониторинга, поэтому я не вижу размера прямой памяти.
Мои вопросы: есть ли правильный размер для прямой памяти в соответствии с размером памяти кучи Java? Допустим, по крайней мере X МБ для каждого X ГБ.
Какое значение по умолчанию для параметра XX:MaxDirectMemorySize?
Что еще я должен рассмотреть перед изменением этой опции?
2 ответа
В документе (для IBM Java 7) сказано, что по умолчанию он неограничен: https://www.ibm.com/support/knowledgecenter/SSYKE2_7.0.0/com.ibm.java.win.70.doc/diag/appendixes/cmdline/xxmaxdirectmemorysize.html
Я думаю, вам следует подумать, не хотите ли вы позволить приложению, использующему прямую память, выйти из строя, и в то же время разрешить другую работу на сервере. Установка прямого объема памяти приведет только к быстрому сбою приложения, поскольку значение по умолчанию не ограничено.
Согласно документации Oracle
http://docs.oracle.com/cd/E15289_01/doc.40/e15062/optionxx.htm
по умолчанию ограничений нет
Согласно документации IBM
оно начинается с малого и медленно растет.
Скорее всего, у вас есть утечка памяти, которая должна быть исследована.