统计apache内存占用的shell脚本(图文)

发布时间:2020-01-21编辑:脚本学堂
用shell脚本统计apache的内存占用,可以通过/proc目录下的$apacheid/smaps来获取,本文通过具体实例,进行详细的诠释。供大家学习参考。

linux中,有关apache内存使用的数据都可以在/proc/$apachepid/smaps中获得,在用脚本进行统计时,可以针对这里面的字段进行统计分类。

1,获取apache的pid,如下图:
 

获取apache的pid

下面用awk来获取pid=652的内存占用数据,例如:
 

复制代码 代码示例:
[root@www]# awk ' $3 ~ "kB" { sum[$1] += $2} END {for (key in sum) print key, sum[key]" kB"}' /proc/652/smaps

输出如下图:
 

awk分析apache内存

分析一个apache进程的数据,可以用一行命令来操作。
对所有进程的分析,可以将进程pid放进数组中,然后用awk加以分析即可。

例如:
 

复制代码 代码示例:

#!/bin/bash
#filename:count_apache_mem.sh
APACHEPID=($(ps -eo user,pid | awk '$1~"^apache"{print $2}'))
#设定数组变量APACHEPID并把获得apache-pid复制给这个数组
echo "apache total process: ${#APACHEPID[@]}"
#数组元素的个数,即apache进程的总数

for pid in ${APACHEPID[@]}
do
echo $pid:
awk ' $3 ~ "kB" { sum[$1] += $2} END {for (key in sum) print key, sum[key]" kB"}'  /proc/$pid/smaps
done >> /tmp/apachemem
#在数组中循环执行awk统计,然后将统计结果写入到/tmp/apachemem临时文件。

调用示例,如下图:
 

统计apache内存占用

以下是对以上脚本的改进,将数据汇总后,用awk进行分析,然后删除掉汇总文件。
代码如下:
 

复制代码 代码示例:

#!/bin/bash
APACHEPID=($(ps -eo user,pid | awk '$1~"^apache"{print $2}'))
echo "apache total process: ${#APACHEPID[@]}"  

for pid in ${APACHEPID[@]}
do
echo $pid:
awk ' $3 ~ "kB" { sum[$1] += $2} END {for (key in sum) print key, sum[key]" kB"}'  /proc/$pid/smaps
done >> /tmp/apachemem

echo "apache total memsum:"
awk '$3 ~ "kB" { sum[$1] += $2} END {for (key in sum) print key, sum[key]" kB"}' /tmp/apachemem
echo "delete tmp file!"
rm -fr /tmp/apachemem

下面继续改造该脚本,用到了shell自定义函数,如下:
 

复制代码 代码示例:

#!/bin/bash
TMPFILE=/tmp/apachemem
#get apache pid
APACHEPID=($(ps -eo user,pid | awk '$1~"^apache"{print $2}'))
echo "apache total process: ${#APACHEPID[@]}"

#define memtotal
memtotal() {
filename=$1
awk ' $3 ~ "kB" { sum[$1] += $2} END {for (key in sum) print key, sum[key]" kB"}'  $filename
}

#get every pid memtotal into tmpfile
for pid in ${APACHEPID[@]}
do
echo $pid:
memtotal /proc/$pid/smaps
done >> $TMPFILE
 
#get apache total memsum
echo "apache total memsum:"
memtotal $TMPFILE
#delete tmpfile
echo "delete tmp file!"
#rm -fr /tmp/apachemem

代码说明:
把统计的过程设置为一个函数memtotal。

调用示例:
 

复制代码 代码示例:
[root@www tmp]# ./apache-mem.sh
apache total process: 8
apache total memsum:
Shared_Clean: 5024 kB
Pss: 3024 kB
Size: 158368 kB
Shared_Dirty: 20064 kB
Swap: 0 kB
Private_Dirty: 1216 kB
Private_Clean: 0 kB
Rss: 26304 kB
delete tmp file!

有关用shell脚本统计apache内存占用例子,就分享这些吧,大家可以在此脚本上自行扩展相关功能,比如生成简洁易懂的报表,加入定时任务cron等。