Linux:查找顶部的系统进程

我在我的8核处理器上运行一个multithreading程序。 top命令显示8个进程正在运行,每个进程利用100%的内核。 问题是只有21%被标记为用户cpu ,我的应用程序运行速度很慢:

Cpu(s): 20.6%us, 79.4%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

我怎样才能find进一步的信息关于系统进程的那些占了CPU时间的79%? 具体来说,我想知道这些系统调用是什么。

提前致谢!

编辑:这是什么顶部的回报:

 top - 11:23:04 up 83 days, 1:20, 10 users, load average: 8.00, 8.00, 8.00 Tasks: 267 total, 10 running, 257 sleeping, 0 stopped, 0 zombie Cpu(s): 40.6%us, 17.4%sy, 0.0%ni, 41.9%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st Mem: 16324640k total, 5645008k used, 10679632k free, 285368k buffers Swap: 2047992k total, 32064k used, 2015928k free, 4584140k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 27262 ahmad 20 0 308m 32m 18m R 102.2 0.2 5022:32 Espresso 26872 ahmad 20 0 176m 12m 4540 R 100.0 0.1 5087:05 Espresso 27263 ahmad 20 0 175m 13m 4824 R 100.0 0.1 5022:35 Espresso 27265 ahmad 20 0 175m 12m 4508 R 100.0 0.1 5022:35 Espresso 26869 ahmad 20 0 308m 31m 18m R 98.3 0.2 5086:20 Espresso 26870 ahmad 20 0 175m 13m 4864 R 98.3 0.1 5087:05 Espresso 26871 ahmad 20 0 176m 12m 4592 R 98.3 0.1 5086:58 Espresso 27264 ahmad 20 0 176m 12m 4552 R 98.3 0.1 5022:06 Espresso 1 root 20 0 19404 1164 940 S 0.0 0.0 0:02.12 init 2 root 20 0 0 0 0 S 0.0 0.0 0:02.81 kthreadd 

这是花费在执行内核代码上的时间,但这并不意味着它是由系统调用触发的。 例如,可能花时间去阅读大型目录,但也可能花费时间处理iptables规则或其他事情。

你可以安装相关的软件包(可以命名为linux-tools-2.6 ,但是这取决于你的发行版),并使用perf top来查看内核正在运行的代码。 在这里阅读更多关于perf

首先。 man top这里有一些例子

CPU利用率从最高到最低或反之亦然SHIFT+r

MEM使用SHIFT+m

k = kill a process by it's pid