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でユーザーを追跡する方法

推薦する

JS 正規マッチングの落とし穴の記録

最近、JS の正規表現マッチングの落とし穴を発見したのですが、その時はあまりにも奇妙だったので、何か...

フォーム送信時に追加のパラメータを渡すためのいくつかの一般的な方法

フォームを送信するときに、送信前に追加のパラメータが追加される状況が発生する場合があります。この問題...

Linux システムでの nginx サーバーのインストールと負荷分散構成の詳細な説明

nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバー、メール プ...

上下に空白行があるフォームを挿入する解決策

ウェブページを作成するときに、フォームを挿入した後、フォームの上下に空白行が表示されることがよくあり...

Linux でファイルを削除するときに「操作は許可されていません」というプロンプトが表示される場合の対処方法

同僚からよく聞かれるのですが、ファイル/ディレクトリを削除すると「操作は許可されていません」というエ...

JavaScript の基本: ループと配列

目次ループ - for forループの基本的な使い方ループを終了するネストされたループ配列配列とは何...

Jenkins Docker 静的エージェント ノードのビルド プロセス

静的ノードはマシン上に固定されており、いくつかの固定コマンドを通じて起動されます。動的ノードには複数...

Dockerでk8sをデプロイする方法

K8s k8s はクラスターです。クラスターには複数の名前空間があります。名前空間の下には複数のポッ...

Linux システムで httpd の自動インストールと構成を Ansible で実装する方法

1. Ansibleのプレイブックを使用してhttpdを自動的にインストールする1) まず、Ansi...

MySQLの半同期の詳細な説明

目次序文MySQL マスタースレーブレプリケーションMySQL でサポートされているレプリケーション...

ウェブページの画像の回転を実現するjs

この記事では、Webページの画像の回転を実現するためのjsの具体的なコードを参考までに共有します。具...

JavaScript マクロタスクとマイクロタスクの実行順序についての簡単な説明

目次1. JavaScriptはシングルスレッドです1. 同期タスク2. 非同期タスク2. タスクキ...

mysql-8.0.16 winx64 最新インストール チュートリアル (画像とテキスト付き)

最近、データベースについて学び始めました。最初にやったことは、データベースとは何か、データベースとデ...

Presto をインストールし、Docker で Hive を接続する詳細なプロセス

1. はじめにPresto は、ギガバイトからペタバイトに及ぶデータ ソースに対してインタラクティブ...