[Actualizado] Listando los procesos swapped-out usando MDB

mié 02 de julio del 2008

Normalmente cuando un sistema se queda sin memoria física disponible empieza a "swappear". Si la escasez de memoria es realmente grabe podemos llegar a agotar la swap.

Con los recursos de los que disponen los equipos actuales es una situación poco probable, si llegamos a ella posiblemente sea debido a un bug de alguna aplicación que le lleva a consumir grandes cantidades de memoria sin liberarla. (Dada la calidad del software actual quizás no sea tan poco probable al fin y al cabo)

Cuando la swap está agotándose el sistema saca de ella las páginas que corresponden a procesos que están durmiendo. La cantidad de procesos que han sido "swapped-out" es indicada por la columna w del comando vmstat.

kthr memory page disk faults cpu r b w swap free re mf pi po fr de sr 2m m0 m1 m2 in sy cs us sy id 1 0 105 27444512 522824 298 3676 480 2237 2240 45904 2693 0 19 12 13 23541 1385668 10032 72 22 6

Una vez solventado el problema de escasez de recursos las páginas correspondientes a estos procesos no serán puestas en memoria hasta que despierten, cosa que puede suceder horas o incluso días después. Y, siendo sinceros, a quien no lo ha picado la curiosidad para saber de que procesos se trata. El siguiente comando para mdb nos los listará:

#lista los nombres de los procesos mdb -k <<EOF
::walk thread myvar|::print kthread_t t_schedflag|::grep .==0|::eval <myvar=K|::print kthread_t t_procp->p_user.u_comm
EOF
#lista los pids, hay que convertir el resultado a decimal mdb -k <<EOF
::walk thread myvar|::print kthread_t t_schedflag|::grep .==0|::eval <myvar=K|::print kthread_t t_procp->p_pidp->pid_id
EOF
#Puedes convertir de hexadeciamal a decimal en la misma shell de esta forma: # echo $((16#2A)) 42


Posted by Roger Jordan | Categories: Opensolaris Añadir Comentarios, Total: 0