Pregunta Ubuntu Linux: proceso de intercambio de memoria y uso de memoria


Mi Ubuntu consume más memoria de la que muestra el administrador de tareas:

sudo ps -e --format rss  | awk 'BEGIN{c=0} {c+=$1} END{print c/1024}'
2750.29

free -m

             total       used       free     shared    buffers     cached
Mem:          3860       2765       1094          0          3        300
-/+ buffers/cache:       2461       1398
Swap:         2729       2374        354

Eso es extraño. ¿Alguien puede explicar esta diferencia?

Pero lo que es más importante: Me gustaría saber cuánta memoria está usando realmente un proceso. No quiero saber el tamaño de la memoria virtual, sino la memoria residente más el intercambio de un proceso.

También he intentado dar salida al formato param "sz" de 'ps', pero la suma de esto es alta (16000 MB) (param 'size' da 36700 MB). ¿Hay más opciones?

Realmente quiero usar esto, para determinar qué programas / procesos están consumiendo mucha memoria (e intercambiar), para matarlos, porque la memoria es valiosa :-) Esto realmente no tiene sentido, así que pregunto aquí.

Salida de / proc / meminfo:

MemTotal:        3952812 kB                
MemFree:         1119192 kB
Buffers:            2676 kB
Cached:           290068 kB
SwapCached:       160980 kB
Active:          1805396 kB
Inactive:         731680 kB
Active(anon):    1745820 kB
Inactive(anon):   689184 kB
Active(file):      59576 kB
Inactive(file):    42496 kB
Unevictable:         148 kB
Mlocked:             148 kB
SwapTotal:       2795272 kB
SwapFree:         390900 kB
Dirty:              1984 kB
Writeback:             0 kB
AnonPages:       2085472 kB
Mapped:            67432 kB
Shmem:            190676 kB
Slab:              88012 kB
SReclaimable:      42704 kB
SUnreclaim:        45308 kB
KernelStack:        5496 kB
PageTables:        87860 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4771676 kB
Committed_AS:    9522364 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      374404 kB
VmallocChunk:   34359330144 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       61440 kB
DirectMap2M:     4030464 kB

12
2018-03-22 14:01


origen


Debo señalar que "1043.84" no está muy lejos de "1178", que es el número al que vas a llegar con ese cálculo que estás haciendo. - cjc
Tuve literalmente la pregunta idéntica en unix.stackexchange (+1). Patrick voló mi mente allí también: P-- unix.stackexchange.com/questions/34795/… - GoldenNewby


Respuestas:


El sistema de memoria virtual de Linux no es tan simple. No puede simplemente agregar todos los campos RSS y obtener el valor reportado used por free. Hay muchas razones para esto, pero golpearé a un par de las más grandes.

  • Cuando un proceso se bifurca, tanto el padre como el niño se mostrarán con el mismo RSS. Sin embargo, Linux emplea copy-on-write de modo que ambos procesos están realmente usando la misma memoria. Solo cuando uno de los procesos modifique la memoria, se duplicará. Así que esto causará la free número para ser más pequeño que el top Suma RSS.

  • El valor RSS no incluye memoria compartida. Porque la memoria compartida no es propiedad de ningún proceso, top No lo incluye en RSS. Así que esto causará la free número para ser más grande que el top Suma RSS.


9
2018-03-22 22:53



¡Oh gracias! Siempre pensé que free -m muestra la suma de memoria compartida real de todo el sistema. Pero como "man ps" señala: "La columna de memoria compartida debe ignorarse; está obsoleta". - David Halter
Lo sentimos, no puedo aceptar esta respuesta porque no responde al problema de intercambio, pero gracias de todas formas. - David Halter
@DavidHalter ¿Qué problema de swap? La información que proporcioné se aplica a toda la memoria, incluido el intercambio. - Patrick
la memoria compartida no es realmente grande, normalmente? Al menos eso es lo que vi en el administrador de tareas. Pero mi canje está muy usado: 1035 MB; La suma de PS es 1 GB y la suma de swap + rss es> 2 GB. Quiero ver cuánta memoria está usando realmente un proceso, no solo rss. Aún más interesante sería cuánta memoria intercambiada está usando un proceso. - David Halter
@DavidHalter, si desea ver la cantidad de memoria que utiliza un proceso (incluida la compartida), consulte la columna 'VSZ'. - Patrick


Creo que es mejor confiar en la salida de "gratis" en lo que respecta al uso total de la memoria, y confiar en "ps" para tener una idea general de cuánta memoria está usando un solo proceso.

El hecho de que la suma de los valores RSS de "ps" no sea igual a "libre" no impide que ordene sus procesos por RSS y evalúe los más grandes para matar.

Dicho esto, si todo su esfuerzo está solo en el servicio de asegurarse de que la máquina pueda hibernar, crear un intercambio mayor (en forma de un archivo en el disco, si es necesario) es probablemente una ruta más fácil de tomar.


1
2018-03-22 21:59





Finalmente obtuve la respuesta a mi pregunta. Hay un programa llamado smem (en Ubuntu / Debian apt install smem) que le permite listar intercambiar y usar la memoria por separado.

Aquí se pueden encontrar algunas formas diferentes de intercambiar listados: https://www.cyberciti.biz/faq/linux-which-process-is-using-swap/.


0
2018-04-23 23:39