Javaアプリケーションを最適化する必要があります。サードパーティの呼び出しをいくつか行います。個々のAPI呼び出しにかかる時間を正確に測定するための優れたツールが必要です。複雑さを理解するには、アプリケーションに時間がかかります。 100万行を含むデータソースファイルで、処理が完了するまでに約1時間かかります。処理の一環として、サードパーティの呼び出し(一部のネットワーク呼び出しを含む)を行います。それよりも時間がかかっている呼び出しを特定する必要があります。他の人、そしてそれに基づいて、アプリケーションを最適化する方法を見つけてください。
任意の提案をいただければ幸いです。
私はお勧めできます JVisualVM 。これは、Oracle/SunJDKにバンドルされている優れた監視/プロファイリングツールです。それを起動し、アプリケーションに接続して、CPUプロファイリングを開始するだけです。時間が費やされた場所に関する優れたヒストグラムが得られるはずです。
VisualVM入門 には、VisualVMの操作方法を示す優れたスクリーンキャストがあります。
スクリーンショット:
もう1つのより基本的な代替手段は、-Xprof
コマンドラインオプションを使用することです。
-Xprof
実行中のプログラムをプロファイリングし、プロファイリングデータを標準出力に送信します。このオプションは、プログラム開発に役立つユーティリティとして提供されており、実動システムでの使用を目的としたものではありません。
私は YourKit を数回使用していて、非常に満足しています。ただし、長時間実行される操作のプロファイルを作成したことはありません。
各行の処理は同じですか?その場合、入力ファイルのサイズは実際には重要ではありません。サブセットのプロファイルを作成して、どの通話に費用がかかるかを把握できます。
InspectITツールについて言及したかっただけです。最近、完全にオープンソースになりました( https://github.com/inspectIT/inspectIT )。コンテキスト情報を含む完全で詳細なコールグラフを提供します。データベース呼び出し、httpモニタリング、例外などのすぐに使用できるセンサーが多数あります。
ユースケースに最適なシーム。
OPNETのPanoramaソフトウェア製品をお試しください
通常のプロファイラーは、呼び出される外部APIではなく、プロファイリングされるプログラムにかかるCPU時間を測定することを目的としているため、この場合は適切なツールではないようです。また、プロファイラーのオーバーヘッドが高くなる傾向があります。長時間実行したままにすると、システムを圧倒する可能性のある大量のデータを所有して収集します。
本当に長期間にわたって、主に外部呼び出しのパフォーマンスデータを収集する必要がある場合は、 Perf4J の方がおそらく優れたツールです。
私たちのオフィスでは、YourKitプロファイラーを日常的に使用しています。それは本当に軽量であり、私たちが持っていたパフォーマンス関連のユースケースのほとんどに役立ちます。
しかし、私はVisualVMも使用しました。それは無料で速いです。 YourKitに進む前に、まずVisual VMを試してみることをお勧めします(YourKitはフリーウェアではありません)。
visualvm(SDKの一部)およびJava 7は、詳細なプロファイリングを生成できます。
NetBeansを使用しない場合は、 NetBeansのプロファイラー (非常に優れており、すでに組み込まれているため、プラグインをインストールする必要はありません)または JVisualVM を使用します。