Una pregunta más sobre la memoria en Solaris 10.
Una parte superior me muestra que tengo 672 MB de memoria libre:
130 processes: 126 sleeping, 2 zombie, 2 on cpu
CPU states: 95.1% idle, 3.9% user, 1.0% kernel, 0.0% iowait, 0.0% swap
Memory: 16G phys mem, 672M free mem, 2048M total swap, 2023M free swap
Un vmstat me muestra lo mismo:
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr rm s0 s1 s2 in sy cs us sy id
0 0 0 564744 687896 3 13 0 0 0 0 0 0 0 0 0 354 667 752 1 1 98
Pero cuando hago un tamaño prstat -a -s me sale esto:
NPROC USERNAME SWAP RSS MEMORY TIME CPU
45 orbixadm 1449M 1592M 9.7% 4:46:53 0.4%
48 root 146M 160M 1.0% 8:09:49 1.2%
3 user1 46M 204M 1.2% 0:00:45 0.0%
9 webservd 46M 14M 0.1% 0:00:00 0.0%
5 ctxsrvr 28M 32M 0.2% 4:54:51 0.0%
11 user2 23M 34M 0.2% 0:00:37 0.2%
4 user3 4840K 11M 0.1% 0:00:01 0.0%
1 smmsp 1456K 4552K 0.0% 0:00:24 0.0%
2 daemon 2128K 6224K 0.0% 0:06:32 0.0%
1 user4 1232K 3608K 0.0% 0:00:00 0.0%
1 nagios 376K 2472K 0.0% 0:15:18 0.0%
y como puede ver, la suma de los valores RSS no alcanza los 15 GB de memoria, e incluso si le agrego valores SWAP.
Entonces mi pregunta es: ¿qué comando creo?
Si top y vmstat me dan un buen resultado, ¿dónde están mis 15 GB de memoria usada? Si no, ¿por qué me muestran eso?
Editar: el resultado para el comando: % echo ::memstat | mdb -k
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 1687138 13180 82%
Anon 137110 1071 7%
Exec and libs 47107 368 2%
Page cache 95277 744 5%
Free (cachelist) 22248 173 1%
Free (freelist) 69592 543 3%
Total 2058472 16081
Physical 2055442 16058
Edición 2:
Ok, ahora puedo ver la memoria utilizada por el caché ARC.
Pero con algunas pruebas nuevas, ahora tengo:
2066 MB used
( prstat -Z y echo :: memstat | mdb -k result)
1193 MB free
( resultado superior )
8859 MB ARC cache
( kstat zfs :: arcstats: resultado de tamaño )
Lo que nos da más o menos 12 GB
memoria, mientras que mi sistema tiene 16 GB
.
Tal vez me perdí algo más, pero ¿dónde están los otros 4 GB
?
fuente
kstat zfs::arcstats:size
resultados a su pregunta.Respuestas:
Es probable que ZFS esté utilizando la mayor parte de su memoria como caché ARC. Si desea saber cómo se usa su RAM, ejecute este comando como root:
En Solaris 10 10/09 y versiones posteriores, esto muestra algo como esto:
Como puede ver, hay una línea que indica la cantidad de RAM que se usa para almacenar en caché los datos del archivo ZFS. Desafortunadamente, está ejecutando una versión anterior de Solaris 10, por lo que memstat no muestra esta estadística ZFS por separado. Se incluye con la memoria utilizada del Kernel, lo cual es confuso. Un núcleo no debe usar 13 GB de RAM en circunstancias normales.
De todos modos, todavía hay una manera de mostrar el tamaño completo de ARC en su servidor.
Solo ejecuta este comando:
Muestra que en mi máquina, 273 MB de RAM se utilizan actualmente para manejar el caché ZFS ARC. memstat muestra que de estos 273 MB, se utilizan 208 MB como caché de archivos. Hasta estos 208 MB de RAM podrían liberarse automáticamente bajo demanda si las aplicaciones lo necesitan.
Ahora veamos el uso de memoria de procesos. Si usa la opción -Z con prstat, muestra un resumen por zona bajo las estadísticas por proceso. Aquí la zona global (y única) está utilizando 185 MB de RAM. Esto debería (aproximadamente) coincidir con la suma de todos los procesos de la columna rss.
Estos 185 MB corresponden a la suma de dos líneas en la salida de memstat: "Anon", que es la RAM utilizada por las aplicaciones para almacenar datos y "Exec y libs", que son las aplicaciones y el código de sus bibliotecas.
fuente
La memoria está llena de páginas sin asignar de datos leídos del disco. Se guarda en la memoria porque esos archivos pueden leerse nuevamente y mantener los datos en la memoria guarda una lectura de disco. La memoria libre se desperdicia para siempre, por lo que la computadora intenta conservar la menor cantidad posible.
Por ejemplo, supongamos que ejecuta un programa. El programa termina. El programa todavía está en la memoria, pero esas páginas de memoria no son utilizadas por ningún proceso ya que el programa no se está ejecutando. Si el sistema no está bajo presión de memoria, las páginas se mantienen en la memoria. Si el programa se ejecuta nuevamente, esto ahorrará el esfuerzo de liberarlo solo para tener que asignar más memoria para el programa y luego volver a leerlo. Y si las páginas son necesarias para otra cosa, sigue siendo una victoria para el sistema porque es más fácil mover una página de memoria directamente de uso a otra que liberarla solo para que se vuelva a usar.
La memoria no es un recurso ahorrable. Si deja 1GB gratis durante una hora, todo lo que podría haber hecho con esos datos se perderá para siempre.
fuente