web-dev-qa-db-ja.com

Java CPUを消費するプロセス;なぜですか?

JavaにインストールしたLinuxサーバーがあります。

時々、そしてたまに多くの訪問者が私のウェブサイトを訪問するときだけ、サイトはハングします。

ターミナルを開いて「top」コマンドを入力して何が起こっているかを確認すると、「Java」プロセスがCPUを消費していることがわかります。のように400%。

ps auxコマンドも試しましたが、コマンドがsr/bin/Javaからのものであることがわかります。

私はこの種のトラブルシューティングの経験がほとんどないので、皆さんに助けを求めます。

Javaコンテナがインストールされています(Jetty[〜#〜] solr [〜#〜]を使用するために必要です=(検索エンジン)私のウェブサイトに統合されています。

次の方法でSOLRを開始および停止できます。

  etc/init.d/solr stop

しかし、これはJavaプロセスを "Top"コマンドから削除しませんでした。それでもJavaは400%のCPUを消費していました。

再起動する他の方法はありますかJavaのみ?

これは私に2回発生し、サーバー全体を再起動するたびに、すべてが正常になりました。

さらに入力が必要な場合はお知らせください。

1
Anonymous12345

Solrプロセスを停止し、Javaプロセスがまだ実行中の場合、サーバー上に別のJavaプロセスがあります。最初のステップは、すべてのJava実行中のプロセス。Unixでこれに適したツールはpsツールです。これを試してください:

$ ps auxwww | grep Java

この出力には、実行中のすべてのJavaプロセス、および実行中のコマンドが表示されます。solrを停止する前後にこれを試してください。

2番目の質問は「これらのJavaプロセスのどれがCPUを大量に消費しているのか」ですか?solrプロセスに加えてjettyプロセスを停止する必要があるかもしれません。また、実際に停止する必要はありません。単一のプロセスが誤動作しているという理由だけでLinuxサーバーを再起動します。killまたはtopから取得できるプロセスIDになっている場合は、psコマンドを使用してプロセスを停止することもできます。

短期的には、これらの状況を支援するために、ある種の「ウォッチドッグ」スクリプトをマシンにインストールすることをお勧めします。たとえば、monitを使用すると、サービスまたはプロセスが一定量のCPUリソースを消費したときに、サービスまたはプロセスを自動的に再起動できます。

長期的には、パフォーマンスの問題があると申し訳ありません。少なくとも、solrとjettyの再構成を検討する必要があります。また、ガベージコレクションの調整や、場合によってはハードウェアの追加についても検討する必要があります。これらのトピックに関する情報はオンラインでたくさんありますが、このプロセスはやや難しいと申し訳ありません。

幸運を!

トム・パール

3
Tom Purl

応答時間が低下している間にCPUが最大になっている場合、私が最初に探しているのは、Java-おそらく多くの主要なコレクションを実行している-そして最も速い)内のヒープ管理です。この問題を解決する方法は、コンテナに実行するメモリを増やすことです。

2
symcbean