玄録

玄録は、秀玄舎の事例を通した、
実践研究の成果をご報告する不定更新の
ビジネスレポートです。

性能問題の原因と対策

性能問題の調査方法  その3(プログラム調査)

2007.10.15

  • Facebook
  • mixi
  • hatena

 性能問題がどこに起因するかを調べるために、①システム全体の性能測定→②データベース調査→③アプリケーション調査の順番に測定・調査を行い、性能に影響の高い問題部分を検出します。

 今回は、「③アプリケーション調査」について、プログラムでの性能問題について説明します。

 アプリケーションは、プログラムおよびパッケージを使用してビジネスロジックを実現します。①システム全体の性能測定の結果においてアプリケーションを実行しているサーバで以下の問題が発生している場合は、プログラムに起因する場合が多く、プログラムのどこで問題が発生しているか絞込みを行います。
各モジュール、クラス、オブジェクトなどにトレースを埋め込み、問題箇所を特定していきます。アスペクト指向プログラムの場合は、簡単にトレースを埋め込むことができます。この「①システム全体の性能測定」の結果およびトレース採取結果により問題プログラムを特定します。

●CPU使用率が高い場合
プログラムに無駄な処理が無いかソースレビューを実施します。ループの入れ子が深く、その中でオブジェクトを呼び出し、さらにそのオブジェクト内でループするなどの場合は、呼び出し関係をシンプルに修正するなどを検討します。
例:ループの終了条件が問題があり余分にループする等

●I/O回数が多い場合
プログラム内でファイルに対し、大量データを読み書きしていないか調査します。本当にそのファイルが必要か、毎回一度に読み込む必要があるのか、など検証します。
例:通常運用時でもデバック用トレースログを大量に採取いる等

●SQL発行回数が異常に多い場合
複数回のSQL発行ではなく、まとめてSQLを発行できないかプログラムロジックを見直します。

●無駄なSQL文を発行している場合
プログラムのバグで使用しないSQLを発行していないか調査します。

●メモリを異常に使用している場合
プログラムがメモリを異常に使用し、仮想領域を圧迫する場合があります。メモリリークがないか、無駄なメモリを使用していないかなどを調査します。

次回は、「性能問題の原因と対策(ハードウエア)」についてお話します。