Linux システムでの CPU 使用率が高い場合のトラブルシューティングのアイデアと解決策

Linux システムでの CPU 使用率が高い場合のトラブルシューティングのアイデアと解決策

序文

Linux 運用保守エンジニアとして、日々の業務の中で Linux サーバーの CPU 負荷が 100% に達し、高い状態が続く状況に遭遇することがあります。CPU 負荷が高い状態が続くと、業務システムの正常な動作に影響を及ぼし、企業に損失をもたらします。


このような状況に遭遇すると、多くの運用および保守担当者が困惑することがよくあります。CPU 過負荷の問題の場合、通常は次の 2 つの方法を使用して、問題を迅速に特定できます。

方法1

ステップ1: 使用

topコマンドを実行し、shift+pを押してCPU順に並べ替える

CPUを過剰に使用しているプロセスのPIDを見つける

ステップ2: 使用

top -H -p [プロセスID]

プロセス内で最も多くのリソースを消費するスレッドのIDを見つける

ステップ3: 使用

echo 'obase=16;[スレッドID]' | bc または printf "%x\n" [スレッドID]

スレッド ID を 16 進数に変換します (文字は小文字にする必要があります)

bcはLinuxの計算機コマンドです

ステップ4: 実行

jstack [プロセスID] |grep -A 10 [16進数のスレッドID]"

スレッドのステータス情報を表示する

方法2

ステップ1: 使用

topコマンドを実行し、shift+pを押してCPU順に並べ替える

CPUを過剰に使用しているプロセスを見つける

ステップ2: 使用

ps -mp pid -o スレッド、tid、時間 | ソート -rn

スレッド情報を取得し、CPUを大量に消費するスレッドを見つける

ステップ3: 使用

echo 'obase=16;[スレッドID]' | bc または printf "%x\n" [スレッドID]

必要なスレッドIDを16進形式に変換します

ステップ4: 使用

jstack pid |grep tid -A 30 [スレッドIDの16進数]

スレッドスタック情報を印刷する

ケーススタディ

シナリオの説明

実稼働環境での JAVA プロセスの CPU 使用率が高い場合のトラブルシューティング

解決プロセス

1. topコマンドによると、PID 2633のJavaプロセスがCPUの最大300%を占有し、障害が発生していることがわかります。

2. プロセスを見つけた後、特定のスレッドまたはコードを見つけるにはどうすればよいでしょうか? まず、スレッド リストを表示し、CPU 使用率の高いスレッドで並べ替えます。

[root@localhost ~]# ps -mp 2633 -o スレッド、tid、時間 | sort -rn

結果は次のとおりです。


CPU 消費量が最も高いスレッド (TID) 3626 が見つかりました。このスレッドは 12 分間 CPU 時間を占有していました。

3. 必要なスレッドTIDを16進形式に変換する

[root@localhost ~]# printf "%x\n" 3626
18 18 18

4. 最後に、jstack コマンドを使用して、プロセスの下にあるこのスレッドのスタック情報を出力します。

[root@localhost ~]# jstack 2633 |grep "e18" -A 30

トラブルシューティングと比較して、障害を発見することも同様に重要です。 Zabbix、Nagios、Alibaba Cloud Monitoring(クラウド サーバー用)など、市場に出回っているほとんどの監視ソフトウェアは、サーバー負荷のリアルタイム監視を実現できます。しかし、ほとんどのソフトウェアでは、運用・保守担当者がルールを積極的に設定したり、テストを実施して問題を発見する必要があります。受動的にアラートを受信するにはどうすればよいでしょうか。

王教授、実用的な運用・保守ソフトウェアをお勧めしたいと思います。Alibaba Cloud にビジネスを展開しているユーザーは、監視が必要な読み取り専用の AcessKey をバインドするだけで、クラウド リソースのアラーム情報を対応するチーム メンバーに迅速に通知できます。

アクティブ アプローチからパッシブ アプローチへの変更により、一方では運用および保守エンジニアの作業負荷が軽減され、他方では O&M エンジニアがアラームを見逃したり無視したりする可能性も軽減されます。

要約する

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

以下もご興味があるかもしれません:
  • LinuxのCPU負荷とCPU使用率の詳細な説明
  • Linux で CPU 使用率が高くなる原因をトラブルシューティングするプロセスの詳細な説明

<<:  Vueカスタム命令とその使用方法の詳細な説明

>>:  MySql 8.0.11 のインストール プロセスと Navicat とのリンク時に発生する問題の概要

推薦する

JavaScript の絶妙なスネーク実装プロセス

目次1. HTML構造を作成する2. テーブルを作成する3. ヘビの頭と体を作る4. 食べ物を作る5...

MySQL InnoDB アーキテクチャの概要

目次導入1. MySQLデータベースの全体的なアーキテクチャSQL インターフェースパーサーオプティ...

MySQL パーティション テーブルの基本入門チュートリアル

序文最近のプロジェクトでは、大量のデータを保存する必要があり、このデータには有効期限があります。クエ...

HTMLフォームのいくつかの送信方法の概要

最も一般的で、最もよく使用され、最も一般的な方法は、submit タイプを使用することです。コードを...

MySQL 5.6.22 のインストールと設定方法のグラフィックチュートリアル

このチュートリアルでは、MySQL5.6.22のインストールと設定方法の具体的なコードを参考までに共...

Nginx リバース プロキシを使用して go-fastdfs を実行する例

背景go-fastdfs は、http プロトコルをサポートする分散ファイルシステムです。一般的なプ...

Docker可視化ツールPortainerの導入と中国語翻訳

#docker 検索#docker プルポーター1. イメージを取得した後、中国語パッケージをダウン...

MySQL の低速クエリの最適化: 理論と実践からの制限の利点

多くの場合、クエリの結果は最大で 1 つのデータ レコードになることが予想されます。この場合、制限 ...

1つの記事でNavicat for MySQLの基本を理解する

目次1. データベース操作2. データ型3. バックアップとリカバリ3. 操作4. 上級5. 知識補...

Linux における nohup と & の使い方と違いの詳細な説明

例:例として、Python コード loop_hello.py を使用します。このコードは、ループ回...

MySQLのデッドロックチェック処理の通常の方法

通常、デッドロックが発生すると、重みが最も小さい接続が強制終了され、ロールバックされます。ただし、最...

HTML ul および li タグを使用して画像を表示するサンプル コード

以下のコードをDreamweaverのコードエリアにコピーすると、プレビュー時に以下の画像が表示され...

CSS3 列を使用したカード ウォーターフォール レイアウトを実装するためのサンプル コード

この記事では、カード ウォーターフォール レイアウトを実現するための CSS3 列のサンプル コード...

DockerコンテナにPythonアプリケーションをデプロイするプロセスの分析

シンプルなアプリケーションの展開1. ディレクトリ構造: └── Pythonpro #ディレクトリ...

ウェブサイトデザインにおいて非常に重要な概念であるdiv+floatの分析

ウェブサイトの構築では、HTML と CSS に関するさまざまな問題に常に遭遇します。ウェブサイト ...