Ich habe über Nacht Speichertests auf einem Embedded-Linux-System ausgeführt. Mit vmstat habe ich beobachtet, dass der freie Speicher im Laufe der Zeit stetig abnimmt. Gemäß einigen smaps Analyse in procfs wächst die Heap eines Prozesses in etwa die gleiche Rate. Ich vermutete ein Speicherleck und fand ein paar Stellen im Code, wo new
und delete
regelmäßig verwendet werden. Allerdings habe ich keine new
Anrufe ohne übereinstimmende delete
Anrufe gesehen.Wenn/Wann wird der freigegebene Heap-Speicher freigegeben?
lief ich den Speichertest wieder und heute Morgen die Speicher-Caches mit dem folgenden Aufruf gelöscht
echo 3 > /proc/sys/vm/drop_caches
Der freie Speicher in vmstat aufgelistet ging auf einen Wert nahe, wenn der Test gestartet wurde.
Gibt der Kernel regelmäßig ungenutzte Heap-Seiten zurück? Wenn ja, gibt es andere Zeiten außer der oben genannten? Wahrscheinlich, wenn der freie Speicher unter eine bestimmte Schwelle sinkt?
Ungenutzter Speicher ist verschwendeter Speicher, also benutzt Linux den Speicher, bis jemand anders ihn benutzen will. – PlasmaHH
sprechen Sie über den Kernel-Heap oder den Heap, der von diesem scheinbar undichten Prozess verwendet wird? –
@Tom: Ich spreche über den Heap des User-Space-Prozesses – waffleman