特定のプログラムの実行が遅い

プログラムは幾つかの理由のうちの 1 つで、実行が遅くなり始めることがあります。

この状態は重要でないように見えるかもしれませんが、それでも検討すべき問題があります。

  • そのプログラムの実行は常に遅いか。

    プログラムの実行が遅くなり始めたばかりなら、最近行った変更がその原因である可能性があります。

  • ソース・コードが変更されているか、または新しいバージョンがインストールされているか。

    もしそうであれば、プログラマーまたはベンダーに問い合わせてください。

  • 環境に何らかの変更が行われたか。

    プログラムが使用するファイル (それ自体の実行可能プログラムを含む) が移動されている場合、 そのプログラムでは、以前は存在しなかったネットワークによる遅延が発生している可能性があります。 あるいは、ファイルが以前は別のディスク上にあったディスク・アクセス機構の 1 つに競合が発生している可能性があります。

    システム管理者がシステム・チューニング・パラメーターを変更した場合は、プログラムが以前には経験しなかった制約を受ける場合があります。 例えば、管理者が優先順位の計算方法を変更すると、 フォアグラウンド・プログラムの速度が上がる一方で、バックグラウンドでかなり高速に実行されていたプログラムがスローダウンすることがあります。

  • プログラムは、perlawkcsh、 またはその他のインタープリター言語で書かれているか。

    残念ながら、インタープリター言語はコンパイラーによって最適化されません。 また、perl または awk のような言語を使用すれば、 極端に計算集中または入出力集中の操作を数文字で簡単に要求することができます。 そのようなプログラムでは一般に、机上検査または非公式な同僚による評価を、 各演算に含まれる反復の数に重点を置いて行うと、時間を費やす価値があります。

  • プログラムは常に同じ速度で実行されるか、あるいは速くなることがあるか。

    ファイルシステムは、将来参照するファイルのページを保持するために、システム・メモリーの一部を使用します。 ディスク制約のプログラムが 2 回、間断なく実行された場合、通常は 2 回目の方が 1 回目より高速に実行されます。 同様の動作が、NFS を使用するプログラムで見られることもあります。 これは、コンパイラーのような大規模なプログラムで起こることもあります。 プログラムのアルゴリズムはディスク制約ではないかもしれませんが、大規模な実行可能プログラムをロードするのに時間がかかるために、 プログラムの最初の実行に要する時間がその後の実行に要する時間より長くなる可能性があります。

  • プログラムの実行が常に遅い場合、またはその環境に明らかな変更が行われていないのにスローダウンしている場合は、 そのリソースへの依存性を調べてください。

    パフォーマンス制約リソースの識別』に、ボトルネックを検出する手法についての説明があります。