Linux プロセスの CPU 使用率が 700% に達し、終了できない場合の解決策

Linux プロセスの CPU 使用率が 700% に達し、終了できない場合の解決策

1. 問題の発見

[root@zwlbs3 ~]# トップ

i. プロセスの CPU 使用率が 700% で、COMMAND がランダムな文字列で構成されていることがわかりました。これで終わりです! 最初に考えたのは、それを強制終了することでした。

[root@zwlbs3 ~]# kill -9 "PID"

ii. しかし、殺害された後、しばらく静かになった後、再びプロセスが開始されたことが判明しました。

注:古いイメージが再利用され、PID とコマンドが変更されています。

2. プロセスの詳細情報を表示する

[root@zwlbs3 ~]# cd /proc/748/
[root@zwlbs3 748]# ls -ial

# 「748」はプロセスのPIDです。PIDに応じて確認できます。

図に示すように:

プロセスが /dev/shm ディレクトリにあることがわかりました。/dev/shm とは何ですか?

インターネットから引用して/dev/shmについて説明しましょう

1) まず、/dev/shm はデバイス ファイルであることがわかります。/dev/shm はシステム メモリへの入り口と考えることができます。これは、物理ストレージ デバイス、つまり tmp ファイルシステムと考えることができます。このデバイスを使用して、メモリへのファイルの読み取りと書き込みを行うことで、大きなファイルの頻繁なオープン、書き込み、読み取りなどの特定の高 I/O 操作を高速化できます。

2) Oracle は /dev/shm を使用すると言われています (shitou は Oracle を使用したことがありません)。mount コマンドを使用して、現在マウントされている /dev/shm ファイルシステムを一覧表示できます。

3) メモリベースのファイルシステムであるため、システムを再起動すると /dev/shm の下のファイルは存在しなくなります。デフォルトの Linux (CentOS) /dev/shm パーティション サイズはシステムの物理メモリの 50% ですが、/dev/shm を使用するとファイル操作の効率が大幅に向上します。ただし、現在、これを使用しているソフトウェア ディストリビューションはほとんどありません (上記の Oracle を除く)。ls /dev/shm を使用して、その下にファイルがあるかどうかを確認できます。ない場合は、現在のシステムがデバイスを使用していないことを意味します。

/dev/shmディレクトリに関連ファイルがあるかどうかを確認します

[root@zwlbs3 ~]# ls -a /dev/shm/
. ..

# 関連ファイルがありません。おかしいですね。
  • crontab 関連のスケジュールされたタスクはありません。
  • which コマンドでも関連ファイルは見つかりませんでした。
  • システムログをチェックしても正常ですが、これは非常に奇妙です。
  • このプロセスに関連するファイルはほとんど見つかりませんでした。

3. 解決策

i. プロセス内のスレッド占有分析を表示する

[root@zwlbs3 ~]# top -H -p "PID" 

ii. 関連するプロセスが多数あるため、すべて終了する

iii. 数分後に再度確認し、システム負荷が正常に戻ったことを確認します。

解決したと思ったのですが、数時間後に確認したらまた表示されました。しまった。

本番環境ではサーバーを再起動するのは不便なので、再起動の方法を試すしかありませんでした。

4. 大法を再開する

サーバーを再起動してから 1 時間後に再度確認したところ、正常に戻っていました。再起動しても問題なく動作します。

この悪意のあるプログラムは何をするのでしょうか?なぜ CPU リソースだけを消費するのでしょうか?関連するファイル情報が見つからなかったため、現時点では理由は不明です。

知っている方がいたら教えてください、よろしくお願いします!

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • LinuxのCPU負荷とCPU使用率の詳細な説明

<<:  MySQL フェイルオーバー ノート: アプリケーション対応設計の詳細な説明

>>:  JSでユーザーを追跡する方法

推薦する

MySQLのREDOログ(リドゥログ)とロールバックログ(アンドゥログ)の詳しい説明

序文:前回の記事では、MySQL システムでよく使用されるログをいくつか説明しました。実は、トランザ...

MySQLはデータテーブル内の既存のテーブルを分割します

目次操作方法操作プロセス既存のテーブルにパーティション テーブルを作成し、データを新しいテーブルに移...

JavaScript はモーダルボックスのドラッグ効果を実現します

これはモーダル ボックスのドラッグのケースです。ここで実装する関数は次のとおりです。 1. ポップア...

sqlite を mysql スクリプトに移行する方法

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 パーレル # # https:/...

オンラインMySQLオプティマイザの誤判断によって発生した低速クエリイベントを記録する

序文:非常に遅いクエリとリクエストのタイムアウトのアラートを受け取りました。メトリックを通じて My...

Dockerカスタムネットワークコンテナ相互接続

目次序文-リンクカスタムネットワーク質問する序文前回は、 -Linkパラメータを使用してコンテナ間の...

Element-ui NavMenuサブメニューを使用して再帰的に生成する場合のエラーの詳細な説明

ナビゲーションバーのサブメニューを再帰的に生成すると、メニューは正常に生成できるが、マウスをホバーす...

JS を使用して要素が配列であるかどうかを判断する例

検証できるデータの種類は次のとおりです a = [1,2,3,4,5,6]とします。 b = [とし...

Vueコンポーネント登録方法の解釈

目次概要1. グローバル登録2. 現地登録3. モジュールシステムへのローカル登録概要コンポーネント...

Vue コンポーネント ライブラリ ElementUI はテーブル読み込みツリー データのチュートリアルを実装します

ElementUIは、参考のためにテーブルツリーリストの読み込みチュートリアルを実装しています。具体...

Viteの新しい体験の詳細な説明

Vite とは何ですか? (フロントエンドの新しいおもちゃです) Vite は、ネイティブ ES モ...

複数の例で HTML フォームを使用する方法

参考までに、HTMLフォームの使い方を9つの簡単な例で分析します。具体的な内容は次のとおりです。 1...

Vue3.0 エラーの解決策: モジュール 'worker_threads' が見つかりません

vue3.0 への最初の試みを記録します。プロジェクトを開始したときに、「モジュール 'wo...

QT が MYSQL データベースに接続するための詳細な手順

最初のステップは、対応するデータベースモジュール(sql)をプロジェクトファイル( .pro )に追...

Ubuntu で FTP サーバーを構築する方法の詳細な説明 (成功保証)

1. 今日の午後、コースの要件により、Ubuntu で FTP サーバーを設定する実験を行う必要が...