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

推薦する

Apache Superset を使用して ClickHouse データを視覚化する 2 つの方法

Apache Superset は、データを表示および探索する方法を提供する強力な BI ツールで...

MySQL ストレージエンジンの簡単な紹介

1. MySQL アーキテクチャストレージ エンジンを紹介する前に、まずは MySQL アーキテクチ...

条件付きコメント形式の書き方とサンプルコード

フロントエンドエンジニアとして、IE は私たちにとって馴染み深いものであるはずです。設計案を実装する...

MySQL ALTERコマンドの知識ポイントのまとめ

テーブル名を変更したり、テーブル フィールドを変更したりする必要がある場合は、 MySQL ALTE...

ブラウザでTIF形式の画像を表示する方法

ブラウザはTIF形式の画像を表示しますコードをコピーコードは次のとおりです。 <html>...

Ubuntu 上の Apache で SSL (https 証明書) を設定する正しい方法の詳細な説明

まず、Alibaba Cloud の公式チュートリアルをご覧ください。ファイルの説明: 1. 証明書...

MySQL の異なるテーブル間でフィールドをコピーする

場合によっては、フィールドから別の新しいフィールドにデータの列全体をコピーする必要があります。これは...

http:// の代わりに // を使用する利点は何ですか (アダプティブ https)

//デフォルトプロトコル/ デフォルト プロトコルの使用は、リソース アクセス プロトコルが現在の...

乱数、文字列、日付、検証コード、UUIDを生成するMySQLメソッド

目次乱数を生成する0から1までの乱数を生成する指定された範囲内で乱数を生成します6桁のモバイル認証コ...

テーブルタグ(TAGS)の詳細な紹介

テーブルの基本構文<table>...</table> - テーブルを定義し...

MySQLインスタンスが起動できない問題の分析と解決

目次序文シナリオ分析要約する序文数日前、友人がWeChatで私に連絡してきて、マシンがダウンタイムか...

MySQL にテーブルが存在するかどうかを確認し、それを一括で削除する方法

1. インターネットで長時間検索しましたが、判定表が存在するかどうかがわからなかったので、漠然と削除...

MySQLの基本を素早く学ぶ

目次SQLを理解するSELECTを理解するエイリアス定数をクエリし、固定定数列を追加します。重複行を...

Vue-Element-Adminはログインジャンプを実現するために独自のインターフェースを統合しています

1. まずリクエスト設定ファイルを見て、axios.createメソッドを見てください。baseUR...