Récemment, le processus Tomcat sur ma machine Linux a été brutalement tué. Après enquête, j'ai trouvé un message d'erreur ci-dessous dans le fichier/var/log/messages:
noyau: [1799319.246494] Mémoire insuffisante: Kill process 28536 (Java) score 673 ou sacrifice childSep noyau: [1799319.246506] Killed process 28536 (Java) total-vm: 1271568kB, anon-rss : 426528kB, fichier-rss: 0kB
Maintenant, quelqu'un peut-il me dire que tout ce qui est inclus dans total-vm
et comment anon-rss
différent de rss
?
Si je comprends bien, la taille de la mémoire virtuelle utilisée par un processus est répertoriée comme "total-vm". Une partie est vraiment mappée dans le RAM lui-même (alloué et utilisé). C'est "RSS".
Une partie du RSS est allouée dans des blocs de mémoire réels (autres que mappés dans un fichier ou un périphérique). Il s'agit de mémoire anonyme ("anon-rss") et il existe également des blocs de mémoire RSS qui sont mappés en périphériques et fichiers ("file-rss").
Donc, si vous ouvrez un énorme fichier dans vim, le fichier-rss serait élevé, de l'autre côté, si vous malloc () beaucoup de mémoire et l'utilisez vraiment, votre anon-rss serait également élevé.
De l'autre côté, si vous allouez beaucoup d'espace (avec malloc ()), mais que vous ne l'utilisez jamais, le total-vm serait plus élevé, mais aucune mémoire réelle ne serait utilisée (en raison de la surcharge de mémoire), donc, le les valeurs rss seraient faibles.