2010-11-02 5 views
0

récemment, nous avons observé que la mémoire de notre serveur d'applications augmente avec certaines API client, à la fin, il conduit à un plantage. Nous avons donc essayé d'utiliser boundschecker et cela n'affiche AUCUNE fuite de mémoire et conduit à un crash lorsque la mémoire augmente (les octets privés augmentent). vérifié dans Process Explore of MS (sysinternals).Impossible de détecter le problème de mémoire en utilisant BoundsChecker

Il existe donc un moyen d'obtenir la manière dont la mémoire est allouée en séquence (appels de fonction) ou manipulée en séquence. donc nous pouvons obtenir la mémoire augmente à cette position.

Nous voulons capturer tous les appels de fonction de tous les threads. nous ne pouvons pas non plus chnager trop de code car c'est des milliers de lignes de code.

Répondre

1

Si vous ne trouvez pas de fuite de mémoire, il est très probable que vous ayez une fuite de poignée - vous pouvez vérifier cela même dans le Gestionnaire des tâches en sélectionnant "Handle Count" dans la liste des colonnes. Process Explorer devrait être capable de vous montrer une liste de handles ouverts dans votre application. Cela peut ne pas être dans l'ordre, mais cela devrait vous donner une idée du type de fuite - souvent, toutes les fuites proviennent de la même zone de votre application, qui peut s'accumuler avec le temps et provoquer un crash.

+0

ouais il me semble aussi, mais en utilisant MemoryValidator (http://www.softwareverify.com/cpp/memory/index.html), il n'a pas trouvé de mémoire ainsi que la fuite de fuite jusqu'à ce que l'application est en vie. – Kasma