Назад | Перейти на главную страницу

Linux: поиск системных процессов, которые находятся наверху

Я запускаю многопоточную программу на своем 8-ядерном процессоре. top команда показывает 8 запущенных процессов, каждый из которых использует ядро ​​на 100%. Проблема в том, что только 21% отмечены как пользовательские ЦП и мое приложение работает так медленно:

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% процессорного времени? В частности, я хочу знать, что это за системные вызовы.

Заранее спасибо!

РЕДАКТИРОВАТЬ: Это то, что возвращает 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      

Это время, потраченное на выполнение кода ядра, но это не означает, что он был запущен системными вызовами. Например, это может быть время, потраченное на чтение больших каталогов, но также может быть время, потраченное на обработку iptables правила, или что-то еще.

Вы можете установить соответствующий пакет (его можно назвать linux-tools-2.6, но это зависит от вашего дистрибутива) и используйте perf top чтобы посмотреть, какой код работает в ядре. Читать далее Вот около perf.

Прежде всего. man top вот несколько примеров

Использование ЦП от максимального к минимальному или наоборот SHIFT+r

Использование MEM SHIFT+m

k = kill a process by it's pid