![Oracle Application Server Leistungsüberwachung und -optimierung (hohe CPU-Auslastung)](https://rvso.com/image/567650/Oracle%20Application%20Server%20Leistungs%C3%BCberwachung%20und%20-optimierung%20(hohe%20CPU-Auslastung).png)
Oracle Application Server Leistungsüberwachung und -optimierung (hohe CPU-Auslastung)
Ich bin gerade bei einer Firma eingestellt worden und mein Chef hat mir ein Leistungsproblem genannt, das ich so schnell wie möglich lösen soll. Ich habe bisher keine Erfahrung mit Java EE auf der Serverseite.
Lassen Sie mich damit beginnen, was ich über das System gelernt habe und wofür ich noch immer keine Lösung finden konnte:
Wir haben einen Oracle Anwendungsserver (10.1.) und Oracle-Datenbankserver (9.2.), haben die Software-Leute eine Art großes J2EE-Projekt (X-Projekt) geschrieben, wobei sie speziell JSF 1.2 mit Ajax verwenden, das nur in diesem Projekt verwendet wird. Sie verwenden aktiv PL/SQL in ihrem Code.
Wir haben also den Anwendungsserver (Solaris-Maschine) gestartet, alles scheint in Ordnung zu sein. Benutzer beginnen ab Montag, die App von verschiedenen Standorten aus zu verwenden (App 200 hat Benutzerkonten, ich habe gerade nachgesehen und gesehen, dass der Verbindungspool richtig eingestellt ist, die Sitzung ist nur 15 Minuten aktiv).
Nach einiger Zeit (2 Tage) ist die CPU-Auslastung hoch, %60,nachts ist es immer noch dasselbenichts hat sich geändert (die Anzahl der Online-Benutzer liegt derzeit bei etwa 1 oder 2), auchEs beginnt, die CPU zu verwenden, die für andere Anwendungen auf demselben Server reserviert ist, da diese freigegeben wurden Wenn wir den Server nicht neu starten, beträgt die Auslastung nach zwei Tagen 90 % und die Anwendung ist so langsam, dass Endbenutzer anfangen anzurufen.
Das Hauptproblem besteht darin, dass die Softwareentwickler sagen, der Code sei klar, und die System- und DBA-Manager sagen, wir hätten die richtige Konfiguration, bei den anderen Anwendungen scheine alles in Ordnung zu sein. Warum tritt dieses Problem aber nur bei der X-Anwendung auf?
Ich beginne damit, die Datenbank auf eine Testplattform zu kopieren und aktualisiere sie auf die neueste Version. Dasselbe mache ich auch mit dem Anwendungsserver (Weblogic), ob es einen Fehler gibt oder nicht. Ich habe es nur selbst getestet, nur ein Benutzer und das Weblogic-Admin-Panel. Ich kann die Threads verfolgen und sie ausgeben. Mir ist aufgefallen, dass einige Threads alsraubend. wenn ich die Handbücher durchsehe und die Ablaufverfolgung kontrolliere, sehe ich, dass sie mir die Zeilennummer anzeigt, in der PL/SQL-Code aus einer .java-Datei aufgerufen wird. Der Softwareentwickler sagt, dass wir zwar wirklich komplexe PL/SQL-Codes haben, aberWelche Beziehung besteht zum Anwendungsserver?das ist das Problem des DB-Servers, ich denke, sie haben recht …
Ich weiß, dass die Frage viele Lücken aufweist und ich würde gern mehr Details dazu geben, aber ich schätze die Art und Weise, wie Sie mich anleiten.
Dank im Voraus ...
Bearbeiten: Der Server verfügt sowohl über CPU als auch Speicher und kann auch komplexere Anwendungen ausführen
Antwort1
Schwere PL/SQL-Aufrufe sollten den Thread blockieren, sodass die CPU-Auslastung sinken sollte.
Bei einem langsamen Anwendungsserver überprüfe ich zunächst die GC-Protokolle und suche nach häufigen größeren Sammlungen (die entweder auf einen Speicherverlust hinweisen oder darauf, dass die JVM einfach mehr Speicher benötigt).
Die Systeme, die ich betreue, wurden zu einemvielstabiler nach dem Wechsel von den umfangreichen Oracle-Treibern zu den leichten JDBC-Treibern – obwohl sich die Probleme hauptsächlich in Containerabstürzen manifestiert hatten.
Die Protokolle sollten ein guter Indikator für etwaige Probleme im System sein – aber vieles hängt davon ab, was die Entwickler dort hineinschreiben. Langsames SQL könnte dazu führen, dass der Verbindungspool erschöpft ist – stellen Sie sicher, dass der Pool Verbindungsstatistiken protokolliert. Stellen Sie außerdem sicher, dass das Ulimit für die JVM richtig eingestellt ist.
Da Sie 9i auf der DB-Ebene ausführen, steht Ihnen die AWR-Funktionalität nicht zur Verfügung. Sie müssen das Statspack ausführen (dies sollte jedoch für die Leistungsverwaltung Ihrer Sites bereits Standard sein), um die Ursache der DB-Probleme zu ermitteln.
Die allmähliche Verschlechterung der Leistung ist ein Hinweis auf einen Speicherverlust in der Anwendung. Normalerweise wird dies dadurch verursacht, dass Objekte nicht dereferenziert werden und daher für die Garbage Collection infrage kommen. Dies ist also ein Programmierproblem. Dies sollte bei den meisten Java-Profiling-Tools ersichtlich sein.
Ich habe bemerkt, dass es einige Threads gibt, die als Hogging angezeigt werden
Sofern Sie dies nicht mit einer realistischen Arbeitslast testen, sind die Ergebnisse praktisch nutzlos.