设为首页 收藏本站
查看: 2412|回复: 6

如何通过shell脚本统计apache使用多少内存

[复制链接]

尚未签到

发表于 2012-11-15 09:10:07 | 显示全部楼层 |阅读模式
很多筒子问我如何能够写出能用的shell脚本
这事其实不难,只要按照以下思路进行就行了
1 把复杂的问题简单化,模块化
2 写出每个模块的伪码
3 组装你的模块
4 写出shell code
5 测试


这事看起来很简单,做起来。。。。。 其实也不难,so easy!
大多数人都是因为害怕所以不敢开始仅次而已,所以筒子们开始吧,从现在开始就动手写你的shell吧
你会喜欢上这工作的!


我们现在就来分析需求统计apache的内存使用量
apache的内存使用量数据如何获得呢?

这事就是硬功夫了,要写shell你得多linux操作系统了解,数据得从/proc/$apachepid/smaps里面获得,对里面的字段进行统计分类来获得。

apache的pid如何获得?

  • [iyunv@www conf]# ps -eo user,pid | grep '^apache'
  • apache   12160
  • apache   12161
  • apache   12162
  • apache   12163
  • apache   12164
  • apache   12165
  • apache   12166
  • apache   12167
顺着这个思路就可以想到用awk来解决,用awk的数组就可以了

  • [iyunv@www conf]# awk ' $3 ~ "kB" { sum[$1] += $2} END {for (key in sum) print key, sum[key]" kB"}'  /proc/12160/smaps Shared_Clean: 628 kB Pss: 378 kB Swap: 0 kB Shared_Dirty: 2508 kB Size: 19796 kB Private_Dirty: 152 kB Private_Clean: 0 kB Rss: 3288 kB

apache的进程又不是一个,很多个,如何收集所有进程信息呢?

用个循环就可以了,先把apache的pid放到一个数组里面,然后在找个数组里面循环执行awk统计



  • 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临时文件内
最后还可以把这个临时文件输入,如果您愿意,ok,现在这个脚本总体就是这个样子了


  • #!/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
怎么样,简单吧!
但是这样的脚本看起来就“很挫”,我们把它变得专业点,也是大家以后养成好的编码习惯,用一种函数编程的思想去写code。


  • #!/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,这样做的好处是能够提高代码的复用度,看起来也简介,后期修改直接改这个函数就可以了,不用全文修改。
下面是执行的结果


  • [iyunv@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!
时间有限,水平有限,这个脚本还有很多其他需要完善的地方,例如添加交互式的设计,统计哪个服务的内存由参数$1传递进去,脚本的健壮性还有待加强,算是抛砖引玉吧,请大家多交流。
最后想对shell刚入门的筒子说,只要你动手开始写shell就已经成功一半了,剩下的就是一个积累的过程。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-2155-1-1.html 上篇帖子: shell实现文件名相同路径不同的批量复制 下篇帖子: linux shell脚本学习指南电子书下载 多少 内存 如何

尚未签到

发表于 2013-3-18 04:14:36 | 显示全部楼层
这是什么东东啊

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-16 20:02:50 | 显示全部楼层
勃起不是万能的,但不能勃起却是万万都不能的!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

发表于 2013-5-20 04:25:18 | 显示全部楼层
自从我变成了狗屎,就再也没有人踩在我头上了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-23 11:28:26 | 显示全部楼层
一时的冲动,子孙的危机!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-30 04:07:46 | 显示全部楼层
生,容易。活,容易。生活,不容易。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-6-4 19:36:57 | 显示全部楼层
睡眠是一门艺术——谁也无法阻挡我追求艺术的脚步!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表