由于某种原因,我的 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% 左右时,机器的响应速度肯定会变慢。
编辑:
top
还显示了如果内核线程的输出( 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
答案1
默认top
只显示用户进程(即除内核及其线程之外的进程)。内核可能正忙于磁盘或网络 IO,但未显示在top
显示中。您可以top
通过按 来切换内核线程的显示SHIFTs。
您可以使用该vmstat
实用程序显示自系统启动以来有关网络和磁盘活动(除其他外)的统计信息。vmstat -i
将显示自启动以来每个设备接收到的中断数量,以及每秒接收中断的平均速率。用于vmstat -p da
查看您的磁盘正在做什么。
其他工具,如iostat
、systat
和netstat
也可能提供丰富的信息。
您可以通过调整调度程序配置来提高系统在负载下的响应能力。要立即更改它,请sysctl kern.sched.preempt_thresh=240
以 root 身份运行。要在启动时应用相同的设置,请确保/etc/sysctl.conf
也将其添加到。这应该会有所帮助,但请注意,其有效性将受到您的工作负载和硬件特性的限制。