It is quite easy to retrieve total memory usage on a Linux or Unix server, with free command. For example:
free -m total used free shared buffers cached Mem: 5963 3516 2446 0 194 1161 -/+ buffers/cache: 2160 3802 Swap: 4095 7 4088
We can see that we are using 3516 Mb over the 5963 Mb availables. If you take only "real used" memory, excluding buffers and caches, then we see that we use only 2160 Mb (second line, second column).
Same if you want to retrieve memory usage for one process, using "ps aux" gives, in the RSS column, the reserved memory for each process :
ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 10348 700 ? Ss Feb24 0:01 init [4] .../... root 25639 0.0 0.0 44268 644 ? Ss 05:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf nobody 25656 0.0 0.0 4576 1316 ? S 05:30 0:00 /product/ibmhttpserver/V6.1/bin/httpd -d /product/ibmhttpserver/V6. nobody 25659 0.0 0.0 288004 4284 ? Sl 05:30 0:00 /product/ibmhttpserver/V6.1/bin/httpd -d /product/ibmhttpserver/V6. nobody 25661 0.0 0.0 287964 4236 ? Sl 05:30 0:00 /product/ibmhttpserver/V6.1/bin/httpd -d /product/ibmhttpserver/V6. cdirect 25730 0.0 0.0 3200 1700 ? S 05:30 0:00 ftdaemon stf
But what if you want to sum all memory used by ibmhttpserver processes?
Using a script with shell + awk allows us to have the sum of all processes.
#!/bin/bash if [ "$1" = "" ] ; then echo -n "Nom du process : " read process else process=$1 fi ps aux | grep $process | grep -v grep | awk 'BEGIN { sum=0 } {sum=sum+$6; } END {printf("Taille RAM utilisée: %s Mo\n",sum / 1024)}'
For example :
./memProc ibmhttpserver Taille RAM utilisée: 15.9492 Mo
Simple, but efficient.
Catégorie