DockerコンテナでArthasを使用するための詳細な手順

DockerコンテナでArthasを使用するための詳細な手順

Arthas はあなたのために何ができるでしょうか?

Arthas 、開発者に深く愛されている Alibaba のオープンソース Java 診断ツールです。

次のような問題にどう対処したらよいか迷ったときは、 Arthas解決のお手伝いをします。

このクラスはどの jar パッケージからロードされますか?さまざまな種類の例外が報告されるのはなぜですか?変更したコードが実行されないのはなぜですか?コミットしなかったからでしょうか?ブランチが間違っていますか?問題が発生し、オンラインでデバッグできない場合、ログを追加して再公開するしか方法はありませんか?オンラインで特定ユーザーのデータ処理に問題が発生していますが、オンラインでデバッグできず、オフラインで再現できません。システムのパフォーマンスを全体的に把握できますか? JVM のリアルタイム実行ステータスを監視する方法はありますか?アプリケーションのホットスポットをすばやく見つけてフレームグラフを生成するにはどうすればよいでしょうか? JVM から直接クラスのインスタンスを見つけるにはどうすればよいでしょうか?

Arthas JDK 6+、Linux/Mac/Windows をサポートし、コマンド ライン対話モードを使用し、問題の特定と診断をさらに容易にする豊富なTab自動補完機能を提供します。

具体的な内容については、各コマンドの詳細な説明が記載されている公式ドキュメントを参照してください: https://arthas.aliyun.com/doc/

この記事では、arthas の使い方については紹介しません。ここでお話ししたいのは、docker コンテナで arthas を使用する方法です。

arthas を docker コンテナ内で使用するのはかなり面倒で、コンテナ ID を見つけて arthas ディレクトリ全体をコンテナにコピーし、コンテナに入り、対象サービスのユーザーに切り替えて arthas を起動する必要があります。これらの手順は、Linux コマンドや docker コマンドに慣れていない多くの学生にとって使いやすいものではありません。

そこで、上記の手順を直接置き換えることができるスクリプトを作成しました。その効果は下の図に示されています。

スクリプトの後に完全なサービス名(ここではコンテナの IMAGE 名)を入力するだけで使用できます。シンプルで便利です。

使用方法: まず、Linux サーバーで arhas-bin.zip を解凍する必要があります。解凍されたバージョンが arthas ソフトウェアです。マシンにDockerがインストールされていることを確認してください

arhas-bin.zip ダウンロードディレクトリ: https://github.com/alibaba/arthas/releases

arthasDocker.sh スクリプトを、解凍した arthas ディレクトリに配置し、スクリプトを開いてARTHAS_PATH変数を編集し、arthas を配置したディレクトリに変更します。

arthasDocker.sh スクリプトの内容:

#!/bin/bash
#
# 著者: dijia478
# 日付: 2020-8-20 18:14:38
# desc: このスクリプトは arthas ディレクトリに配置し、ディレクトリ全体とともに docker コンテナにコピーする必要があります。主な目的は、コンテナ内の対象サービスのユーザーを切り替えてarthasを起動することです

echo "対象サービスのプロセス ID とユーザーの照会を開始します..."
PID=`ps -eo pid、user=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -o args | grep java | grep -v grep | awk '{print $1}'`
echo "対象サービスのプロセス ID は ${PID} です"
USER=`ps -eo pid,user=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -o args | grep java | grep -v grep | awk '{print $2}'`
echo "対象サービスのユーザーは ${USER} です"

if [[ ! -d "/home/${USER}" ]]
それから
  mkdir -p /home/${USER}
  echo "ディレクトリ /home/${USER} を作成します"
フィ
chmod 777 /home/${USER}

echo "ユーザーの切り替えと arthas の起動を開始します..."
# 次の arthas パスは変更する必要があり、startArthas.sh スクリプト ARTHAS_PATH="/opt/arthas" と一致する必要があります。
su ${USER} -c "java -jar ${ARTHAS_PATH}/arthas-client.jar 127.0.0.1 3658 -c 'stop'"
su ${USER} -c "java -jar ${ARTHAS_PATH}/arthas-boot.jar ${PID}"

startArthas.sh スクリプトを Linux サーバーに配置します。~ ディレクトリに配置し、スクリプトを開いて、 ARTHAS_PATH変数を編集し、arthas が配置されているディレクトリに変更することをお勧めします。次にスクリプトの実行権限を与えます

startArthas.sh スクリプトの内容:

#!/bin/bash
#
# 著者: dijia478
# 日付: 2020-9-18 10:36:27
# desc: このスクリプトの主な目的は、arthas 診断ツールを起動して docker 内の Java サービスを診断することです if [[ ${1} == '' ]]
それから
  echo "サービスを選択してください:"
  sudo docker ps | awk 'NR>1 {print $2}'
  終了 0
フィ

echo "サービス ${1} のコンテナーの検索を開始しています..."
DOCKER_LIST=`sudo docker ps | awk 'NR>1 {print $2}'`
フラグ=0
${DOCKER_LIST[@]}内のiに対して
する
  [[ ${i} == ${1} ]]の場合
  それから
    フラグ=1
    壊す
  フィ
終わり

[[ ${FLAG} == 0 ]]の場合
それから
  DOCKER_NAME=`sudo docker ps | awk 'NR>1 {print $2}' | grep ${1}`
  [[ ${DOCKER_NAME} == '' ]]の場合
  それから
    echo "このサービスのコンテナが見つかりませんでした。サービスを再選択してください:"
    sudo docker ps | awk 'NR>1 {print $2}'
  それ以外
    echo "サービスのフルネームを入力してください:"
    sudo docker ps | awk 'NR>1 {print $2}' | grep ${1}
  フィ

それ以外
  ID=`sudo docker ps --filter ancestor=${1} | awk '{print $1}' | sed -n '2p'`
  echo "コンテナ ${ID} が見つかりました"

  echo "arthas をコンテナにコピーし始めます..."
  # 次の arthas パスは変更する必要があり、arthasDocker.sh スクリプト ARTHAS_PATH="/opt/arthas" と一致している必要があります。
  sudo docker exec -it ${ID} /bin/bash -c "rm -rf ${ARTHAS_PATH}"
  sudo docker cp ${ARTHAS_PATH} ${ID}:${ARTHAS_PATH}
  echo "コピーが完了しました"

  echo "コンテナに入ろうとしています..."
  sudo docker exec -it ${ID} /bin/bash -c "bash ${ARTHAS_PATH}/arthasDocker.sh"
フィ

最後に、startArthas.shスクリプトを実行します。

© 著作権声明 記事の著作権は著者に帰属します。転載は歓迎しますが、元のリンクを必ず提供してください。そうでない場合は法的責任を追及する権利があります。終わり

Docker コンテナで Arthas を使用する方法については、これで終わりです。Docker で Arthas を使用する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • ラムダ式によりArthasは再定義に失敗する

<<:  CSS スタイルの読み込みの優先順位に関する経験の共有

>>:  HTML でスクロールバーを非表示にしたり削除したりする方法

推薦する

CSS 要素を表示および非表示にする 9 つの方法

Web ページの制作では、要素の表示と非表示は非常に一般的な要件です。この記事では、要素を表示したり...

ウェブサイトにダークモード切り替え機能を持たせるための純粋なCSSフリー実装コード

序文ダーク モードの概念は、 MacOS系統のMojaveに由来し、ユーザーが選択できる 2 つのス...

Docker が elasticsearch を起動するときのメモリ不足の問題と解決策

質問Docker が elasticsearch をインストールして起動するときにメモリが不足するシ...

Vue バッチ更新 DOM 実装手順

目次シーン紹介深い応答性トリガーゲッターDep.targetを探すゲッターセッター要約するシーン紹介...

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

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

CSS で垂直方向の中央揃えを実装するいくつかの方法の概要

フロントエンドのレイアウト プロセスでは、水平方向の中央揃えを実現するのは比較的簡単で、通常は ma...

【Webデザイン】E-WebTemplates の美しい海外の Web ページ テンプレート (FLASH+PSD ソース ファイル+HTML) を共有します

これらはすべて海外のE-WebTemplates WebサイトからのWebページテンプレートであり、...

CSS3でよく使われるスタイルの詳しい解説[基本的なテキストとフォントのスタイル]

概要: Web ページをより美しく見せるために、ここでは CSS3 でよく使用されるスタイルをいくつ...

MySQL の結合フィールドの Concat()

目次1. はじめに2. 本文2.1 フィールドの連結2.2 フィールドでの算術計算の実行1. はじめ...

js で虫眼鏡効果を実現するためのアイデアとコード

この記事の例では、虫眼鏡効果を実現するためのjsの具体的なコードを参考までに共有しています。具体的な...

ウェブページサイズに関する調査

<br />統計によると、Web ページの平均サイズは 2003 年以降 3 倍に増加し...

MySQL スロークエリログの基本的な使い方チュートリアル

スロークエリログ関連のパラメータMySQL スロー クエリ関連のパラメータの説明: slow_que...

MySQL マスタースレーブレプリケーションの実践の詳細説明 - ログポイントに基づくレプリケーション

ログポイントベースのレプリケーション1. マスターデータベースとスレーブデータベースに専用のレプリケ...

Docker ベースの Tomcat クラスタと Nginx ロード バランシングの展開の概要

目次前面に書かれた1. Ngixnイメージの作成2. Java Web (Tomcat) アプリケー...

MySQLのROUND関数の丸め演算における落とし穴の分析

この記事では、MySQL の ROUND 関数を使用した丸め操作の落とし穴を例を使って説明します。ご...