HTML ページをダウンロードする Java プログラムを作成しました。ただし、CPU 使用率はほぼ 100% ですが、ネットワーク使用率は 3% 未満です。そのCPUがボトルネックになったようです。CPU 使用率を削減するにはどうすればよいですか?
7 に答える
プロファイラー (私はVisualVMが好きです) を使用して、ボトルネックを特定し、修正してください!
継続的な while ループがある場合は、繰り返しの間にプログラムにスリープ時間を与えます。Web ページを単独でダウンロードしても、それほど多くのリソースが使用されることはありませんが、プロファイラーを調べて、何がボトルネックになっているのかを調べることをお勧めします。おそらく、ここにコードを投稿すると、もう少し役に立ちます。
問題を特定するためにできる非常に簡単なことの 1 つは、いくつかのスタック トレースを取得することです。ctrl-/ctrl-break/jstack/jconsole/visualvm. パフォーマンスの問題が発生している場所で、プログラムが破滅的に多くの時間を費やしている場合 (妥当な可能性が高い)、問題を簡単に見つけることができます。
CPU 使用率が長期間にわたって 100% に近い場合は、コードにエラー (無限ループなど) が発生している可能性があります。アプリケーションのプロファイルを作成して、何が起こっているかを確認してください。コードのさまざまなポイントから現在の時刻を出力することから始めます。それでも見つからない場合は、プロファイラーが必要になります。
あなたが読むとき、あなたは一度に1文字/バイトを読んでいますか? これにより、OS にかなりの負荷がかかります。
BufferedReader を使用するか、読み取り対象に応じて read(char[]...) または readLine() を使用して読み取りを試みます。
ひょっとして、組み込みの Java XML DOM を使用して HTML を解析しているのでしょうか。過去の経験から、かなりの CPU 使用率になる可能性があります (正直なところ、これは私が今まで見た中で最も遅い実装です)。その場合は、XML 解析用のサードパーティ ライブラリ (たとえば、JDOM ) を検討することをお勧めします。