J'ai une boîte linux RAM de 8 Go sur laquelle 4 serveurs tomcat fonctionnent. L'un d'eux est défini sur une mémoire de 3000 Mo (jvm -Xms et -Xmx) et d'autres sur 1500 Mo. La partition de swap est également définie sur 8 Go. Lorsque je démarre ces serveurs, l'utilisation du fichier d'échange est faible. Mais sur une période de jours et pendant certaines périodes où l'un / tous les serveurs sont en activité maximale, l'utilisation du swap commence à augmenter. Voici une sortie sar -r typique.
kbmemfree kbmemused% memused kbbuffers kbcached kbswpfree kbswpused % swpused kbswpcad
48260 8125832 99,41 196440 2761852 7197688 1190912 14,20 316044
75504 8098588 99,08 198032 2399460 7197688 1190912 14,20 316032
Il montre un échange de 14,2% utilisé actuellement. Le plus drôle, c'est que% ne diminue JAMAIS . Il continue d'augmenter et atteint jusqu'à 30-40% . Nous redémarrons nos serveurs chaque semaine.
Je suppose que le % swpused augmente pendant les périodes d'activité maximale et diminue pendant les périodes de faible activité .. Ou au moins reste constant. Il semble que l'espace d'échange ne soit jamais récupéré par le système d'exploitation.
Sortie de free: free -m total des buffers partagés libres utilisés mis en cache Mem: 7982 7937 45 0 32 2088 - / + buffers / cache: 5816 2166 Swap: 8191 1163 7028
Il y a donc au moins 2g de Ram gratuit. La question est donc de savoir pourquoi l'espace de swap continue d'augmenter et n'est pas récupéré par le système d'exploitation? Ou comment déboguer cela pour comprendre ce qui se passe ..
la source
Fondamentalement, vous n'avez pas besoin de vous en soucier. Ce qui est important de savoir, c'est combien IO va au swap (jetez un œil à la commande 'vmstat'). Avoir plus de choses dans le swap ne coûte rien. Le seul coût est de mettre des trucs dans le swap (page en entrée) ou de les retirer (page en sortie). Il est donc parfaitement raisonnable que le système d'exploitation laisse le swap se développer.
la source
tant que vous avez de l'espace de swap disponible, il n'est pas nécessaire que le système d'exploitation libère de l'espace de swap. Il sera libéré lorsqu'il n'y aura plus d'espace. Mais quand vous vous trouvez dans cette situation, vous avez définitivement un problème.
la source
Il n'y a aucun moyen de savoir si cela deviendra éventuellement un problème, sauf si vous exécutez un serveur suffisamment longtemps pour voir s'il devient un problème.
Fondamentalement, le système d'exploitation échangera des éléments qui ne sont pas utilisés pour garder de la mémoire libre à tout moment, au cas où un nouveau programme serait lancé. L'espace de swap ne sera pas libéré tant qu'il ne sera pas nécessaire, ce qui signifie que vous pouvez utiliser 100% d'espace de swap sans aucun problème de performances. La chose à se soucier est de savoir si cela est causé par une fuite de mémoire. Ce n'est pas nécessairement une fuite de mémoire, mais cela pourrait l'être.
Java n'est pas sujet aux fuites de mémoire, mais cela peut arriver avec des applications compliquées en particulier.
la source