今日、私のサーバーは責任を負うことができず、SSHにログインすることもできませんでした。しかし、私のサーバーアプリケーションを実行したときに「トップレベル」データを復元できました。
サーバーは実行中ですが、新しい接続を許可しませんが、私のアプリケーションはまだ「top」コマンドの出力を私のWebインターフェースに送信しています。 2% CPU 使用量 0.0% wa load 110 ?どのように?
システムログに疑わしい内容が見つかりました。 https://pastebin.com/u8kLCJEM
約10回ほど現れ、私が来たとき(1時間後)syslogにもはやメッセージがありませんでした。上部のスクリーンショットを撮り(110ロード)、サーバーを完全に再起動しましたが、すべてがうまくいきました。しかし、サーバーがクラッシュした理由とそれを防ぐ方法を知りたいです。
答え1
あなたのシステムログにはあまり疑わしい内容はありません。
私が見ることができるもの:
- 約64GBのRAMを占めるJava Virtual Machine(JVM)があります。
- 64GBの物理RAMがあります。
- 交換しなかった
これが問題の理由です。 JVMが漏れています。
何とか終了してから再起動する必要があります。
親コンソールとWebコンソールが機能する理由は、使用可能なメモリが少なく、JVMが異常な場合にすでに実行されているためです。したがって、多くのRAMを割り当てる必要はなく、使用するRAMの量は少なくとも大丈夫です。
他のもの、始めたいもの、幸運ではありません。たとえば、sshdは新しいプロセス(したがって新しいシェル)をフォークできないようです。
JVMは大量のRAMを好みますが、それほど多くはありません。 64GBはすでに制限です。サーバーがホストするWebアプリケーションに問題があります。それが正確に何であるかは、その上で実行されているWebアプリケーションをより深く調査する必要があります。
システムが正常に動作するためには、まずJVMをシャットダウンする必要があります。コマンドラインから簡単なkill -9 13116
操作を実行できますが、現在はコマンドラインはありません。
しかし、コマンドラインはtop
できるプロセスを終了します(kを押してPIDを選択します)。 Web ベースの上部にも同じ機能が存在できます。
何も機能しない場合は、再起動する必要があります。
長期的:JVMフラグを使用し、メモリ使用量を制限する必要があります。 .iniファイルのどこかにフラグを設定できます。これらのフラグは次のとおりです-Xmx<number> -Xms<number>
。これらを確認してください。詳細はアプリケーションサーバーによって異なります。
この種のRAMの乱れはJavaでは一般的ではなく、何かが正しくありません。あなたのアプリケーションを知っていなければ、それが何であるかを正確に知ることができます。
セキュリティの脆弱性はあなたのログに表示されません。