我们怎样才能确定是消耗CPU的%sy进程。
在下面这种情况下,没有netfilter,stream量低于1 mbps。但是系统进程占用CPU过多,CPU使用率也很高。如何从系统级别确定CPU消耗的过程。
top - 01:22:18 up 10:09, 3 users, load average: 14.36, 13.68, 11.68 Tasks: 200 total, 3 running, 197 sleeping, 0 stopped, 0 zombie Cpu0 : 3.1%us, 63.5%sy, 33.3%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 1.8%us, 34.2%sy, 64.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 16436984k total, 8449956k used, 7987028k free, 73420k buffers Swap: 8385920k total, 0k used, 8385920k free, 5566404k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5706 tlmsys 27 4 4490m 1.6g 13m S 51.6 10.2 12:37.67 java 4233 oracle 25 0 3448m 47m 33m R 9.9 0.3 0:03.62 oracle 3166 root 15 0 62616 1216 656 S 0.7 0.0 0:01.47 sshd 5512 tlmsys 15 0 96992 12m 9424 S 0.7 0.1 0:04.03 stlfetch 5520 oracle 15 0 3424m 72m 69m S 0.7 0.5 0:08.42 oracle 6 root 10 -5 0 0 0 S 0.3 0.0 0:01.59 events/0 4476 monitor 15 0 90116 1764 1008 S 0.3 0.0 0:00.61 sshd 5872 tlmsys 25 4 4479m 135m 11m S 0.3 0.8 0:25.72 java 7139 oracle 16 0 12740 1180 824 S 0.3 0.0 0:06.76 top 9268 root 16 0 12740 1180 816 S 0.3 0.0 0:02.80 top 9978 root 15 0 12740 1176 820 R 0.3 0.0 0:00.07 top 1 root 15 0 10348 696 584 S 0.0 0.0 0:00.79 init 2 root RT -5 0 0 0 S 0.0 0.0 0:00.02 migration/0 3 root 34 19 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/0 4 root RT -5 0 0 0 S 0.0 0.0 0:00.01 migration/1 5 root 34 19 0 0 0 R 0.0 0.0 0:00.00 ksoftirqd/1 7 root 10 -5 0 0 0 S 0.0 0.0 0:00.16 events/1 8 root 10 -5 0 0 0 S 0.0 0.0 0:00.09 khelper 145 root 12 -5 0 0 0 S 0.0 0.0 0:00.03 kthread 150 root 10 -5 0 0 0 S 0.0 0.0 0:00.15 kblockd/0 151 root 10 -5 0 0 0 S 0.0 0.0 0:00.03 kblockd/1 152 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid 311 root 13 -5 0 0 0 S 0.0 0.0 0:00.00 cqueue/0 312 root 13 -5 0 0 0 S 0.0 0.0 0:00.00 cqueue/1 315 root 13 -5 0 0 0 S 0.0 0.0 0:00.00 khubd 317 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kseriod 389 root 18 0 0 0 0 S 0.0 0.0 0:00.00 pdflush 390 root 15 0 0 0 0 S 0.0 0.0 0:00.78 pdflush 391 root 13 -5 0 0 0 S 0.0 0.0 0:00.00 kswapd0 392 root 13 -5 0 0 0 S 0.0 0.0 0:00.00 aio/0 393 root 13 -5 0 0 0 S 0.0 0.0 0:00.00 aio/1 599 root 11 -5 0 0 0 S 0.0 0.0 0:00.00 kpsmoused 645 root 10 -5 0 0 0 S 0.0 0.0 0:00.01 mpt_poll_0
其明确的说java是51.6%的cpu和oracle 9.9所以即使所有的进程cpus合并在100%以下,加载平均应该在2以下,
但为什么平均负载是14。
我们如何看到使用高CPU的内核进程(%sy)。
uname -a Linux 2.6.18-155.el5 (todbase1)
如果是内核bug的话,我们还是可以看到系统的进程。
%sy表示在内核进程(真正的内核线程)上花费的时间以及内核中不是进程的部分。 内核进程通常显示在最上面( ksoftirqd/0是一个)。 如果按瞬时CPU使用率进行sorting,并且这是一个贡献%sy的内核进程,那么该进程就会显示出来。 但是,如果它不是内核进程,而是正在执行的内核,top将不会提供任何信息。
具体来说,内核实际上有一个中断上下文(其中几个是硬件和软件中断),还有一个进程上下文(用于运行系统调用)。 如果内存服务,后一种types将由导致它们的进程显示为CPU时间。 但是,内核的调度方面以及与系统调用或其他中断处理无关的内核组件的活动将不会有详细的计费信息。
对于系统时间,有两个主要的IO候选者:
让我感到困惑的是你的高价值。
也许一个cat /proc/interrupts会给你更多的信息在这里。
我倾向于说你有networking相关的问题。
因此,添加ethtool -S IFACE |grep -vw 0的输出ethtool -S IFACE |grep -vw 0 。 将IFACEreplace为主网卡的名称。
对于较新的内核,您可以使用perf top和redhat 5.X,如果您想深入查看可以使用systemtap,请仔细阅读live production system上的systemtap,因为它在内核空间