![Oracle Application Server のパフォーマンス監視とチューニング (CPU 負荷が高い)](https://rvso.com/image/567650/Oracle%20Application%20Server%20%E3%81%AE%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E7%9B%A3%E8%A6%96%E3%81%A8%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%20(CPU%20%E8%B2%A0%E8%8D%B7%E3%81%8C%E9%AB%98%E3%81%84).png)
Oracle Application Server のパフォーマンス監視とチューニング (CPU 負荷が高い)
私はある会社に雇われたばかりで、上司からできるだけ早く解決すべきパフォーマンスの問題を指摘されました。サーバー側での Java EE の経験はありません。
システムについて私が学んだこと、そしてまだ解決策を見つけられなかったことをお話しします。
Oracle Application Server (10.1.1) を使用しています。) および Oracle データベース サーバー (9.2.))、ソフトウェア担当者は、このプロジェクトでのみ使用される Ajax を備えた JSF 1.2 を具体的に使用して、一種の大規模な J2EE プロジェクト (X プロジェクト) を作成しました。彼らは、コード内で PL/SQL を積極的に使用しています。
そこで、アプリケーション サーバー (Solaris マシン) を起動しました。すべて正常に見えます。月曜日から、ユーザーはさまざまな場所からアプリの使用を開始します (アプリ 200 にはユーザー アカウントがあり、接続プールが正しく設定され、セッションがアクティブなのは 15 分間だけであることを確認しました)。
しばらくすると(2日後)、CPU使用率が上昇し、%60になります。夜も同じです何も変わっていません(オンラインユーザー数は現時点でほぼ1または2です)、同じサーバー上の他のアプリケーションに割り当てられたCPUが解放されたため、そのCPUを使い始める。 サーバーを再起動しないと、2 日後に使用率が 90% になり、アプリケーションが非常に遅くなり、エンド ユーザーが問い合わせを開始するようになります。
主な問題は、ソフトウェア エンジニアはコードは明確だと言い、システムおよび DBA マネージャーは構成が正しいと言い、他のアプリケーションは問題ないように見えるのに、なぜこの問題が X アプリケーションでのみ発生するのかということです。
DBをテストプラットフォームにコピーして最新バージョンにアップグレードし、アプリケーションサーバー(Weblogic)でも同じことをしてバグがあるかどうかを確認しました。私は1人のユーザーとWeblogic管理パネルでのみテストしましたが、スレッドを追跡してダンプすることができます。いくつかのスレッドが次のように表示されていることに気付きました。独占するマニュアルをチェックしてトレースを制御すると、.javaファイルからPL/SQLコードが呼び出される行番号が示されることがわかりました。ソフトウェアエンジニアは、確かに非常に複雑なPL/SQLコードがあるが、アプリケーションサーバーとの関係は何ですか?これは DB サーバーの問題です。彼らの言う通りだと思います...
この質問には多くの穴があることは承知しています。もっと詳しく説明したいのですが、ご指導いただければ幸いです。
前もって感謝します ...
編集: サーバーはCPUとメモリの両方でより複雑なアプリケーションを実行するのに十分です
答え1
負荷の高い PL/SQL 呼び出しはスレッドをブロックするため、CPU 使用率は低下するはずです。
遅いアプリケーション サーバーの場合、まず最初に行うことは、GC ログをチェックして、頻繁なメジャー コレクション (メモリ リークまたは JVM が単にメモリを多く必要としていることを示します) を探すことです。
私が管理しているシステムは多く厚い Oracle ドライバーから軽量の JDBC ドライバーに切り替えた後は、より安定しましたが、問題は主にコンテナーのクラッシュとして現れました。
ログはシステム上のあらゆる問題を示す良い指標となるはずですが、開発者がそこに書き込む内容によって大きく異なります。SQL が遅いと接続プールが枯渇する可能性があります。プールが接続統計を記録していることを確認してください。また、JVM の ulimit が正しく設定されていることを確認してください。
DB 層で 9i を実行しているため、AWR 機能は利用できません。DB で問題の原因となっているものを特定するには、statspack を実行する必要があります (ただし、これはサイトのパフォーマンス管理ではすでに標準的な方法になっているはずです)。
パフォーマンスが徐々に低下することは、アプリケーションでメモリ リークが発生していることを示しています。通常、これはオブジェクトが参照解除されず、ガベージ コレクションの対象にならないために発生します。つまり、プログラミングの問題です。これは、ほとんどの Java プロファイリング ツールで明らかになります。
いくつかのスレッドが占有されていることに気づきました
これを現実的なワークロードでテストしない限り、結果はほとんど役に立ちません。