Suche nach Speicherlecks in Apache httpd und Modulen

8

Was ist der beste Weg, Speicherlecks in Apache httpd und httpd Modulen zu finden?

Gibt es irgendwelche Anleitungen?

Ich habe versucht, Valgrind ein wenig, aber wenige Hindernisse erschienen:

  1. Valgrind erwartet, dass die Binärdatei normal beendet wird. Das habe ich mit MaxRequestsPerChild und -X Parameter geschafft.
  2. Valgrind berichtet über viele Dinge, die wahrscheinlich mit apr-Pools zusammenhängen, aber nichts nützliches.

Betriebssystem: Linux

P. S.:

Valgrind Befehl: $ valgrind --leak-check=full --leak-resolution=med --log-file=/tmp/valgrind.log ./bin/httpd -X

Valgrind-Ausgabe Beispiel: Ссылка

    
Marko Kevac 16.02.2010, 08:08
quelle

3 Antworten

2

Ich kenne keine magische Kugel, aber Sie können einen Blick auf valgrind / valgrind.h werfen, es hat einige nützliche Makros, um Dinge, die Valgrind kennt, zu verändern und ihr Verhalten zu ändern, wenn sie darunter laufen Valgrind.

Zum Beispiel

%Vor%

Sie können diese ganze Verwirrung auch mit NDEBUG einkleiden, um sie von Produktions-Builds fernzuhalten.

Das sollte Sie davon abhalten, jedes Mal, wenn Sie debuggen, mit dem Server herumzuärgern, es wird "einfach machen", wenn Valgrind erkannt wird. RUNNING_ON_VALGRIND wird auf die Valgrind-Instanz erweitert oder bleibt 0, falls nicht zutreffend.

Für den Rest (und ich stelle mir vor, dass Sie eine Menge Lärm bekommen, höchstwahrscheinlich beginnend mit invalid read of size xx ), können Sie systematisch Unterdrückungen anwenden. Wenn Sie einen Teil der Ausgabe veröffentlichen, ist es möglicherweise einfacher, Vorschläge für die Unterdrückungen zu machen, die Sie in einer Datei speichern können.

Übrigens ist die Mailingliste des Valgrind-Benutzers extrem hilfreich und sehr tolerant. Sie können dort auch Ihre nervigsten und irrelevantesten Geräusche posten, Sie erhalten Antworten, wie Sie sie schnell unterdrücken können.

Wenn Sie nur eine Zusammenfassung der Lecks und der Einstiegspunkte, die zu ihnen geführt haben, haben wollen, sollte es nicht zu schwierig sein, fast alles andere zu schließen.

    
Tim Post 16.02.2010, 08:36
quelle
0

Sie könnten versuchen, Bohem GC zu integrieren und die Speicherbereinigung Speicherlecks erkennen zu lassen.

Sehen Sie hier für howto: Ссылка

    
holmes 06.03.2010 14:29
quelle
0

Vielleicht ist es an der Zeit, den Code neu zu gestalten, damit Sie Tests außerhalb von Apache ausführen können?

Wenn Sie Unit-Tests hinzufügen, die Code-Pfade prüfen, die Speicher zuweisen, können Sie überprüfen, ob der gesamte Speicher freigegeben ist, indem Sie die Unit-Tests unter valgrind ausführen. Auf diese Weise müssen Sie sich nicht darum sorgen, dass der gesamte unter Apache ausgeführte Code nur eine geringe Anzahl von Transaktionen verarbeitet. Außerdem ist es einfacher, alle Code-Pfade mit Komponententests zu testen.

    
Douglas Leeder 10.03.2010 14:44
quelle