Назад | Перейти на главную страницу

Уменьшите объем памяти Tomcat6

Это мой setenv.bat (установка Windows). Это менеджер службы мониторинга предприятия MySQL.

set JAVA_HOME=D:\MYSQL_~2\SERVIC~1\java
set JAVA_OPTS= ++JvmOptions="-XX:+UseParallelOldGC"  ++JvmOptions="-XX:+UseBiasedLocking" ++JvmOptions="-XX:+HeapDumpOnOutOfMemoryError" ++JvmOptions="-XX:HeapDumpPath=D:\MYSQL_~2\SERVIC~1\apache-tomcat\temp" ++JvmOptions="-Xms128m" ++JvmOptions="-Xmx256m" ++JvmOptions="-XX:MaxPermSize=256m" 

Я хочу, чтобы объем памяти не превышал 200 МБ (я имею в виду, глядя на tomcat6.exe в диспетчере задач).

Он всегда идет выше 400M! В чем дело?

РЕДАКТИРОВАТЬ: Мой setenv.bat находится под tomcat \ bin

-Xms и -Xmx определить минимальный и максимальный размер кучи соответственно. Таким образом, размер кучи в вашей конфигурации может превышать 256 МБ. Однако вы также установили -XX:MaxPermSize=256m который определяет, сколько места может занять постоянное поколение. Куча и постоянная генерация разделены, поэтому ваша JVM может занимать до 256 МБ (куча через Xmx) + 256 МБ (MaxPermSize) = 512 МБ памяти с учетом используемой вами конфигурации.

Вы можете попробовать снизить оба Xmx и MaxPermSize для достижения вашей цели макс. Общее использование 200M, установив их так, чтобы сумма не превышала ваш максимум. Однако это зависит от развернутых приложений, работает ли это или произойдет сбой Tomcat с ошибкой OutOfMemoryError (хотя стоит попробовать).

У Oracle есть хорошее руководство, объясняющее, как разные поколения суммируют свои Справочник по настройке сборщика мусора. (Я предполагаю, что вы используете JVM Oracle (ранее Sun), поскольку вы не указали какую-либо версию, и она по-прежнему должна быть самой популярной.)