李华堂

李华堂的博客

他的个人主页  他的博客

linux查看指定程序的资源占用

李华堂  2009年10月15日 星期四 22:01 | 1314次浏览 | 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哲思注册吗?现在 注册 !
kenny

回复 kenny  2010年12月15日 星期三 16:06

top -p `pgrep mysqld|xargs|sed 's/[[:space:]]/,/g'`
配合sed可以实现,比使用perl会稍微简单点

0条回复

王依依

回复 王依依  2009年10月18日 星期日 10:14

学习了~

0条回复

张宇杰

回复 张宇杰  2009年10月17日 星期六 00:16

我只想到这个,但会多个top出来,因为后面要加个0
top -p `pgrep mysql | xargs printf "%d,0" $*`

1条回复

  • 李华堂

    回复 李华堂  2009年10月19日 星期一 09:20

    你这个,肯定会出多个,因为xargs会传多个arg过去嘛

    0条回复

张增波

回复 张增波  2009年10月16日 星期五 12:01

top -p `pgrep -d, xxxx `

3条回复

  • 李华堂

    回复 李华堂  2009年10月16日 星期五 13:29

    呵呵,多谢分享,这个办法,我早晨的时候已经想到了,但是我还是不理解为啥top -p不支持管道

    2条回复

      • 张增波

        回复 张增波  2009年10月16日 星期五 14:02

        如果采用 prep xxx | xargs top -p ,则可能会生成多个top进程,我也看不出来这样做简单。

        1条回复

          • 李华堂

            回复 李华堂  2009年10月16日 星期五 16:18

            pgrep -d,xxx|xargs top -p
            实际得到的top -p pid1,pid2,pid3,但是就是执行错误,不知道为啥

            0条回复

Will Song

回复 Will Song  2009年10月15日 星期四 22:16

学习一下~
你用的什么截的图?弱弱地问。。。

3条回复

暂时没有评论

Zeuux © 2019

京ICP备05028076号