Solaris tiene una gestión de la swap realmente avanzada, tanto, que hay veces que es muy dificil saber cuándo un proceso está swapeando y cuando no. Vamos a utilizar los comandos /usr/bin/vmstat y /usr/bin/iostat los cuales nos aportan información sobre el uso de la swap y discos.
Uso del comando vmstat
Este comando nos proporciona las estadísticas de uso de la memoria virtual de Solaris, en él, nos fijaremos en las columnas SwapIn - SwapOut (si,so) y PageIn - PageOut (pi,po). El problema es, a veces, no saber qué buscar, bien, vamos a ver si podemos aclararlo.
Si los valores de si o so no son 0, realmente tenemos un servidor muy cargado y swapeando (tal como entendemos todos, es decir, escribiendo en disco porque no le queda RAM), sin embargo, si estos valores son "0" (con en el ejemplo) lo siguiente que debemos mirar es el estado de pi y po. Estos valore indican las páginas que se han cargado (PageIn) y las que se han eliminado (PageOut), pero debemos tener en cuenta que est no significa que se utice espacio swap de disco para ello.
Vamos a verlo con el siguiente ejemplo, utilizaremos la opción -S para que vmstat nos muestre los valores de swap en un intervalo de 6 seg. (No hay que utilizar un valor menor de 5 ya que sino el propio comando interferirá en los resultados)
# vmstat -S 6Como podemos ver, los valores de si y so están a cero, sin embargo, el sistema está cargando continuamente páginas en memoria. Con el uso de iostat podremos ir afinando si nuestro sistema está o no realmente paginando en disco.
kthr memory page disk faults cpu
r b w swap free si so pi po fr de sr rm s6 sd sd in sy cs us sy id
0 0 0 6475424 838488 0 0 847 27 28 0 8 -0 -0 -0 -0 1441 1487 580 22 4 74
0 0 0 5541664 494480 0 0 536 0 0 0 0 0 0 0 0 2057 2599 1017 62 10 28
2 0 0 5534672 489152 0 0 389 1 1 0 0 0 0 0 0 1439 3772 876 67 9 25
0 0 0 5534248 489024 0 0 1047 0 0 0 0 0 0 0 0 1960 1945 1078 50 5 45
0 0 0 5534424 488872 0 0 342 0 0 0 0 0 0 0 0 2361 1742 1154 54 5 40
0 0 0 5538232 491632 0 0 361 0 0 0 0 0 0 0 0 1921 2148 1015 65 5 30
1 0 0 5545752 498264 0 0 351 0 0 0 0 0 0 0 0 3855 27594 1553 73 11 16
0 0 0 5550552 502264 0 0 769 1 1 0 0 0 0 0 0 3387 18331 1550 70 10 20
A continuación podemos ver un host que no tiene problemas de memoria ya que los valores de free, si,so,pi y po son constantes.
$ vmstat -S 6Uso del comando iostat
kthr memory page disk faults cpu
r b w swap free si so pi po fr de sr s0 s2 s4 sd in sy cs us sy id
0 0 0 11655392 2971784 0 0 2408 4 5 0 1 1 0 -0 163 2077 24269 2186 22 2 76
0 0 0 15870360 5630928 0 0 0 0 0 0 0 0 0 0 1044 3554 5886 3391 14 1 84
0 1 0 15865784 5626720 0 0 0 0 0 0 0 0 0 0 907 3367 10856 3295 18 1 81
0 1 0 15868640 5631256 0 0 0 0 0 0 0 0 0 0 934 3169 12233 3068 18 1 80
0 0 0 15871672 5634888 0 0 0 1 1 0 0 0 0 0 699 2855 10245 2876 15 1 83
0 0 0 15870600 5633928 0 0 0 0 0 0 0 0 0 0 1782 4977 6176 4957 16 2 82
0 0 0 15873832 5636952 0 0 0 0 0 0 0 0 0 0 1882 4608 4920 4869 17 2 82
0 0 0 15856600 5621712 0 0 0 0 0 0 0 0 0 0 123 2385 11685 2360 24 2 74
0 1 0 15868976 5631416 0 0 0 0 0 0 0 0 0 0 129 1897 36965 1819 26 2 73
0 0 0 15890056 5648016 0 0 23 1 1 0 0 0 0 0 61 1886 35675 1861 29 2 69
Vamos a utiliza el comando iostat el cual nos proporciona el uso de los discos, limitándonos a aquellos que se encuentren asignados a nuestro área de swap, de esta forma, podremos verificar si nuesto equipo está realmente utilizándolos
# swap -l
swapfile dev swaplo bloques libre
/dev/dsk/c5t20000004CF8F7B64d0s1 118,1489 16 8389632 7261120
/dev/dsk/c5t20000004CF7FE30Ed0s1 118,1497 16 8389632 7265360
# iostat -xnPzm 6
extended device statistics
r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device
0.5 0.6 5.0 0.6 0.0 0.0 0.7 16.4 0 0 c5t20000004CF8F7B64d0s0 (/)
0.1 0.0 0.7 1.3 0.0 0.0 7.8 9.3 0 0 c5t20000004CF8F7B64d0s1
0.1 0.3 6.9 17.4 0.0 0.0 4.2 23.9 0 0 c5t20000004CF7FE30Ed0s0 (/opt/zones)
0.1 0.0 0.7 1.3 0.0 0.0 7.6 8.5 0 0 c5t20000004CF7FE30Ed0s1
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0 0 c5t600A0B80002AF618000007A94A710D33d0s0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0 0 c5t600A0B80002AF618000007A94A710D33d0s1
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.4 0 0 c5t600A0B80002AF618000007A94A710D33d0s2
0.0 0.1 15.1 73.3 0.0 0.0 16.0 80.8 0 0 c5t600A0B80002AF618000007A94A710D33d0s6
0.4 1.1 8.1 39.3 0.0 0.0 0.0 3.3 0 0 c5t600A0B80002AF618000007A74A70F3ACd0s6
4.4 2.4 126.8 59.9 0.0 0.0 0.0 5.3 0 2 c5t600A0B80002AF618000007A54A70F35Fd0s6
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 0 0 sol10-oracle-applications:vold(pid491)
extended device statistics
r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device
5.6 0.2 46.4 0.5 0.0 0.1 1.7 9.5 1 5 c5t20000004CF8F7B64d0s0 (/)
2.4 8.2 19.1 1039.9 0.3 0.5 28.7 47.7 2 5 c5t20000004CF8F7B64d0s1
0.0 0.2 0.0 2.9 0.0 0.0 0.0 7.0 0 0 c5t20000004CF7FE30Ed0s0 (/opt/zones)
0.9 7.8 6.8 974.4 0.3 0.4 30.3 49.6 2 4 c5t20000004CF7FE30Ed0s1
0.9 22.5 6.8 5528.8 0.0 1.2 0.0 50.0 0 98 c5t600A0B80002AF618000007A94A710D33d0s6
0.0 1.9 0.0 350.4 0.0 0.1 0.0 37.7 0 7 c5t600A0B80002AF618000007A74A70F3ACd0s6
55.6 13.3 1266.3 372.3 0.0 2.2 0.0 32.0 0 97 c5t600A0B80002AF618000007A54A70F35Fd0s6
extended device statistics
r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device
3.5 0.0 39.3 0.0 0.0 0.0 0.0 6.9 0 2 c5t20000004CF8F7B64d0s0 (/)
1.5 2.7 12.0 338.7 0.0 0.1 0.1 29.4 0 2 c5t20000004CF8F7B64d0s1
0.2 2.7 1.3 338.7 0.0 0.1 0.0 38.0 0 2 c5t20000004CF7FE30Ed0s1
0.3 27.2 2.7 4387.7 0.0 1.1 0.0 39.8 0 99 c5t600A0B80002AF618000007A94A710D33d0s6
0.2 3.7 2.7 356.2 0.0 0.1 0.0 17.6 0 7 c5t600A0B80002AF618000007A74A70F3ACd0s6
47.0 3.2 841.6 236.9 0.0 2.9 0.0 57.3 0 100 c5t600A0B80002AF618000007A54A70F35Fd0s6
Asi que ..., sí, está swapeando y mucho ... ahora toca parametrizar correctamente nuestro Oracle
Conclusión
Para comprobar el correcto funcionamiento de nuestro sistema deberemos utilizar los comandos vmstat, iostat y sar
Referencias
Hola de nuevo:
ResponderEliminarTengo entendido que Solaris pagina y no swapea, pero me queda claro lo que realmente significa esto.
¿Donde puedo encontrar mas información sobre esos términos y como usarlos a nuestro favor? ¿Algún libro, documento en particular?
Hola JFlores,
ResponderEliminarSí Solaris pagina la memoria -la parte en pequeñas páginas- y luego la gestiona.
Básicamente -y sin entrar en mucho detalle- solaris hace el siguiente cálculo
Memoria = Memoria Física + Memoria de Intercambio - Reservada
Páginas = Memoria / Tamaño de Página
Cuando un proceso solicita memoria (mediante malloc) Solaris le asigna una página -inicialmente sólo la reserva- y el sistema de gestión de memoria buscará memoria física libre para alojar la página, si no la hubiese, "bajaría" una página de memoria física a memoria de intercambio (swap)
Los datos a revisar son -utilizando el comando vmstat- "pi" y "po" que hacen referencia a que el sistema de gestión de memoria ha "quitado una página de memoria física y la ha puesto en disco PO" o el contrario "PI".
Aquí tienes una explicación con un ejemplo más detallado, aunque creo que es interesante conocer el funcionamiento y por eso crearé un post sobre su funcionamiento.
Memoria en Solaris
Un Saludo,
Urko