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

推薦する

MySQL ルートパスワードをリセットする方法

目次1. ルートパスワードを忘れてしまい、データベースにアクセスできない: DBA にとって、スーパ...

リアルタイムコンピューティングフレームワークFlinkクラスタの構築と動作メカニズムについての簡単な説明

目次1. Flinkの概要1.1 基本的な紹介1.2 アプリケーションシナリオ2. 環境の展開2.1...

HTML の blockquote タグの使用と美化

ブロック引用の定義と使用法<blockquote> タグは引用ブロックを定義します。 &...

Vueでaxiosをカプセル化する方法

目次1. インストール1. はじめに3. インターフェースルートアドレス4. 使用例4.1 ダウンロ...

キャンバス操作プラグイン fabric.js の使い方を詳しく解説

Fabric.js は非常に便利なキャンバス操作プラグインです。ここでは、日常のプロジェクトで使用さ...

vue の webpack -v エラー解決の概要

XiaobaiはVueについて学び、次にwebpackについて学び、そしてさまざまなものをインストー...

リンクAの意味論、書き方、ベストプラクティス

リンク A のセマンティクス、ライティング スタイル、およびベスト プラクティス。私は JavaEy...

Tencent Cloud Server Centosにデータディスクをマウントする方法

まず、ハードディスクデバイスにデータディスクがあるかどうかを確認します # まずfdisk -lを実...

JQuery データグリッドクエリの詳細な説明

目次ツリー項目にコードを追加します。 1. 右側に関連情報ページを保存します(userManage....

MySQL の一般的な SQL ステートメントの概要

1. mysqlエクスポートファイル: SELECT `pe2e_user_to_company`....

SpringBoot と Docker の統合の詳細なプロセス

目次1. デモプロジェクト1.1 インターフェースの準備1.2 構成の準備2. Dockerがリモー...

ウェブページのフォント設定についての簡単な説明

サイト全体のフォントを設定することは、常にシンプルでありながら難しい作業です。深く掘り下げていくと、...

MySQLクエリが遅い場合の理由と解決策

Python プログラムを書き、Mysql ライブラリを集中的に操作したためです。データ量が多くない...

ウェブデザイナーもウェブコーディングを学ぶ必要がある

多くの場合、Web デザインが完成した後でデザイナーの無知が露呈し、批判されることがあります。彼らは...

IE で ClearType をオンにした後の透明フォントの問題の解決方法

IE で ClearType をオンにした後に発生する透明フォントの問題を解決するには、透明要素に背...