Identificar e monitorar todo consumo de memória é essencial para evitar problemas futuros e garantir o funcionamento e performance correto de um servidor. Embora o Solaris 10 seja um sistema da família Unix, ele possui suas particularidades.
Como verificar o consumo de memória cache.
Especificações de servidor usado no exemplo:
10GB = Swap memory 28GB = Physical memory
Esse comando mostra as informações de consumo da memória virtual incluindo a memória RAM:
-bash-3.2# swap -s
total: 87832k bytes allocated + 3952k reserved = 91784k used, 33816648k available
Mostra as informações da area de swap no disco:
-bash-3.2# swap -l
swapfile dev swaplo blocks free
/dev/dsk/c0d0s1 100,1 16 20496368 20496368
Exibindo estatísticas de memória virtual
-bash-3.2# vmstat 2 2
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr vc -- -- -- in sy cs us sy id
0 0 0 33859920 26366728 46 411 9 1 1 0 0 0 0 0 0 1157 954 1030 0 0 100
1 0 0 33815328 25780520 30 332 28 0 0 0 0 0 0 0 0 1168 1232 1033 0 0 100
Esse comando mostra as estatísticas de consumo de memória de forma mais simples de analisar, infelizmente só funciona em sistema que estão utilizando UFS como filesystem:
-bash-3.2# echo "::memstat" | mdb -k
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 221753 1732 6%
Anon 14263 111 0%
Exec and libs 2866 22 0%
Page cache 212380 1659 6%
Free (cachelist) 3210840 25084 87%
Free (freelist) 7914 61 0%
Total 3670016 28672
Uma alternativa que pode ajudar bastante na analise do consumo de memória é utilizar um script pronto para isso.
O script abaixo feito por lingeshwaran.rangasamy@gmail.com e está publicado no site www.unixarena.com, foram realizadas poucas alterações para não comprometer o funcionamento nem a ideia original do autor.
#!/usr/bin/bash
swap -l | awk '{ print $4 }'| grep -v blocks > temp.swapl
swap -l | awk '{ print $5}'| grep -v free > free.swap1
MEM=$(echo `echo '::memstat' | mdb -k |tail -1|awk '{ print $3 }'` "*" "1024"|bc)
SWP=$(echo $(tr -s '\n' '+' < temp.swapl)0 | bc)
TSWP=$(echo "$SWP" "/" "2" |bc)
TOTALVS=$(echo "$MEM" "+" "$TSWP" |bc)
echo "Total Physical Memory = $(echo "$MEM" "/" "1024" "/" "1024" |bc) GB"
echo "Total Swap Space = $(echo "$TSWP" "/" "1024" "/" "1024" |bc) GB"
echo "Total Virtual storage space(Physical + Swap) = $(echo "$TOTALVS" "/" "1024" "/" "1024" |bc) GB"
FREEVS=$(echo `vmstat 1 2 |tail -1|awk ' { print $4 } '` "+" `vmstat 1 2 |tail -1|awk ' { print $5 } '` |bc)
echo "Free Physical Memory = $(echo "scale=2;`vmstat 1 2 |tail -1|awk ' { print $5 } '` "/" "1024" "/" "1024" "|bc) GB"
echo "Free Swap = $(echo "scale=2;`awk '{total += $NF} END { print total }' free.swap1` "/" "2" "/" "1024" "/" "1024" "|bc) GB"
echo "Free Virtual storage space(Free Physical + Free Swap) = $(echo "$FREEVS" "/" "1024" "/" "1024" |bc) GB"
FREEVSP=$(echo "scale=2;$FREEVS*100/$TOTALVS" |bc)
echo "Free Virtual storage Percentage = $FREEVSP % "
FREEVSPR=$(echo $FREEVSP|cut -c 1-2)
rm temp.swapl
rm free.swap1
if [[ "$FREEVSPR" -gt 15 ]]
then
echo "System is running with enough virtual storage space(Free virtual storage space $FREEVSP %)"
exit 0
else
echo "The percentage of available storage space is low ($FREEVSP percent)"
exit 1
fi