Speicherleck-Programme
Ein Speicherleck ist ein Programmfehler, der darin besteht, wiederholt Speicher zuzuordnen, ihn zu verwenden und dann die Freigabe zu vernachlässigen.
Ein Speicherleck in einem Programm mit langer Laufzeit, z. B. in einer interaktiven Anwendung, ist ein schwerwiegendes Problem, da es zu einer Speicherfragmentierung und zur Anhäufung einer großen Anzahl von meist mit Garbage-Collectionem gefüllten Seiten im Realspeicher und im Paging-Bereich führen kann. Es ist bekannt, dass Systeme aufgrund eines Speicherlecks in einem einzigen Programm keinen Seitenauslagerungsbereich mehr haben.
Ein Speicherverlust kann mit dem Befehl svmon erkannt werden, indem nach Prozessen gesucht wird, deren Arbeitssegment kontinuierlich wächst. Ein Leck in einem Kernelsegment kann durch ein mbuf-Leck oder durch einen Einheitentreiber, eine Kernelerweiterung oder sogar den Kernel verursacht werden. Um festzustellen, ob ein Segment wächst, verwenden Sie den Befehl svmon mit der Option -i , um einen Prozess oder eine Gruppe von Prozessen zu untersuchen und festzustellen, ob ein Segment weiter wächst.
Die Identifizierung der fehlerhaften Subroutine oder Codezeile ist schwieriger, insbesondere in AIXwindows-Anwendungen, die eine große Anzahl von malloc () -und free () -Aufrufen generieren. C++ stellt einen HeapView Debugger zur Analyse/Optimierung der Speicherbelegung und Speicherlecks bereit. Einige Programme anderer Anbieter sind für die Analyse von Speicherlecks vorhanden, aber sie benötigen Zugriff auf den Programmquellcode.
Einige Verwendungen der Subroutine realloc () haben zwar keine Programmierfehler, können jedoch denselben Effekt wie ein Speicherleck haben. Wenn ein Programm häufig die Subroutine realloc () verwendet, um die Größe eines Datenbereichs zu erhöhen, kann das Arbeitssegment des Prozesses zunehmend fragmentiert werden, wenn der von der Subroutine realloc () freigegebene Speicher nicht für etwas anderes wiederverwendet werden kann.
# svmon -P 13548 -i 1 3
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage
13548 pacman 8535 2178 847 8533 N N N
Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual
0 0 work kernel seg - 4375 2176 847 4375
48412 2 work process private - 2357 2 0 2357
6c01b d work shared library text - 1790 0 0 1790
4c413 f work shared library data - 11 0 0 11
3040c 1 pers code,/dev/prodlv:4097 - 2 0 - -
ginger :svmon -P 13548 -i 1 3
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage
13548 pacman 8589 2178 847 8587 N N N
Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual
0 0 work kernel seg - 4375 2176 847 4375
48412 2 work process private - 2411 2 0 2411
6c01b d work shared library text - 1790 0 0 1790
4c413 f work shared library data - 11 0 0 11
3040c 1 pers code,/dev/prodlv:4097 - 2 0 - -
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage
13548 pacman 8599 2178 847 8597 N N N
Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual
0 0 work kernel seg - 4375 2176 847 4375
48412 2 work process private - 2421 2 0 2421
6c01b d work shared library text - 1790 0 0 1790
4c413 f work shared library data - 11 0 0 11
3040c 1 pers code,/dev/prodlv:4097 - 2 0 - -