Nous disposons de 4 Go sur notre serveur linux mais nous ne pouvons actuellement utiliser que ~1,8 Go pour notre serveur java, qui est le premier processus java indiqué ci-dessous. (200 Mo sont libres, nous pouvons donc utiliser au maximum 1,6 Go + 0,2 Go).
La machine se bloque lorsque nous en utilisons davantage. Nous avons donc spécifié -Xmx1600m et -XX:MaxPermSize=200m pour limiter la RAM du serveur à 1,8 Go. Mais nous avons besoin de plus de RAM ! Où est passée la RAM restante ?
Voici le résultat du programme, trié en fonction de l'utilisation de la mémoire (via le grand 'M') :
Mem: 4083952k total, 3857856k used, 226096k free, 169320k buffers
Swap: 2104504k total, 176k used, 2104328k free, 1939080k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28155 root 16 0 1835m 1.6g 7848 S 2 40.5 47:36.26 java
19609 root 16 0 45996 7052 3148 S 0 0.2 14:35.97 httpd2-prefork
6802 root 16 0 46132 5916 1932 S 0 0.1 0:00.09 httpd2-prefork
6866 root 15 0 46132 5916 1932 S 0 0.1 0:00.07 httpd2-prefork
Comme vous pouvez le voir, il y a beaucoup (et même plus) de processus httpd2-prefork. Mais même si j'accumule les octets (25* ~46KB = ~1MB), il n'atteindra jamais cette taille.
free -m
des empreintes :
total used free shared buffers cached
Mem: 3988 3768 219 0 165 1894
-/+ buffers/cache: 1708 2279
Swap: 2055 0 2055
Où est mon erreur ? Puis-je régler le serveur pour donner plus de RAM au processus Java ?
BTW : nous n'utilisons pas une machine virtuelle comme ici
Mise à jour
Comme cela a été souligné dans les commentaires : c'est un noyau 32 bits seulement :-( (via uname -a). Je ne peux donc utiliser que 3 Go au moins ? Mais le serveur lui-même semble être en 64 bits ? A cause du lm (long mode) dans la sortie ?
grep flags /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid cx16 xtpr
...
Aquí est une autre question très similaire.