2010-06-17 5 views
0

Donné: multithread (~ 20 threads) application C++ sous RHEL 5.3. Lors d'un test sous charge, le haut indique que l'utilisation du processeur saute dans la plage de 10 à 40% toutes les secondes. La plupart des threads implémentent un pattern de design d'objet actif: thread a une file d'attente thread-safe, les requêtes des autres files sont poussées vers la queue, tandis que le thread interroge uniquement la file d'attente et traite les requêtes entrantes . La requête traitée entraîne l'envoi d'une nouvelle requête au thread de traitement suivant.C++ process cpu utilisation jump provoque la détection

Le processus dispose de plusieurs connexions TCP/UDP sur chacune des données reçues/envoyées à une charge élevée.

Je sais que je n'ai pas fourni de données suffisantes. C'est une application assez importante, et je ne connais pas bien toutes ses parties. Il est maintenant porté à partir de Windows sur Linux via la bibliothèque ACE (utilisé pour la partie réseau). Supposant que le problème se situe dans l'application et non dans l'externe, quelles sont les techniques/outils/approches qui peuvent être utilisés pour découvrir le problème? Par exemple, je soupçonne que cela peut être causé par un conflit mutex.

+0

Alors, quel est exactement le problème? Haute utilisation du processeur? Ne vous attendez pas à ce que "sous charge"? –

+0

Je m'attends à une utilisation stable du CPU, alors qu'il saute constamment – dimba

+0

Was est stable sur Windows? –

Répondre

1

J'ai fait face à un problème similaire il y a quelque temps et voici les étapes qui m'ont aidé. 1) Commencez par utiliser strace pour voir où l'application passe le temps d'exécuter les appels système.

2) Utilisez OProfile pour profiler à la fois l'application et le noyau.

3) Si vous utilisez un système SMP, regardez les paramètres numa, Dans mon cas, cela a causé un ravage. /proc/appPID/numa_maps donnera un bref aperçu de la façon dont l'accès à la mémoire se passe. Les nombres manquants peuvent provoquer les sauts.

4) Vous avez mentionné les connexions TCP dans votre application. Examinez la taille MTU et affichez la valeur correcte et Selon le type de données transférées, utilisez le délai Nagles de manière appropriée. Nagles Delay