Después de una discusión hecha AQUÍ sobre cómo PHP-FPM
consumir memoria, acabo de encontrar un problema al leer la memoria al top
mando. Aquí hay una captura de pantalla de mi top
justo después de reiniciar PHP-FPM
. Todo es normal: alrededor de 20 PHP-FPM
procesos, cada uno de los cuales consume 5,5 MB de memoria (0,3% del total).
Aquí está el servidor PHP-FPM
antiguo justo antes del reinicio (un día después del reinicio anterior). Aquí, todavía tenemos alrededor de 25 PHP-FPM
con doble uso de memoria (10 MB que indican 0.5% del total). Por lo tanto, la memoria total utilizada debe ser 600-700 MB. Entonces, ¿por qué se ha utilizado la memoria de 1,6 GB?
free
son idénticos.Respuestas:
TL; DR 1
Su servidor está dentro de algún tipo de contenedor virtuozzo / openvz / virtualization-du-jour . Intentar dar sentido al uso de la memoria se inclina en los molinos de viento.
TL; DR 2
¡Linux se comió tu RAM! Pero está bien, se lo hace a todos.
La larga historia
¡Vamos a desglosarlo!
En la
Mem:
sección tenemos:$n total
: la cantidad de RAM física en su máquina$n used
: cuánta memoria está consumiendo Linux, no solo la suma de los procesos.$n free
: Cuánta RAM no está siendo consumida por Linux. Esto no tiene en cuenta que la memoria almacenada en caché y en búfer es esencialmente "gratuita".$n buffers
: el espacio de almacenamiento intermedio es donde se almacenan los bloques de E / S de disco que se han leído o están pendientes de escritura. Un búfer es una representación RAM de un solo bloque de disco.En la
Swap:
sección tenemos:$n total
: Autoexplicativo. Cantidad de espacio en disco disponible para intercambiar páginas.$n used
: Autoexplicativo. Cuánto espacio de intercambio de disco se usa.$n free
: Herp Derp.$n cache
: Estrechamente relacionado con los búferes anteriores. En realidad, es parte del caché de la página y no tiene espacio en el disco físico. No te preocupes por los detalles de esta conversación.La parte interesante viene cuando corres
free -m
. Verás tres líneas, y todos los números se correlacionarán con la parte superior. Daré mi propia PC como ejemplo:La fila Mem muestra RAM total en megabytes (
$n total
en la parte superior), cuánto se usa ($n used
en la parte superior), cuánto es libre ($n free
en la parte superior), cuánto se comparte (ignore eso), ¡y ahora viene lo bueno! Las columnasbuffers
ycached
enfree -m
correlacionan, previsiblemente,$n buffers
y$n cache
. Pero eche un vistazo a la segunda fila con lafree -m
que comienza-/+ buffers/cache:
. La matemática muestra que la cantidad utilizada es realmente (total) - ((used-buffers) -cached). Gratis es (total) - (theNewUsed).¿Qué significa todo esto? ¡Significa que Linux se comió tu RAM! La historia corta es que el kernel de Linux engulle RAM ya que está disponible para usar para el almacenamiento en caché de disco. No puede hacer nada al respecto, a menos que tenga ganas de intentar compilar un núcleo personalizado. Consejo profesional: no lo hagas.
La RAM está realmente allí y libre para que los procesos la utilicen a su antojo. Eso es lo que significa la
-/+ buffers/cache:
fila de adentrofree -m
. Sin embargo, está dentro del contenedor de virtualización sin hipervisor que hace que las cosas sean un poco ardientes. Simplemente no puede hacer un balance de su memoria con precisión de byte en este momento. Sin embargo, no está viendo ningún comportamiento que sea terriblemente inusual.Mantenga la calma y continúe. Además, obtenga un servidor físico (a menos que desee estadísticas de memoria que parezcan que Kreskin es su SysAdmin).
fuente
Top no es la mejor manera de verificar el uso de la memoria. Sin embargo, dado que mi pregunta fue marcada como un duplicado de esta pregunta, voy a publicar mi resolución aquí.
Leí en un foro que ps_mem.py verificará el uso de memoria por usted.
Repositorio: https://github.com/pixelb/ps_mem/
Descargar:
Uso:
Salida:
fuente