[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2006
    Beiträge
    351

    Question Analyse von Heap memory leaks auf IBM i

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.345
    Die Frage ist, für welche Sprache?
    Im ILERPG habe ich das i.d.R. nicht, da ich keine %alloc benötige. Wichtig ist natürlich vom Code her, alle %alloc auch wieder freizugeben. Da hilft eine reine Speicheranalyse auch eher selten;-).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jun 2006
    Beiträge
    351
    Es wird ILE C++ verwendet. Da kann es malloc, new .. geben. Mit dem oben genannten PEX Aufruf wird ja bewusst aufgezeichnet, wer Speicher reserviert und auch wieder frei gibt, nur ist halt der Aufrufstapel zu kurz, wodurch dann nicht klar ist, wer die entsprechenden Aufrufer sind.

  4. #4
    Registriert seit
    Jun 2006
    Beiträge
    351
    Ich habe mir der erzeugten Outfile nochmals genauer angeschaut. In Datei QAYPEIAD befindet sich der Callstack immerhin mit bis zu 16 Einträgen, was bei einer C++ Applikation aber immer noch sehr wenig ist.
    Die View würde damit so erzeugt werden:
    Code:
    CREATE or replace VIEW mattrc/heapv1 AS(
    SELECT a.QRECN, a.QHPASA, a.QHPASZ, a.QHPOPR, a.QHPRET,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY16 = QPRKEY) cs16, QIASTMT16,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY15 = QPRKEY) cs15, QIASTMT15,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY14 = QPRKEY) cs14, QIASTMT14,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY13 = QPRKEY) cs13, QIASTMT13,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY12 = QPRKEY) cs12, QIASTMT12,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY11 = QPRKEY) cs11, QIASTMT11,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY10 = QPRKEY) cs10, QIASTMT10,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY9  = QPRKEY) cs9 , QIASTMT9,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY8  = QPRKEY) cs8 , QIASTMT8,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY7  = QPRKEY) cs7 , QIASTMT7,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY6  = QPRKEY) cs6 , QIASTMT6,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY5  = QPRKEY) cs5 , QIASTMT5,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY4  = QPRKEY) cs4 , QIASTMT4,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY3  = QPRKEY) cs3 , QIASTMT3,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY2  = QPRKEY) cs2 , QIASTMT2,
    (select rtrim(QPRPGN)||':'||QPRPNM from mattrc/QAYPEPROCI where QIAKEY1  = QPRKEY) cs1 , QIASTMT1
    FROM mattrc/QAYPEHEAP a
    LEFT JOIN mattrc/QAYPEIAD b
           ON a.QRECN = b.QRECN);

Similar Threads

  1. System Performance Analyse und Performance Tuning
    By Bernstein in forum NEWSboard Server Job
    Antworten: 0
    Letzter Beitrag: 05-08-14, 17:34
  2. IBM 256MB RS 6000 Server Memory 10NS FRU: 07L9030 New
    By sokri in forum NEWSboard Server & Hardware Markt
    Antworten: 0
    Letzter Beitrag: 13-03-06, 11:00
  3. DB2/400 Tool für Dateidokumentation u. Analyse
    By HJK_SpEl in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 09-06-05, 13:34
  4. Ungültige Bedingung für Heap Space
    By lorenzen in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 07-05-03, 11:46
  5. Application Heap
    By KB in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 20-11-01, 12:16

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •