李华堂 2009年10月15日 星期四 22:01 | 2012次浏览 | 12条评论
linux下,或者说*inx下有个top命令,可以让我们实时的监控进程运行状态,包括cpu占用,内存占用等。常用的管理指令像c查看命令行参数,s调整刷新时间,M以内存排序,P以cpu排序,N以进程排序就不说了,这里咱们说说查看指定进程资源占用这一特殊情况。比如说:我只查看apache或者mysql的资源占用情况。怎样才能从一堆的信息中找到这个有用信息呢?
1.特定用户
一般像apache或者mysql这些服务我们都会用专门的帐号来运行它们,这样的话我们可以直接利用top的U or u指令,指定特定的用户。我们就可以得到想要的信息了。这种方法个人感觉很强大,因为它可以适应指定用户进程数不断变动的情况例如apache。
2.指定进程
因为习惯上,我们会将很多服务都以root的身份运行。这种情况怎么挑出来有用的信息呢?那我们就要找不同点了,是内存占用高,cpu占用高还是进程id高?对于启动以后不再增加进程的程序笔者又想出来一招。开源的工具总会给你惊喜,只有你想不到的,没有它做不到的。到底怎么办呢?仔细的读了几遍top的man,发现了一个有用的参数-p。而且它支持同时传入多个pid。
于是一条接近无敌的指令出现了:top -p `pgrep mysql |xargs perl -e "print join ',',@ARGV"
分析一下:本例以mysql为例。先通过pgrep取得所有包含关键字mysql的进程id,然后通过一句perl指令把得到的进程组合成top -p参数可以接受的格式,然后传给top。
这条指令虽然达到了目的,但是个人觉得有点繁锁。使用了一句perl命令主要是不知道怎么用bash命令把得到的进程ip变成pid1,pid2,pid3这样的形式,笔者在这一步卡了十多分钟。另外得到结果以后怎么通过管道+xargs传给top -p笔者也没有想出来,希望有更简捷方法的朋友指点:)
Zeuux © 2024
京ICP备05028076号
回复 kenny 2010年12月15日 星期三 16:06
配合se