Hallo zusammen,
ich muss ein Heap memory Problem auf der AS/400 analysieren. Dazu verwende ich folgende PEX Befehle:
Code:
ADDPEXDFN DFN(HEAP) TYPE(*TRACE) JOB((123456/MAT/MAT0 *ALL)) TASK(*ALL) MAXSTG(4000000) TRCTYPE(*SLTEVT) SLTEVT(*YES) MCHINST(*NONE) STGEVT((*ACTGRPHEAP))
STRPEX SSNID(HEAP)
- Aktion ausführen -
ENDPEX SSNID(HEAP) DTALIB(MATTRC) RPLDTA(*YES)
Es werden nun ein paar Outfiles erzeugt, die per SQL gejoint werden können, um die Heap-Segment Adresse, die allokierte Größe und den Aufrufstapel zu ermitteln:
Code:
CREATE VIEW mattrc/heapv1 AS
(SELECT a.QRECN,
a.QHPASA,
a.QHPASZ,
a.QHPOPR,
a.QHPRET,
(SELECT QPRPNM
FROM mattrc/QAYPEPROCI
WHERE QHPCK1 = QPRKEY) cs1,
QIASTMT1,
(SELECT QPRPNM
FROM mattrc/QAYPEPROCI
WHERE QHPCK2 = QPRKEY) cs2,
QIASTMT2,
(SELECT QPRPNM
FROM mattrc/QAYPEPROCI
WHERE QHPCK3 = QPRKEY) cs3,
QIASTMT3,
(SELECT QPRPNM
FROM mattrc/QAYPEPROCI
WHERE QHPCK4 = QPRKEY) cs4,
QIASTMT4,
(SELECT QPRPNM
FROM mattrc/QAYPEPROCI
WHERE QHPCK5 = QPRKEY) cs5,
QIASTMT5
FROM mattrc/QAYPEHEAP a
INNER JOIN mattrc/QAYPETIDX c
ON a.QRECN = c.QRECN
LEFT JOIN mattrc/QAYPEIAD d
ON a.QRECN = d.QRECN);
/* Zeige alle mallocs zu deren Adresse kein
free
ausgeführt wurde */
SELECT *
FROM mattrc/heapv1
WHERE QHPOPR = 0
AND QHPASA NOT IN(SELECT QHPASA FROM mattrc/heapv1
WHERE QHPOPR = 1);
Mein Problem ist nun, dass die Datei QAYPEHEAP nur 5 Felder zur Speicherung der letzten 5 Aufrufstapeleinträge enthält. Weiß jemand, wie man mehr Aufrufstapeleinträge erhält?
Wie analysiert ihr Heap memory leak Probleme auf der AS/400?
Auf Windows kann man dazu recht bequem WPA (Windows Performance Analyzer) verwenden.
Viele Grüße
Matthias
Bookmarks