¿Has visto procesos de 6GB o más en prstat y pensaste que el servidor estaba sin memoria?
En Solaris, ese diagnóstico suele ser incorrecto.
Muchos administradores interpretan el RSS como consumo real, cuando en realidad gran parte corresponde a memoria compartida. La presión real de memoria se detecta desde el kernel, no desde la vista por proceso.
Regla práctica
Si pi y po están en cero y el sr es bajo, no existe presión de memoria.
Antes de analizar procesos, analiza el sistema.
Paso 1. Verificar si existe paging real
Ejecutamos:
vmstat 3 5
Salida del servidor analizado:
r b w swap free re mf pi po fr de sr ... us sy id
2 1 0 476735408 253210168 ... 0 0 2 ... 15 6 79
0 0 0 449325384 227805744 ... 0 0 1 ... 25 8 68
0 0 0 449325208 227952304 ... 0 0 1 ... 25 8 68
Observamos que:
pi = 0po = 0sr = 1–2- La memoria libre ronda los 230GB
El sistema no está intercambiando memoria con swap ni realizando escaneo agresivo. No existe presión de memoria.
Paso 2. Analizar la memoria desde el kernel
Para obtener la distribución real de memoria física:
echo "::memstat" | mdb -k
Salida:
Page Summary Pages MB %Tot
Kernel 3275919 25593 6%
Anon 10794130 84329 21%
Page cache 6184883 48319 12%
Free (cachelist) 23554437 184019 47%
Free (freelist) 6370709 49771 13%
Total 50331648 393216
La memoria anónima representa aproximadamente 84GB (21%), mientras que más de 230GB permanecen libres.
El sistema se encuentra holgado desde el punto de vista de RAM.
Paso 3. Por qué prstat puede resultar engañoso
Muchos análisis comienzan aquí:
prstat -a -s rss
Extracto:
NPROC USERNAME SWAP RSS MEMORY
291 oracle 38G 37G 9.7%
A simple vista puede parecer un consumo elevado. Sin embargo, Oracle utiliza memoria compartida (SGA). El RSS no representa consumo independiente por proceso.
En un servidor con 384GB de RAM, 37GB utilizados por Oracle no representan presión.
Errores comunes al analizar memoria en Solaris
- Confiar únicamente en
prstat. - Sumar RSS manualmente.
- No revisar
pi,poysr. - Ignorar la distribución real mostrada por
::memstat.
Checklist operativo
Antes de escalar una incidencia por memoria, verifica:
piypoen cero.srbajo.- Memoria libre superior al 20%.
- Anon menor al 80%.
Si estas condiciones se cumplen, el problema no es RAM.
Conclusión
En el servidor analizado:
- ~230GB libres
- 0 paging
- 0 swapping
- 21% uso de memoria anónima
No existe presión de memoria.
Si el sistema presenta lentitud, la investigación debe centrarse en CPU, I/O o comportamiento de aplicación.
Idea clave para recordar
En Solaris, la memoria no se diagnostica desde prstat.
Se diagnostica desde el kernel.