У меня есть проблема, когда выделение большого количества -Xmx вызывает проблему самого необычного рода.
Проблема: установка -Xmx на 3072m на 32-битной JVM в 64-битной ОС Linux работает, за исключением одного условия, когда сервлет пытается взаимодействовать со многими внешними объектами через JNI IPC. Когда мы уменьшаем -Xmx до 2048m, это работает. Никаких ошибок в tomcat никогда не наблюдается. Единственные ошибки, которые видны, находятся в коде регистрации JNI.
Это наводит меня на мысль, что, поскольку это 32-битный процесс, установка максимального пространства кучи java на 3072 м оставляет мало места для собственного кода JNI C++. Он не может выделить достаточно места для... потоков или чего-то еще.
Я исследовал: Максимальный размер кучи Java для 32-битной JVM в 64-битной ОС и это не то, о чем я спрашиваю.
Вопрос:
Возможно ли, что установка -Xmx на высокий уровень на 32 JVM может уменьшить пространство, доступное для JNI, так что он выйдет из строя? Как мы можем определить для данной ситуации, что доступно этому процессу JNI?
Список известных:
Linux 64bit HCOS-130:~ # uname -a Linux HCOS-130 2.6.27.19-5-default #1 SMP 28.02.2009 04:40:21 +0100 x86_64 x86_64 x86_64 GNU/Linux
Java 6 32-битный jre1.6.0_45
CATALINA_OPTS="-server -Xmx3072m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_HOME/logs"
PS вспомогательный | grep -i jsvc
root 19827 0.0 0.0 2344 368 ? Ss 17:32 0:00 jsvc.exec -user tomcat -home /usr/java/jre1.6.0_45 -Dcatalina.home=/usr/java/apache-tomcat -Djava.security.auth.login.config=/usr/java/apache-tomcat/conf/jaas.conf -Djavax.net.ssl.trustStore=/usr/java/apache-tomcat/conf/truststore.ks -Djavax.net.ssl.trustStorePassword=changeit -Djava.awt.headless=true -Djava.io.tmpdir=/usr/java/apache-tomcat/temp -Djavax.net.ssl.trustStore=/usr/java/apache-tomcat/conf/truststore.ks -Djavax.net.ssl.trustStorePassword=changeit -outfile /usr/java/apache-tomcat/logs/catalina.out -errfile /usr/java/apache-tomcat/logs/catalina.err -server -Xmx3072m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/java/apache-tomcat/logs -cp /usr/java/apache-tomcat/conf:/usr/java/apache-tomcat/bin/bootstrap.jar:/usr/java/apache-tomcat/bin/commons-daemon.jar:/usr/java/apache-tomcat/bin/tomcat-juli.jar:/usr/java/apache-tomcat/shared/lib/jni.jar:/usr/java/apache-tomcat/shared/lib/log4j-1.2.14.jar:/usr/java/apache-tomcat/shared/lib/dhcajni.jar:/usr/java/apache-tomcat/shared/lib/activejni.jar org.apache.catalina.startup.Bootstrap
tomcat 19829 1.5 0.1 2863864 162164 ? Sl 17:32 0:10 jsvc.exec -user tomcat -home /usr/java/jre1.6.0_45 -Dcatalina.home=/usr/java/apache-tomcat -Djava.security.auth.login.config=/usr/java/apache-tomcat/conf/jaas.conf -Djavax.net.ssl.trustStore=/usr/java/apache-tomcat/conf/truststore.ks -Djavax.net.ssl.trustStorePassword=changeit -Djava.awt.headless=true -Djava.io.tmpdir=/usr/java/apache-tomcat/temp -Djavax.net.ssl.trustStore=/usr/java/apache-tomcat/conf/truststore.ks -Djavax.net.ssl.trustStorePassword=changeit -outfile /usr/java/apache-tomcat/logs/catalina.out -errfile /usr/java/apache-tomcat/logs/catalina.err -server -Xmx3072m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/java/apache-tomcat/logs -cp /usr/java/apache-tomcat/conf:/usr/java/apache-tomcat/bin/bootstrap.jar:/usr/java/apache-tomcat/bin/commons-daemon.jar:/usr/java/apache-tomcat/bin/tomcat-juli.jar:/usr/java/apache-tomcat/shared/lib/jni.jar:/usr/java/apache-tomcat/shared/lib/log4j-1.2.14.jar:/usr/java/apache-tomcat/shared/lib/dhcajni.jar:/usr/java/apache-tomcat/shared/lib/activejni.jar org.apache.catalina.startup.Bootstrap