jueves, 17 de septiembre de 2009

A donde fue mi memoria???? Bueno la de mi equipo Solaris..... :(

Les comento el problema y la solucion....

Estamos trabajando en una demo de VDI y el equipo tiene poca memoria
física 4GB.
Al instalar y configurar la solucion completa (Solaris + VDI3.1) el
server nos quedaba con 1.4GB de memoria libre y esto solo con el
solaris activo! en cuanto arrancamos una máquina virtual... bueno el
CAOSSSSS! nos quedan 200MB libres! Donde esta la memoriaaaaaaa....

Bueno aquí la respuesta al misterio!

Con el siguiente comando vemos donde esta la memoria:

root@vboxvdi # echo ::memstat | mdb -k
Loading modules: [ unix krtld genunix specfs dtrace cpu.generic
cpu_ms.AuthenticAMD.15 uppc pcplusmp ufs ip hook neti sctp arp usba
fcp fctl nca lofs zfs md cpc random crypto fcip logindmux ptm sppp nfs
ipc ]
> ::memstat
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 572067 2234 55%
Anon 32230 125 3%
Exec and libs 3798 14 0%
Page cache 66363 259 6%
Free (cachelist) 61121 238 6%
Free (freelist) 310835 1214 30%

Total 1046414 4087

El 55% de la memoria la tiene el Kernel, unos 2.1GB.... Porque? La
respuesta es simple, el ZFS tiene un cache definido en el kernel y
esto hace que nuestro equipo reserve memoria para el.

Para ver las estadísticas de la cache ARC (Adaptive replacement cache)
en solaris utilizaremos el comando kstat

root@vboxvdi # kstat -p -m zfs |egrep -i "arcstats.(size|c_max)"
zfs:0:arcstats:c_max 3214583808
zfs:0:arcstats:size 1799621552

Otra forma de ver la memoria asignada a la cache del ARC es mediante
el comando mdb
root@vboxvdi # echo ::arc | mdb -k

Como podemos ver esta configurada para en 1.6GB (1799621552) con lo
cual de los 2.1GB que utiliza el Kernel, 1.7 son del cache ARC. La
memoria a utilizar por esta cache se puede configurar con un parámetro
del kernel zfs_arc_max de la siguiente manera

root@vboxvdi # vi /etc/system
set zfs:zfs_arc_max=0x20000000 -> 512MB

root@vboxvdi # init 6

Nota: Bajamos la cache a 512MB que en mi caso es suficiente para las
pruebas que tengo que realizar.

Luego del reboot el equipo nos queda de la siguiente manera:

root@vboxvdi # kstat -p -m zfs |egrep -i "arcstats.(size|c_max)"
zfs:0:arcstats:c_max 536870912
zfs:0:arcstats:size 536742048

root@vboxvdi # echo ::arc | mdb -k
c_max = 512 MB
size = 511 MB

root@vboxvdi # echo ::memstat | mdb -k
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 249272 973 24%
Anon 224495 876 21%
Exec and libs 11576 45 1%
Page cache 10257 40 1%
Free (cachelist) 409975 1601 39%
Free (freelist) 140839 550 13%

Total 1046414 4087

Para mas información ver los siguiente enlaces:
http://southbrain.com/south/2008/04/wheres-all-my-memory-gone-sola.html
http://blogs.sun.com/realneel/entry/zfs_arc_statistics
http://jjmora.es/solaris_memory_leak_o_zfs_usando_cache_arc

Espero que sea de utilidad!

Mariano

No hay comentarios: