Como verificar a utilização da CPU das bibliotecas no linux?

2

Estou tendo uma alta utilização da CPU. Existe alguma maneira de identificar qual parte do meu Programa está usando mais CPU. É um programa escrito em C ++, rodando em uma caixa do CENTOS 5.

Estou suspeitando que o alto uso do problema está nas bibliotecas compartilhadas, mas como posso monitorar a quantidade de CPU que todas as bibliotecas compartilhadas estão usando?

    
por Manuel 14.11.2010 / 23:03

2 respostas

6

Você pode tentar usar ltrace com o -c trace (muito semelhante a strace , mas para chamadas de biblioteca em vez de chamadas do sistema). Isso não será completo, na verdade, perfil do código e pode não ser o intervalo de tempo da CPU que você está procurando para, mas pode ser apenas a ferramenta de nível syadmin rápido que você precisa.

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 também com a opção -c fornecerá a você uma saída semelhante, mas mostrará as chamadas do sistema (as chamadas que as bibliotecas estão usando, de forma mais ou menos profunda).

A ressalva em ambas as quebras é o tempo gasto no relógio de parede em cada chamada e não mostra se estava ativo ou ocioso.

Se você tiver o código e quiser fazer todo o possível, você deseja criar um perfil de código. Stack Overflows " O que eu posso usar para criar o perfil do meu código C ++ no Linux? "você deve começar. Eu usei Valgrind com código C e gostei.

    
por 14.11.2010 / 23:10
0

Eu não acho que você pode, mas a saída de top -H pode ajudar (mostra o uso da CPU por threads). Espero que alguém seja capaz de lhe dar uma resposta melhor. Além disso, isso pode ser um simples mal-entendido, mas as bibliotecas compartilhadas não são carregadas e provavelmente causam uso excessivo de RAM em vez de CPU? Tem certeza de que a CPU é o problema?

    
por 14.11.2010 / 23:09