Tengo una caja de Linux RAM de 8GB en la que se ejecutan 4 servidores tomcat. Uno de ellos está configurado en 3000MB de memoria (configuración jvm -Xms y -Xmx) y otros están configurados en 1500MB. La partición de intercambio también se establece en 8Gigs. Cuando inicio estos servidores, el uso del archivo de intercambio es bajo. Pero durante un período de días y durante ciertos momentos en que uno / todos los servidores están en actividad máxima, el uso de intercambio comienza a aumentar. Aquí hay una salida típica de sar -r.
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
Muestra 14.2% de intercambio utilizado actualmente. Lo curioso es que este% NUNCA disminuye . Continúa aumentando y llegando hasta 30-40% . Reiniciamos nuestros servidores semanalmente.
Supongo que el % swpused aumenta durante los períodos de actividad máxima y disminuye durante los períodos de baja actividad ... O al menos permanece constante. Parece que el sistema operativo nunca recupera el espacio de intercambio.
Salida de free: free -m total utilizado buffers compartidos gratuitos en caché Mem: 7982 7937 45 0 32 2088 - / + buffers / caché: 5816 2166 Swap: 8191 1163 7028
Así que hay al menos 2 g de Ram gratis. Entonces, la pregunta es ¿Por qué el espacio de intercambio continúa aumentando y el SO no lo reclama? O cómo depurar esto para descubrir qué está pasando ...
fuente
Básicamente, no necesita preocuparse por esto. Lo importante es saber cuánto va IO al intercambio (eche un vistazo al comando 'vmstat'). Tener más cosas en el intercambio no cuesta nada. El único costo es poner cosas en el intercambio (página de entrada) o sacarlo (página de salida). Por lo tanto, es perfectamente razonable que el sistema operativo permita que el intercambio crezca.
fuente
siempre que tenga espacio de intercambio disponible, no es necesario que el sistema operativo libere espacio de intercambio. Se liberará cuando no quede espacio. Pero cuando te encuentras en esta situación definitivamente tienes un problema.
fuente
No hay forma de saber si esto eventualmente se convertirá en un problema a menos que ejecute un servidor el tiempo suficiente para ver si se convierte en un problema.
Básicamente, el sistema operativo intercambiará cosas que no se están utilizando para mantener algo de memoria libre en todo momento, en caso de que se inicie un nuevo programa. El espacio de intercambio no se liberará hasta que sea necesario, lo que significa que puede utilizar el 100% de espacio de intercambio y no tener problemas de rendimiento. Lo que debe preocuparse es si esto se debe a una pérdida de memoria. No es necesariamente una pérdida de memoria, pero podría serlo.
Java no es propenso a pérdidas de memoria, pero puede ocurrir especialmente con aplicaciones complicadas.
fuente