¿Por qué el valor de VSIZE en la parte superior es diferente del valor de VSZ (tamaño del conjunto virtual) en ps?

9

Sé que VSZ in pses para el espacio total de direcciones asignado para la aplicación y a veces tiene el alias de vsize (mencionado en la página de manual de pson linux), pero ¿cuál es la definición de VSIZE top? Esta salida superior del iPhone es diferente de la superior en Linux:

 PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS  RPRVT  RSHRD  RSIZE  VSIZE
 1875 emma         0.0%  0:30.83   7   139    932 17868K  5328K    29M   181M

root# ps -eo pid,rss,vsz|grep 1875
 1875  29324   441324
Ralph Wen
fuente
No puedo reproducir esto en ninguna de mis máquinas Darwin. ¿Me hace pensar que el shell que instalaron en el iPhone tenía un extraño conjunto de bloques?
polinomio
parecen estar calculando RSIZE / rss de la misma manera, pero ps informa un vsz 2.5x más grande que el reportado por top. tal vez topen IOS no incluye objetos compartidos en vsize, o algo así.
Tim Kennedy el
"Esta salida superior del iPhone es diferente de la superior en Linux", no es una sorpresa, ¿verdad?
Poige

Respuestas:

5

El sistema de memoria de Linux está lleno de muchas rutinas de utilidades de optimización de memoria y uso compartido de memoria, lo que hace que la idea de cómo se comparte y se consume la memoria, es un enfoque engorroso. La salida de ps y otros comandos relacionados con ps aumentan su salida de datos bajo /procsistema de archivos. Particularmenteps, RSS (memoria de tamaño residente) y VSIZE (tamaño de memoria virtual) son importantes, sin embargo, VSIZE no muestra el uso preciso de la memoria y la diferencia entre VSIZE y rss es lo que realmente se pretende y se asigna al programa durante la inicialización, pero Es posible que no se haga referencia todavía. Al igual que el programa puede tener muchas bibliotecas vinculadas, pero aún no están cargadas porque aún no se hace referencia en el tiempo de ejecución real del programa. RSS proporciona la memoria total realmente utilizada por el programa, pero puede que no proporcione una imagen real del consumo de memoria, ya que la mayor parte de la memoria asignada puede compartirse con otras instancias del mismo proceso u otros procesos. Mirar hacia abajo /proc/<processid>/mapspuede dar una idea aproximada de cómo se ha utilizado la memoria, pero a veces pueden ser engañosos. Utilizarpmap -x <pid> desde la línea de comandos, útil para ver la propagación es.

Las utilidades a menudo mejores son freey vmstat. freele dará detalles generales del consumo de memoria actual y vmstat se puede usar para ver con qué frecuencia se actualiza.

Nikhil Mulley
fuente
Otra razón o explicación reflexiva por la cual NO se debe considerar que ps está dando el uso correcto de la memoria de proceso. Lea esto en virtualthreads.blogspot.com/2006/02/…
Nikhil Mulley
2
Lo que el cartel de esta respuesta está tratando de decir es que la definición de memoria utilizada es compleja y variada. No hay un solo lugar en el núcleo donde se rastrea y se informa. Las utilidades realizan su propia interpretación de las numerosas estadísticas que informa el núcleo.
Johan