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 とのリンク時に発生する問題の概要

推薦する

jsはショッピングカートの加算と減算、価格計算を実装します

この記事の例では、ショッピングカートの加算と減算、価格計算を実装するためのjsの具体的なコードを共有...

Centos7 での python3 のインストールとアンインストールに関するチュートリアル

1. Python 3をインストールする1. 依存パッケージをインストールしますyum instal...

Vue+Openlayerはmodifyを使用して要素の完全なコードを変更します

Vue+Openlayerはmodifyを使って要素を変更します。具体的な内容は以下のとおりです。 ...

Dockerコンテナが停止できない問題の解決方法

解決策は次のとおりです。 1. コンテナを強制削除する docker rm -f ジェンキンス2. ...

CentOS7 で MySQL 5.7.24 をコンパイルしてインストールする詳細なチュートリアル

目次依存関係をインストールするブーストをインストールMySQLをコンパイルしてインストールする構成依...

Docker のコンテナ データ ボリュームの概要

目次Dockerコンテナのデータ量データボリュームの使用方法1: コマンド-vを使用して直接マウント...

js 実行コンテキストとスコープの概要

目次序文文章1. JavaScriptコードの実行プロセスに関連する概念2. 実行コンテキストと実行...

Vueはdivホイールのズームインとズームアウトを実装します

Vue プロジェクトで div ホイールのズームインとズームアウト、ドラッグ効果、キャンバス効果に似...

ECMAscript の新機能の紹介

目次1. 関数パラメータのデフォルト値1.1 関数パラメータのデフォルト値の指定1.2 分離割り当て...

HTML テーブル マークアップ チュートリアル (22): 行の境界線の色属性 BORDERCOLORLIGHT

行内では、明るい境界線の色を個別に定義できます。基本的な構文<TR ボーダーカラーライト=co...

js配列forEachインスタンスの詳細な使用方法

1. forEach() は map() に似ています。これも渡された関数に各要素を順番に適用します...

Windows10システムにMySQL 5.7.17をインストールする

オペレーティング システム win10 MySQL は、公式 Web サイトからダウンロードした 6...

Vue3を使用してjsで呼び出せるコンポーネントを実装する

目次序文1. 従来のVueコンポーネント1. メインコンポーネントコード: 2. 使用方法3. 成果...

HTML リンク アンカー タグと SEO におけるその役割の概要

<a> タグは主に、ハイパーリンクまたはアンカー リンクとも呼ばれるリンクとブックマーク...

正の整数かどうかを判断するMYSQLカスタム関数の例コード

関数を記述できます。主に正規表現を使用して判断を行います。入力文字が空の場合は、「-」を使用して置き...