Java開発の問題解決を助ける(2)
プロファイラでメモリリークとパフォーマンス問題を解決
プロファイラでパフォーマンスの問題を解決 |
では実際にプロファイラを使用してパフォーマンスの問題を解決してみましょう。先ほどメモリリークを解決するために使用したサンプルプログラム(sample.zip)を使用します。設定方法は前述の「開発環境とプロファイラの準備」を参照してください。
■時間のかかっている処理を特定する
メニューの[Profile]から[Profile Main Project]を選び、プロファイル対象のメインクラスを選択してください。プロファイリングタスクを選択する画面が出てきますが、今度は[Analyze Performance]を使用します。プログラムのどの部分に原因があるかがよく分かっていない場合にはプログラム全体を検査の対象としますので、デフォルトで選択されている[Entire Application]が選択されていることを確認して実行します。
画面6 「Entire Application」が選択されていることを確認して実行 |
プロファイル結果は、メモリリークを探したときと同じようにメニューの[Window]にある[Profiling]メニューの[Live Results]を選択することで取得することができます。Live Resultsでは各メソッドの呼び出し回数や合計処理時間が表示されています。これにより、どの部分で特に時間がかかっているかを把握することができます。
画面7 メソッドごとの合計処理時間・呼び出し回数の一覧 |
プロファイル結果が表示されている画面にあるアイコン[Take Snapshot of Collected Results]をクリックしてスナップショットを取得すると、それぞれのメソッドが呼び出されたスタックトレースを取得することができます。また、メソッドを選択して右クリックメニューから[Show Back Traces]を選べばそのメソッドを使用している呼び出し元をたどることもできます。
画面8 メソッドの呼び出し元一覧 |
このように時間のかかっている処理が特定できることによって、処理をチューニングしたり、呼び出し元をたどることで修正の影響度を判断することができます。今回のサンプルプログラムでは、WordCountクラスのgetCountメソッド33行目にわざとパフォーマンスボトルネックとなるコードを書いていました。
リスト WordCount.java
|
このようにプロファイラ・ツールはメモリリーク問題の解決や、パフォーマンスボトルネック問題の解決に大きな力となります。プロファイラ・ツールは今回紹介した以外にもさまざまな統計情報が取得できます。このような情報の読み方や使い方は実際に使って手を動かしてみないとなかなか身に付かないものです。実際に問題が発生したときに使いこなせるようにぜひ手を動かしてマスターしてください。
3/3 |
INDEX |
||
第2回 Java開発の問題解決を助ける | ||
Page1 メモリリーク(メモリの無駄遣い)を探せ! プロファイラを使ってみよう |
||
Page2 メモリの無駄を作っている部分を特定する パフォーマンスボトルネックを探せ! |
||
Page3 プロファイラでパフォーマンスの問題を解決 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|