Большое значение для -Xmx отложить сборку мусора?
У меня много JVM, работающих на Linux Redhat, с 32 ГБ физической памяти и 32 ГБ виртуальной памяти. эти JVM настроены на общее значение Xmx, превышающее 32 ГБ, и, возможно, Linux использует свою виртуальную память.
Мой вопрос заключается в том, что если я укажу Xmx больше требуемого размера кучи, это задержит сборку мусора и в результате выделит больший размер кучи, чем необходимо? так что это заставит ОС выделять память из своей виртуальной памяти, что приводит к снижению производительности.
1 ответ
JVM резервирует максимальный размер кучи (а также другие области памяти) при запуске. Это означает, что если у вас максимальный размер кучи 32 ГБ, он будет использовать около 33-35 ГБ виртуальной памяти, включая потоки общих библиотек и т. Д.
Ничего не стоит, если вы сделаете максимальный размер кучи 32 ГБ, он должен использовать 64-битные ссылки, и вы можете получить меньше используемой памяти, чем JVM с максимальной кучей 24 ГБ, и он будет использовать 32-битные ссылки. Некоторые считают, что если размер кучи составляет 32 ГБ или более, вам нужно увеличить ее до 48 ГБ, чтобы получить больше полезной памяти.
Учитывая размер вашей машины, я предлагаю вам ограничить кучу до 24 ГБ (или меньше) и, где возможно, использовать кучу памяти, поскольку это может иметь как преимущества в производительности, так и большую масштабируемость.
Если у вас программа с низким GC и вы хотите избежать сбора, вы можете создать большой размер eden и GC один раз в день или один раз в неделю. Для этого вам нужно свести к минимуму выброс мусора, и вы можете создать размер eden, скажем, 20 ГБ, в этом случае, если вы создаете менее 20 ГБ в день, вы можете избежать запуска любых сборщиков мусора (даже незначительных) и запуска полный сборщик мусора как задача сопровождения в течение ночи. например, в 2 часа ночи.
Если вы используете большую кучу, вы хотите избежать использования свопа любой ценой. Это связано с тем, что GC требуется произвольный доступ к куче, и как только один из триггеров достаточно велик для обмена, ваша машина будет зависать довольно долго (возможно, часы) и, возможно, зависнет. Возможно, вам даже придется перезагрузиться, чтобы ваша машина работала нормально. (трудно убить процесс / машину, которая находится в таком состоянии)