免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7026 | 回复: 9
打印 上一主题 下一主题

急!!!如何精确确定各process的CPU使用率 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-15 09:17 |只看该作者 |倒序浏览
请各版主和大侠们帮忙.

问题如下:

最近发现cpu使用率总是在30%(即闲置idle为70%),我想用TOP,prstat,ps等来确定是哪些process占用了这
30%,但当top显示cpu使用率是30%时,其列表中按cpu使用率排序的process其cpu使用率之和并不等于30%,只有1%左右.prstat显示各process的cpu使用率之和也只有1%左右,用prstat -t显示各用户cpu使用率之和也只有1%左右.我刚开始怀疑是否top显示cpu结果有问题,但vmstat,mpstat显示cpu总使用率结果与top基本一致.

所以,如何精确确定各process的CPU使用率,且其总和与top显示的一致或有什么命令我能真实看到各process的CPU使用率,好象top,prstat,ps都不能真实和全部显示各process的CPU使用率.

各命令显示结果如下(各显示结果采集时间有前后1~2秒的差别,但能反映实际情况)

#top
load averages:  0.34,  0.42,  0.43
191 processes: 189 sleeping, 2 on cpu
CPU states: 71.1% idle, 22.3% user,  6.6% kernel,  0.0% iowait,  0.0% swap
Memory: 16G real, 11G free, 4009M swap in use, 25G swap free

   PID USERNAME LWP PRI NICE  SIZE   RES STATE    TIME    CPU COMMAND
29897 user12        1  12    0 3296K 3032K cpu/2    0:00  0.33% ps
29835 user1          1  59    0 2976K 1800K cpu/1    0:00  0.18% top
14685 patrol         1  59    0   14M 9128K sleep  270:40  0.12% bgscollect
15751 patrol           1   9   10   34M   31M sleep  165:40  0.06% PatrolAgent
29836 user12         1  22    0 1136K  936K sleep    0:00  0.06% portal_monitor.
         1 root             1  59    0 1296K  440K sleep   39:59  0.05% init
23511 root             1  59    0 4136K 3256K sleep    0:00  0.04% sshd
   1140 root         13  59    0 5944K 3960K sleep  106:31  0.04% MultiNICBAgent
     483 root          21  59    0 2912K 2112K sleep   62:55  0.03% nscd
17323 user12       1  59    0     50M     43M sleep    0:09  0.02% dm_oracle
17290 user12       1  59    0     50M     43M sleep    0:07  0.02% dm_oracle
   1214 root          27  29   10   96M     51M sleep   42:30  0.01% java
17288 user12        1  59    0   50M      43M sleep    0:07  0.01% dm_oracle
15974 patrol          1  59    0   12M  5408K sleep   39:55  0.01% dcm
     691 user12        1  59    0   30M      13M sleep    0:01  0.01% cm
     691 user12        1  59    0   30M      13M sleep    0:01   0.0% cm


按cpu使用率排序的process
#prstat -s1

   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
28356 user1    5576K 4760K sleep   59    0   0:00:00  0.3% prstat/1
28339 user1    5576K 4776K cpu3    59    0   0:00:00  0.3% prstat/1
14685 patrol       14M 9128K sleep   59    0   4:30:39  0.1% bgscollect/1
     483 root       2912K 2112K sleep   59    0   1:02:55  0.1% nscd/21
15751 patrol       34M     31M sleep   29   10   2:45:40 0.0% PatrolAgent/1
   1140 root       5944K 3960K sleep   59    0   1:46:31  0.0% MultiNICBAgent/13
23511 root       4136K 3256K sleep   59    0   0:00:00  0.0% sshd/1
   1214 root          96M     51M sleep   29   10   0:42:30 0.0% java/27
         1 root       1296K  440K  sleep   59    0   0:39:59  0.0% init/1
       14 root       9472K 6480K sleep   59    0   0:16:55  0.0% vxconfigd/1
28341 user1       984K  776K sleep   59    0   0:00:00  0.0% tee/1
28357 user1       984K  776K sleep   59    0   0:00:00  0.0% tee/1
17288 user12       50M   43M sleep   59    0   0:00:07  0.0% dm_oracle/1
17297 user12       50M   43M sleep   59    0   0:00:11  0.0% dm_oracle/1
24893 root        4136K 3256K sleep  59    0   0:00:00  0.0% sshd/1
Total: 192 processes, 435 lwps, load averages: 0.58, 0.49, 0.45


各用户cpu使用率统计
#prstat -t
NPROC USERNAME  SIZE   RSS MEMORY      TIME  CPU
    13      user1         30M    25M    0.1%   0:00:00 0.6%
    63        root       635M  294M    1.8%    4:57:46 0.2%
      5     patrol          78M   57M    0.4%    8:01:42 0.2%
   111   user12     5450M 4386M   28%    0:10:10 0.0%
Total: 192 processes, 435 lwps, load averages: 0.59, 0.49, 0.45


#vmstat

kthr      memory            page              disk                  faults      cpu
r b w   swap  free  re  mf pi po fr de sr m1 m1 m1 m2   in   sy   cs us sy id
0 0 0 26028728 11403384 201 2011 0 63 63 0 0 0 0 0  0  456 17484 2963 22 6 71
0 0 0 26031000 11406808 257 2125 0 48 48 0 0 0 0 0  0  434 14825 2848 20 8 72
0 0 0 26031000 11406864 620 3593 0 32 32 0 0 0 0 0  0  451 18496 2972 24 8 69
0 0 0 26031000 11406880 187 1933 0   0 0 0 0 0  0  0  0  410 13238 2678 20 8 72
0 0 0 26031000 11406880 454 2503 0 79 79 0 0 0 0 0  0  410 14929 2806 22 9 70
0 0 0 26031000 11406952 411 2920 0   0 0 0 0 0  0  0  0  429 17249 2817 27 7 66
0 0 0 26031000 11406952 218 1960 0 32 32 0 0 0 0 0  0  419 13340 2706 19 8 73
0 0 0 26031000 11406968 188 1929 0   0 0 0 0 0  0  0  0  426 13134 2677 22 7 72
0 0 0 26031000 11406976 189 1936 0   8 8 0 0 0  0  0  0  434 13575 2720 24 5 72
0 0 0 26031000 11406976 188 1929 0   8 8 0 0 0  0  0  0  428 13192 2723 22 7 71

4个cpu各自的使用率
#mpstat
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0  580   0 2369    46   15  452   27   97   49    0  2079     28   2   0  70
  1  232   0 1110    35     5  379   23   93   56    0  1884     10   7   0  83
  2  240   0 1459    37     7  587   24   97   60    0  2804     13  10   0  77
  3  885   0 3338   311  202 1289   36   81   82   0  7073   32  13   0  55

[ 本帖最后由 风之幻想 于 2006-1-16 14:01 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-01-16 08:22 |只看该作者
用prstat -a看的结果如何呢?以及ps aux看到的结果.

论坛徽章:
0
3 [报告]
发表于 2006-01-16 11:42 |只看该作者
呵呵,

如想再仔细看,没有一个其它的操作系统像Soalris 10一样,可在毫秒/纳秒级检查CPU时间的占用:

以查时间的命令date为应用的例子,进程date运行时,读系统时间,并将结果返回console中:

# date
2006年01月16日 星期一 11时13分57秒 CST

但如想知道date何时做什么了,在毫秒/纳秒一级,可写个Solaris 10的dtrace脚本:

# vi date.d
#!/usr/sbin/dtrace -s
BEGIN
{
printf("System Call Times for date:\n");
printf("%20s\t%10s\n", "Syscall", "Microseconds"); }

syscall:::entry
/execname == "date"/
{ self->name[probefunc] = timestamp;
}

syscall:::return
/self->name[probefunc]/
{
printf("%20s\t%10d\n", probefunc, (timestamp-self->name[probefunc])/1000);
self->name[probefunc] = 0;
}

执行的效果:

# dtrace -q -s date.d

System Call Times for date:
Syscall Microseconds
resolvepath 30
resolvepath 33
stat 19
open 27
stat 17
resolvepath 13
open 14
...
read 25
close 12
ioctl 68
fstat64 20
write 45

进程date在各系统调用时的时间(ms),可显示出来。

论坛徽章:
0
4 [报告]
发表于 2006-01-17 10:30 |只看该作者

谢版主的回复

1.先谢谢版主-风之幻想.
   ps -auxwww 和prstat -a 我都试了,结果是一样的.用它们(包括top)都不能正确显示每个process的CPU使用率.我用的是solaris 9,不知版主在你的环境下,是否也有我说的情况?

2.再谢天使的回复
我用的是solaris 9,但你的提示我没看明白对我的问题有何帮助.

3.哪位知道某个第三方免费小监控软件(最好运行在字符界面下的)能解决这个问题?

论坛徽章:
0
5 [报告]
发表于 2006-01-17 15:12 |只看该作者
/usr/ucb/ps  -aux

论坛徽章:
0
6 [报告]
发表于 2006-01-18 05:58 |只看该作者
top version?

论坛徽章:
0
7 [报告]
发表于 2006-01-18 10:07 |只看该作者
回复 圣骑士
top: version 3.5.1

回复 风云使者
/usr/ucb/ps  -aux 这个命令我用过,结果一样的,只报告有1%.剩下的20%多上哪去了?

论坛徽章:
0
8 [报告]
发表于 2006-03-06 08:56 |只看该作者
把这个帖子顶起来,我也遇到同样的问题。
比楼主还严重,sar和vmstat里CPU已经占用100%了,但/usr/ucb/ps -aux看各进程加起来不过15%左右,其他CPU资源跑哪里去了?

论坛徽章:
0
9 [报告]
发表于 2006-03-06 22:47 |只看该作者
版主-风之幻想

你能否将这个贴子置顶, 发动大侠们来帮忙看看有什么高招或是否有类似的情况在他们的Sun平台上.我们的机器是SUN Fire 440/SUN Fire 220.

Thanks a lot.

论坛徽章:
0
10 [报告]
发表于 2006-03-07 07:49 |只看该作者
你的是不是内存有瓶颈,导致了CPU忙
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP