usage tools increase check linux memory-management jvm

linux - tools - ¿Qué significa "Private_Dirty" memory en smaps?



monitor jvm linux (1)

Tengo un gran proceso de Java que consume RAM y estoy tratando de entender qué está haciendo con todo este recuerdo. Entonces, estoy haciendo un pmap -x en este PID y aquí hay una parte del resultado:

Address Kbytes RSS Dirty Mode Mapping 0000000000001000 4 0 0 rw--- [ anon ] 0000000000400000 48 0 0 r-x-- java 000000000050b000 4 4 4 rw--- java 0000000003b9d000 264 224 212 rw--- [ anon ] 0000000003bdf000 2199556 1887992 1830160 rw--- [ anon ] 000000396c800000 112 108 0 r-x-- ld-2.5.so 000000396ca1c000 4 4 4 r---- ld-2.5.so [...] ffffffffff600000 8192 0 0 ----- [ anon ] ---------------- ------ ------ ------ total kB 7072968 4382820 4270104

Como puede ver en la dirección 3BDF000, hay una asignación de 2199556 KBytes con 1830160 de Dirty.

En / proc / 10139 / smaps, puede verlo con más detalles:

03bdf000-89fe0000 rw-p 03bdf000 00:00 0 Size: 2199556 kB Rss: 1887996 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 57832 kB Private_Dirty: 1830164 kB Swap: 231996 kB Pss: 1887996 kB

Por lo tanto, me gustaría saber qué es este sucio recuerdo? Supongo que estas páginas no tienen que escribirse en el disco, entonces, ¿por qué se llaman sucias?


La memoria es privada, lo que significa que es exclusiva de este proceso, o compartida, lo que significa que múltiples procesos pueden tenerla asignada y en uso (piense en el código compartido de la biblioteca, etc.). La memoria también puede estar limpia: no se ha modificado desde que se cargó desde el disco o se proporcionó como páginas con relleno cero o lo que sea, por lo que si necesita liberarse para proporcionar páginas de memoria para otros procesos, puede descartarse. y volver a cargar / volver a llenar si alguna vez se necesita - o sucio, lo que significa que si se debe liberar, debe escribirse en un área de intercambio para que los contenidos modificados puedan recuperarse cuando sea necesario.

No es necesariamente inusual ver grandes cantidades de datos privados sucios en un proceso. El problema es cuando la suma de todos los datos sucios privados en todos los procesos del sistema se convierte en una parte importante (los números exactos dependen en gran medida de su carga de trabajo y rendimiento aceptable) de su memoria física general, y las cosas deben comenzar a intercambiarse o cerrarse. ..