У меня высокая загрузка ЦП. Есть ли способ определить, какая часть моей программы использует больше ЦП. Это программа, написанная на 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
может помочь (показывает использование ЦП потоками). Надеюсь, кто-нибудь сможет дать вам лучший ответ. Кроме того, это может быть простое недоразумение, но разве загруженные разделяемые библиотеки не вызывают чрезмерное использование ОЗУ, а не ЦП? Вы уверены, что проблема в процессоре?