Shortdump wegen Speicherüberlauf

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

Shortdump wegen Speicherüberlauf

Beitrag von chhe001 (ForumUser / 26 / 1 / 0 ) »
Hallo, ich selektiere über eine Schleife über die interne Tabelle itab etliche Prozessdokumente. Dazu verwende ich die Klasse /IDXGC/CL_PD_DOC_CONTEXT. Zunächst hole ich mir die Referenz auf ein Pdoc über die Nummer, anschließend über die Methode GET_HEADER_DATA die Kopfdaten und Methode GET_PROC_STEP_DATA die gewünschten Schrittdaten.
Das funktioniert auch gut, allerdings werden mit jedem Schleifendurchlauf Informationen im Speicher abgelegt. Nach x-Schleifendurchläufen bricht das System mit Laufzeitfehler ab. Es ist kein Speicher mehr verfügbar.

Die Referenz über FREE <datenreferenz> wegzunehmen bringt nichts. Auch das anschließende aufrufen des Garbage Collectors gibt keinen Speicherplatz frei.

Code: Alles auswählen.

DATA:   lr_me_pdoc          TYPE REF TO /idxgc/cl_pd_doc_context,
        ls_proc_header_data TYPE /idxgc/s_proc_hdr,
        ls_proc_step_data   TYPE /idxgc/s_proc_step_data.


LOOP AT itab ASSIGNING <fs_eideswtdoc>.

* Instanz auf Pdoc holen
  TRY.
      CALL METHOD /idxgc/cl_pd_doc_context=>get_instance
        EXPORTING
          iv_pdoc_no = <fs_eideswtdoc>-switchnum
        RECEIVING
          rr_ctx     = lr_me_pdoc.
    CATCH /idxgc/cx_process_error.
  ENDTRY.

* Get process document header data.
  TRY.
      CALL METHOD lr_me_pdoc->get_header_data
        IMPORTING
          es_proc_hdr = ls_proc_header_data.
    CATCH cx_sy_ref_is_initial.
  ENDTRY.

  TRY.
      CALL METHOD lr_me_pdoc->get_proc_step_data
        EXPORTING
          iv_proc_step_no   = '0010'
        IMPORTING
          es_proc_step_data = ls_proc_step_data.
    CATCH /idxgc/cx_process_error.
  ENDTRY.

  TRY.
      CALL METHOD lr_me_pdoc->close.
    CATCH cx_sy_ref_is_initial.
  ENDTRY.

  FREE lr_me_pdoc.
  cl_abap_memory_utilities=>do_garbage_collection( ).

ENDLOOP.
Ich wäre sehr dankbar wenn ich gute Tipps zum lösen des Problems erhalten würde.
Gruß
Christoph

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Shortdump wegen Speicherüberlauf

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Moinsen.

Ich vermute, dass die Referenzen auf die Objekte noch irgendwo in den Klassen gehalten werden. Dann sind die Instanzen nicht verwaist und der Garbage Collector räumt sie nicht ab.

Du kannst das im Debugger überprüfen, indem Du Dir ansiehst, welche Referenzen auf die einzelnen Instanzen existieren ("Verwendungsnachweis" auf dem entsprechenden Tab).

Wenn dem so ist hast Du nur eine Chance, wenn die Klassen eine Möglichkeit anbieten, die nicht mehr benötigten Referenzen zu löschen. Oder indem Du sie über Vererbung entsprechend erweiterst.

Grüße,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Re: Shortdump wegen Speicherüberlauf

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Das wäre aber ein so extremer Pfusch auf der SAP-Seite, dass ich erwarten würde, dass sich ein OSS-Hinweis mit einer Vorabkorrektur dafür finden lässt.

Re: Shortdump wegen Speicherüberlauf

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Moin Christoph,
kapsele den Aufruf der Klasse in einen RFC-fähigen FuBa. Dann rufe den FuBa über die Destination NONE auf statt der Klasse. Und nachdem du den Aufruf gemacht hast schließe die RFC-Verbindung wieder mit FuBa RFC_CONNECTION_CLOSE um für den nächsten Aufruf wieder ein sauberes System zur Verfügung zu haben.
Ist vielleicht nicht die eleganteste Vorangehensweise und klappt auch nicht immer - aber wenn ich einfach nicht rausfinde wo SAP noch Daten puffert oder die Puffer nicht löschen kann/darf probiere ich diesen Ansatz.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
chhe001

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Shortdump wegen Speicherüberlauf

Beitrag von masterhash (ForumUser / 22 / 6 / 0 ) »
Guten Morgen,

das selbe Problem hatte ich auch schon einmal. Dein Problem wird wahrscheinlich der Loop über /idxgc/cl_pd_doc_context=>get_instance sein. Die statische Methode müllt dich halt mit Instanzen voll, die erst beim beenden Programms aufgeräumt werden. Eine Lösung kann ich dir aber leider nicht anbieten... ich glaube ein Kollege hat irgendwas drumherum gebaut.

VG
Martin

Re: Shortdump wegen Speicherüberlauf

Beitrag von chhe001 (ForumUser / 26 / 1 / 0 ) »
masterhash hat geschrieben:
23.11.2020 08:03
Guten Morgen,

das selbe Problem hatte ich auch schon einmal. Dein Problem wird wahrscheinlich der Loop über /idxgc/cl_pd_doc_context=>get_instance sein. Die statische Methode müllt dich halt mit Instanzen voll, die erst beim beenden Programms aufgeräumt werden. Eine Lösung kann ich dir aber leider nicht anbieten... ich glaube ein Kollege hat irgendwas drumherum gebaut.

VG
Martin
Hallo Martin,
vielleicht könntest du deinen Kollegen mal fragen wie er das Problem gelöst hat? Würde mir sehr weiterhelfen. Vielen Dank.
Gruß
Christoph

Re: Shortdump wegen Speicherüberlauf

Beitrag von masterhash (ForumUser / 22 / 6 / 0 ) »
Hi Christoph,

das ginge leider erst nächste Woche Montag, sorry. Habs mir aber notiert.

VG
Martin

Re: Shortdump wegen Speicherüberlauf

Beitrag von chhe001 (ForumUser / 26 / 1 / 0 ) »
Danke Martin,
VG Christoph

Re: Shortdump wegen Speicherüberlauf

Beitrag von chhe001 (ForumUser / 26 / 1 / 0 ) »
Ich will dann mal Rückmeldung geben. Der Vorschlag von black_adept mit dem RFC-fähigen Funktionsbaustein hat die Lösung gebracht. Vielen Dank nochmal dafür.
Gruß
Christoph

Seite 1 von 1

Vergleichbare Themen

6
Antw.
8105
Views
Anzeige Shortdump
von ewx » 22.01.2014 18:25 • Verfasst in SAP - Allgemeines
10
Antw.
4046
Views
Aufruf von BAPI_PRODORD_CREATE_FROM_PLORD aus einer Klasse - Shortdump
von Anne_A » 03.03.2020 15:56 • Verfasst in ABAP Objects®

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor 18 Minuten von rob_abc gelöst 8 / 6104
ABAP - Mail so10 Text
vor 15 Stunden von retsch 6 / 178

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor 18 Minuten von rob_abc gelöst 8 / 6104
ABAP - Mail so10 Text
vor 15 Stunden von retsch 6 / 178

Unbeantwortete Forenbeiträge

SD_PRINT_TERMS_OF_PAYMENT
vor 5 Tagen von Manfred K. 1 / 975
BUSOBJEKT zu CMIS PHIO ermitteln
vor 3 Wochen von snooga87 1 / 2786