[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2012
    Beiträge
    39

    Question Performance einer Java-Anwendung

    Schönen guten Morgen zusammen,

    Ich habe mal die Verlaufszeit meiner Anwendung gemessen die auf die Datenbank zugreift und Werte ausließt und musste leider feststellen das die Anwendung auf der iSeries ca. 30mal Länger braucht wie auf dem PC. Welche Maßnahmen können hier angewandt werden?

    Verlaufszeit auf der iSeries: 38234 Millisek
    Verlaufszeit auf dem PC: 1349 Millisek

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... der Start einer JVM ist auf einer AS/400 quälend langsam und danach geht es halt mit der Power des Prozessors weiter. =>
    - nur neueste Hardware im oberen Prozessor Bereich bringt "ordentliche" Leistung
    - Java nur in Server Prozessen verwenden (eine vorgestartete JVM bedient viele Clients)
    - hierfür kann man auch meine OpenSource AppServer4RPG einsetzen
    - Finger weg von RPG Java Mix (das ist nciht nur langsam, sondern auch instabil)
    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Jun 2012
    Beiträge
    25
    ich glaub nicht das es an der Performance vom Prozessor oder der JVM liegt.

    Was richtig Zeit kosten kann, ist z.B. wenn man AS400 Verbindung nicht mit *CURRENT anmeldet sondern einen festen User eingibt. Das kann auch der gleich User sein unter dem der JOB läuft und schon kann man für ein as400.validateSignon(); doppelt so lange warten.

    Nachfolgend das Beispiel:

    Code:
    import java.util.Date;
    
    import com.ibm.as400.access.AS400;
    public class AS400ConnectionTest {
        public static void main(String[] args) {
            Date date = new Date();
            long start = date.getTime();
            System.out.println("Start: " + date);
            if (args.length != 3){
                System.out.println("3 Parameter werden benötigt");
                System.out.println("server user passwort");
                System.out.println("localhost *CURRENT *CURRENT");
                System.exit(1);
            }
            System.out.println("Anmelden mit User: " + args[1]);
            try{
                AS400 as400 = new AS400(args[0], args[1], args[2]);
                as400.validateSignon();
                as400.disconnectAllServices();
            }catch(Exception e){
                e.printStackTrace();
            }
            date = new Date();
            System.out.println("Ende: " + date);
            System.out.println("Benötigte Zeit in Sekunden: " + ((float)(date.getTime() - start) / 1000));
            System.exit(0);
        }
    }
    Aufruf: java -cp jt400.jar AS400ConnectionTest 192.168.178.222 myuser mypass
    (AS400ConnectionTest.class habe ich in die jt400.jar kopiert)

    Auf den PC: Benötigte Zeit in Sekunden: 0
    Auf der AS400: Benötigte Zeit in Sekunden: 33

    Aufruf: java -cp jt400.jar AS400ConnectionTest localhost *CURRENT *CURRENT
    Auf der AS400: Benötigte Zeit in Sekunden: 17

    Das ganze liegt an der Zeile as400.validateSignon(); . Ohne diese ist das Programm auch schnell durch.

    Aber auch wenn man das as400.validateSignon(); ersetzt z.B. durch
    Code:
    IFSJavaFile file = new IFSJavaFile(as400, "/TMP/test.txt");
    IFSFileOutputStream out = new IFSFileOutputStream(file);
    out.write("das ist ein test".getBytes());
    out.close();
    hat man erstmal lange Zeit zu warten. Da aber auch auf der PC Seite, da der erste IFS-Zugriff lange dauert.

    Gruß
    TR

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... ist ja hübsch, aber nicht das Thema (mal abgesehen davon, dass man weder ein AS400 object, noch validateSignon() braucht).
    Es geht um die signifikant längere Laufzeit (Faktor 30) eines kleinen Java Programmes und genau die liegt an drei Faktoren:
    - längeres Startup der JVM (Sekunden versus Bruchteile davon)
    - längere Ladezeiten für komplexe Objekte (Sekunden versus Bruchteile davon)
    - langsamere Ausführung (je nach Prozessor)
    Das addiert sich dahin, dass bei relativ kleinen Programmen (ein paar Sätze aus einer Datenbank lesen, ein PDF generieren, ein Excel erzeugen) ein Faktor von 30 nicht ungewöhnlich ist.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Hinzu kommt der JIT-Compiler, der bei jedem Aufruf nun neu kompiliert.
    Vor V6 konnte man per CHGJVAPGM bereits ein MI-Template erstellen lassen.

    Außerdem muss man berücksichtigen, auf der AS/400 bist du nie alleine!
    Auf dem PC (selbst auf einem Server) hast du in 99,99% aller Fälle alle Ressourcen für dich, also auch die CPU.
    Zusätzlich (zumindest auf meinem PC) gibt es im Hintergrund von der Oracle-JVM bereits einen "JAVA-Vorstart-Job", der das Initialisieren einer JVM beschleunigt.

    Dies spricht wieder für Dieters Ansatz eines Hintergrundjobs, der halt JAVA-Dienste bereits vorgestartet bereit hält.
    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

Similar Threads

  1. Java auf V5R4 Performance
    By TR1 in forum NEWSboard Java
    Antworten: 1
    Letzter Beitrag: 02-11-13, 15:02
  2. Antworten: 1
    Letzter Beitrag: 17-10-02, 14:32
  3. STRPCCMD blockiert Anwendung
    By peter-venkman in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 09-07-02, 09:55
  4. XML-Anwendung
    By Case Consult in forum Archiv NEWSboard Events
    Antworten: 0
    Letzter Beitrag: 18-03-02, 12:41
  5. schlechte Java-Performance
    By lrmeyer in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 05-03-02, 08:38

Berechtigungen

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