J'aime, la réponse de mike Dunlavey ci-dessus (si légère hausse de son si vous la mienne légère hausse)
Je voudrais élaborer quelqu'un pressé avec deux méthodes:
- Un moyen rapide pour
gcc
les utilisateurs à l'échantillon dans ce gstack
- l'auto-inspection avec
SIGALRM
combiné avec backtrace
(conduit par votre propre t imer).
Il y a tout juste quelques jours, je l'ai fait quelque chose comme ça
# while true; do gstack $MYPID; sleep 2; done | logger $PARAMS
utilisant PARAM qui vont avec mes règles de routage syslog afin que mes journaux d'applications ont été entremêlées avec des piles (pas un LINE- parfait avec les événements)
les résultats étaient sur le nez, ils me ont souligné dans une zone que je pensais que pourrait être un problème du tout, mais était mon goulot d'étranglement en raison de misuse of reference in a tr1::bind
Dans la méthode d'alarme, faites attention à ce que vous faites dans le signal, n'utilisez rien qui alloue de la mémoire (pas de cout/cerr/boost, et n'utilisez que des formats simples (c.-à-d. "% 08X" avec printf)
Les profileurs sont parfaits - mais ne conviennent manifestement pas à un système de production - vous devez d'abord reproduire le problème sur un système hors production. – MarkR
En fait, vous n'avez pas besoin de voir le problème sur le système de développement. Au lieu de cela, le profileur peut vous dire qu'une partie importante du temps d'exécution est dépensée même si vous ne reconnaissez pas cela comme étant "long". Bien sûr, il y a d'autres problèmes (par exemple avec les performances de la base de données) où le profilage de l'application n'aidera pas. –