我在 8 核处理器上运行一个多线程程序。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
如何找到有关占用了 79% CPU 时间的系统进程的更多信息?具体来说,我想知道这些系统调用是什么。
提前致谢!
编辑:这是 top 返回的内容:
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
答案1
这是执行内核代码所花费的时间,但这并不意味着它是由系统调用触发的。例如,它可能是读取大型目录所花费的时间,但也可能是处理iptables
规则所花费的时间,或者其他事情。
您可以安装相关软件包(可以命名为linux-tools-2.6
,但这取决于您的发行版)并使用它perf top
来查看内核正在运行的代码。阅读更多这里关于perf
。
答案2
首先。man top
以下是一些示例
CPU 利用率从最高到最低或从最低到最高SHIFT+r
MEM 使用情况 SHIFT+m
k = kill a process by it's pid