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

Как проверить загрузку процессора библиотеками в Linux?

У меня высокая загрузка ЦП. Есть ли способ определить, какая часть моей программы использует больше ЦП. Это программа, написанная на C ++, работающая на CENTOS 5.

Я подозреваю, что проблема высокой загрузки связана с разделяемыми библиотеками, но как я могу отслеживать, сколько ЦП используют все разделяемые библиотеки?

Вы можете попробовать использовать ltrace с -c след (очень похож на strace но для вызовов библиотеки вместо системных вызовов). На самом деле это не будет полным профилирование кода и может быть не той разбивкой по времени процессора, которую вы ищете, но это может быть просто быстрый инструмент уровня syadmin, который вам нужен.

kbrandt@kbrandt-acer:~$ ltrace -c xcalc
% time     seconds  usecs/call     calls      function
------ ----------- ----------- --------- --------------------
 66.83    0.222693        4453        50 XtCreateManagedWidget
 28.52    0.095048       95048         1 XtAppInitialize
  0.85    0.002837        2837         1 XtRealizeWidget
  0.83    0.002764        2764         1 XSetWMProtocols
  0.77    0.002581        2581         1 XtGetApplicationResources
  0.42    0.001383          53        26 XtWindow
  0.41    0.001371          54        25 XtDisplay
...
------ ----------- ----------- --------- --------------------
100.00    0.333219                   168 total

strace также с -c switch даст вам аналогичный результат, но покажет системные вызовы (вызовы, которые используют библиотеки - так что вроде на уровень глубже).

Предостережение с обоими этими сбоями заключается в том, что это время настенных часов, потраченное на каждый вызов, и оно не показывает, было ли это время активным или бездействующим.

Если у вас есть код и вы хотите сделать все возможное, вам нужно профилирование кода. Переполнение стека "Что я могу использовать для профилирования моего кода C ++ в Linux?"должно помочь вам начать. Я использовал Валгринд с кодом C и понравилось.

Я не думаю, что можно, но результат top -H может помочь (показывает использование ЦП потоками). Надеюсь, кто-нибудь сможет дать вам лучший ответ. Кроме того, это может быть простое недоразумение, но разве загруженные разделяемые библиотеки не вызывают чрезмерное использование ОЗУ, а не ЦП? Вы уверены, что проблема в процессоре?