在FreeBSD顶级实现中,进程列表下的总CPU使用率和CPU使用率是不同的?

出于某种原因,我的FreeBSD计算机上的整体CPU使用率在1%到85%之间波动,但是进程列中的CPU使用率从未累计到这个数量.例如,此处的总CPU使用率为83.5%,但进程列表中的CPU使用率低于2%:

last pid: 22965;  load averages:  1.45,  1.72,  3.06                                                                                                                                                                                                  up 151+20:08:57 12:32:38
137 processes: 2 running, 135 sleeping
CPU: 83.5% user,  0.0% nice, 12.8% system,  0.0% interrupt,  3.8% idle
Mem: 222M Active, 88M Inact, 315M Wired, 16M Cache, 110M Buf, 342M Free
Swap: 1996M Total, 30M Used, 1966M Free, 1% Inuse

  PID USERNAME    THR PRI NICE   SIZE    RES STATE    TIME    CPU COMMAND
22965 martin       1  96    0  7704K  4172K RUN      0:00  1.27% snmpset
 1234 root          1  44    0  3804K  1068K select  50:36  0.00% hald-addon-storage
 1204 haldaemon     1  44    0  7236K  2300K select  24:13  0.00% hald
 1135 root          1  44    0  3372K   928K nanslp   9:34  0.00% cron
46828 martin       1  44    0 11844K  4140K select   6:06  0.00% irssi
  407 _pflogd       1  44    0  3528K   604K bpf      5:41  0.00% pflogd
86984 root          1  44    0  5284K   996K select   5:14  0.00% gam_server
95843 martin       1  76    0  4560K  1192K wait     5:03  0.00% bash
 6714 martin       1  44    0  5748K  2512K select   4:46  0.00% screen
  775 root          1  44    0  3344K   532K select   3:48  0.00% syslogd

这两个CPU字段有何不同?什么可能导致这种行为?当总CPU使用率约为60-80%时,机器肯定响应较慢.

编辑:

如果还显示了内核线程的顶部输出(Shift s):

last pid: 54866;  load averages:  0.62,  0.90,  1.02                                                                                                                                                                                                  up 153+19:26:17 11:49:58
208 processes: 3 running, 188 sleeping, 17 waiting
CPU: 75.3% user,  0.0% nice, 12.4% system,  0.0% interrupt, 12.4% idle
Mem: 395M Active, 154M Inact, 324M Wired, 16M Cache, 110M Buf, 94M Free
Swap: 1996M Total, 112M Used, 1883M Free, 5% Inuse, 8K In

  PID USERNAME    THR PRI NICE   SIZE    RES STATE    TIME    CPU COMMAND
   11 root          1 171 ki31     0K     8K RUN    2809.4 52.78% idle
54866 martin       1  96    0  6680K  3548K RUN      0:00  0.98% snmpset
15836 root          1  44    0   322M   307M select  31:51  0.29% Xorg
   12 root         17 -60    -     0K   136K WAIT   455:55  0.00% intr
   17 root          1  44    -     0K     8K syncer 162:57  0.00% syncer
 1234 root          1  44    0  3804K  1068K select  51:16  0.00% hald-addon-storage
    3 root          1  -8    -     0K     8K -       27:06  0.00% g_up
 1204 haldaemon     1  44    0  7236K  2268K select  24:32  0.00% hald
    4 root          1  -8    -     0K     8K -       23:52  0.00% g_down
   13 root          1 -16    -     0K     8K -       20:20  0.00% yarrow
   14 root         20 -64    -     0K   160K -       14:37  0.00% usb
    2 root          1  -8    -     0K     8K -       10:42  0.00% g_event
最佳答案
默认情况下,top仅显示用户进程(即内核及其线程以外的进程).内核可能正忙于未显示在顶部显示中的磁盘或网络IO.您可以通过按SHIFT在顶部切换内核线程的显示.

您可以使用vmstat实用程序显示自系统启动以来(以及其他)网络和磁盘活动的统计信息. vmstat -i将显示自启动以来每个设备接收的中断数,以及每秒接收它们的平均速率.使用vmstat -p da查看磁盘正在执行的操作.

其他工具如iostat,systat和netstat也可以提供丰富的信息.

您可以通过调整调度程序配置来提高系统在负载下的响应能力.要立即更改它,请以root身份运行sysctl kern.sched.preempt_thresh = 240.要在引导时应用相同的设置,请确保将其添加到/etc/sysctl.conf中.这应该有所帮助,但请注意,它的有效性将受到您的工作量和硬件特性的限制.

转载注明原文:在FreeBSD顶级实现中,进程列表下的总CPU使用率和CPU使用率是不同的? - 代码日志