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

推薦する

ボタンの権限判定を実装するためのVueカスタムv-has命令

アプリケーションシナリオバックグラウンド管理システムを例にとると、各ユーザーには異なるボタン権限があ...

Ant Design Pro ログイン機能にグラフィック検証コード コンポーネントを統合する方法

序文:この記事では、Ant Design Proログイン機能にグラフィック検証コードコンポーネントを...

Docker コマンドラインの完全ガイド (知っておくべき 18 のこと)

序文Docker イメージは Dockerfile といくつかの必要な依存関係で構成され、Docke...

MYSQL 文字列強制変換メソッドの例

序文2 つのテーブル内の同じフィールドの型が異なっていたり、エンコード タイプが異なっていたりするた...

Sparkの紹介とHadoopとの比較

目次1. SparkとHadoopの比較1.1 Haoopの欠点1.2 Hadoop MR に対する...

mysql8.0.11 winx64 インストールと設定のチュートリアル

mysql 8.0.11 winx64のインストールチュートリアルは以下のように記録され、みんなと共...

Linux での tcpdump コマンド例の詳細な説明

序文簡単に言えば、tcpdump は、ネットワーク上のトラフィックをダンプし、ユーザーの定義に従って...

Vue3 プロジェクトで WeChat 認証ログインをエレガントに実装する方法

目次序文準備する実装のアイデアコードについて要約する序文WeChat 認証ログインは、WeChat ...

元のPATHを上書きしてコマンドが見つからないというメッセージが表示されるコマンド失敗の問題を解決する方法

同僚から、LINUX サーバー上の多くのコマンドが (コマンドが見つかりません) というプロンプトで...

HTML およびプラグイン アプリケーションにおけるデータ カスタム属性の使用の概要

HTML にはデータ属性が含まれていることがよくあります。これらは HTML5 のカスタム属性です。...

MySQL における distinct と group by の違い

簡単に言うと、distinct は重複を削除するために使用され、group by は統計を集計するよ...

MySQL sql_mode の変更が有効にならない理由と解決策

目次序文シナリオシミュレーション要約する序文最近、sql_mode の話題については何度も話し合われ...

Dockerデータ管理とネットワーク通信の使用

Docker をインストールし、Docker コアとインストールを通じて簡単な操作を実行できます。 ...

HTML テーブルタグについての簡単な説明

主にその構造といくつかの重要な特性について説明します。少しずつ改善しながら紹介していきます。 1) ...

Dockerを使用してプライベートGitLabを構築する2つの方法

最初の方法: docker インストール1. オープンソース版のイメージを取得する2. 対応するデー...