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.