java.lang.OutOfMemoryError: demande 1958536 octets par Bloc::nouvelles. Hors de l'espace de swap

Nous sommes confrontés au problème ci-dessous à notre production enviournment de manière imprévisible
parfois, le serveur est dans un jour ou parfois dans une semaine, ci-dessous est l'erreur exacte
dump, ci-dessous sont les paramètres pour le serveur.

JDK: jdk1.6.0_21 
Serveur: Tomcat 7.0.2 
Système d'exploitation: Red Hat Enterprise Linux Server version 5.5 

Dans catalina.sh le paramètre suivant a été fait:

JAVA_OPTS="-Xms1024M -Xmx1536M -XX:+HeapDumpOnOutOfMemoryError -XX:+AggressiveOpts 
-XX:-DisableExplicitGC  -XX:AdaptiveSizeThroughPutPolicy=0  
-XX:+UsePSAdaptiveSurvivorSizePolicy 
-XX:+UseAdaptiveGenerationSizePolicyAtMinorCollection  
-XX:+UseAdaptiveGenerationSizePolicyAtMajorCollection -XX:PermSize=768M 
-XX:MaxPermSize=768M    -XX:+PrintGCDetails -Xloggc:/tmp/gcLogs.txt"

export CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=22222 
-Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.password.file=/jakarta-tomcat7/apache-tomcat-7.0.2/conf
/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/jakarta-tomcat7/apache-
tomcat-7.0.2/conf/jmxremote.access"

Trace De L'Erreur:-

# 
# Une erreur fatale a été détectée par l'Environnement d'Exécution Java: 
# 
# java.lang.OutOfMemoryError: demande 1958536 octets par Bloc::nouvelles. Hors de l'espace de swap? 
# 
# Erreur interne (répartition.rpc:215), pid=18658, tid=589781904 
# Erreur: Morceau::nouvelles 
# 
# JRE version: 6.0_21-b06 
# Java VM: Java HotSpot(TM) Server VM (17.0-b16 mode mixte linux-x86 ) 
# Si vous souhaitez soumettre un rapport de bogue, veuillez visiter: 
# http://java.sun.com/webapps/bugreport/crash.jsp 
# 

--------------- T H R E A D --------------- 

Thread courant (0x23787400): JavaThread "CompilerThread0" démon [_thread_in_native, id=18668, pile(0x231f5000,0x23276000)] 

Stack: [0x231f5000,0x23276000], sp=0x23272e70, espace libre=1f723276000k 
Cadres natifs: (J=compilé en code Java, j=interprété, Vv=VM code, C=code natif) 
V [libjvm.donc+0x6a9262] 
V [libjvm.donc+0x2b277f] 
V [libjvm.donc+0x12e03c] 
V [libjvm.donc+0x12e536] 
V [libjvm.donc+0x5d67d0] 
V [libjvm.donc+0x2f809d] 
V [libjvm.donc+0x4f65a9] 
V [libjvm.donc+0x27b85f] 
V [libjvm.donc+0x278043] 
V [libjvm.donc+0x209767] 
V [libjvm.donc+0x280f8c] 
V [libjvm.donc+0x280839] 
V [libjvm.donc+0x66feb6] 
V [libjvm.donc+0x66959e] 
V [libjvm.donc+0x57a89e] 
C [libpthread..0+0x5832] 


Actuel CompileTask: 
C2:3230 ! org.apache.jsp.com.common.press_jsp._jspService(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V (4433 octets) 


--------------- P R O C E S S --------------- 

Les Threads Java: ( => thread en cours ) 
0x09a21400 JavaThread "http-8080-exec-904" démon [_thread_in_native, id=17126, pile(SIGTERM: [libjvm.donc+0x57aaf0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004 
SIGQUIT: [libjvm.donc+0x57aaf0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004 


--------------- S Y S T E M --------------- 

Système d'exploitation:Red Hat Enterprise Linux Server version 5.5 (Tikanga) 

uname:Linux 2.6.18-194.17.1.el5PAE #1 SMP Mon Sep 20 07:34:07 EDT 2010 i686 
libc:glibc 2.5 2.5 NPTL 
rlimit: PILE 10240k, CORE 0 k, NPROC 114688, NOFILE 1024, COMME l'infini 
charge moyenne:0.39 0.38 0.54 

CPU:au total, 2 (2 cœurs par processeur, 1 threads par noyau) de la famille 6 modèle 15 stepping 11, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3 

De mémoire: 4k page, physique 6228576k(225096k gratuit), swap 6974456k(6974352k gratuit) 

vm_info: Java HotSpot(TM) Server VM (17.0-b16) pour linux-x86 JRE (1.6.0_21-b06), construit sur le 22 Juin 2010 01:04:46 par "java_re" avec gcc 3.2.1-7a (J2SE version) 

temps: Ven Déc 10 14:01:06 2010 
temps écoulé: 79552 secondes 

Merci d'avance,
Amit

On dirait que tu es à cours de mémoire
oui, mais il doit être manipulé par la JVM avec plus de grâce. Je voudrais essayer de Java 6u23 qui a une beaucoup plus récente de la JVM. (Je soupçonne un bug dans la JVM) Cependant, vous pouvez trouver qu'il obtient toujours un OOM erreur. Je voudrais prendre un tas de vidage et d'essayer de voir pourquoi vous utilisez beaucoup d'espace. (ou d'augmenter le maximum)
Vous pouvez exécuter la version 64 bits? Vous disposez de 6 Go de mémoire. Vous pouvez essayer de jusqu'à 4 Go max avec la version 64 bits. (Ou pourquoi vous utilisez une grande quantité de mémoire 😉

OriginalL'auteur Amit | 2010-12-14