[arthas]arthas安裝使用

arthas是阿里開源的一個java線上監控以及診斷工具,在docker容器中我們無需重啟服務,也不用更改代碼,就可以完成對應用內存、線程、日志級別的修改、方法調用的出入參、異常監測、執行耗時等,xxxx.xxxx.xxxxx為脫敏內容

1. 在docker容器中怎么安裝和啟動arthas

1.1 遠程下載arthas的jar

curl -O https://arthas.aliyun.com/arthas-boot.jar

1.2 啟動arthas

java -jar arthas-boot.jar

2. arthas可以解決哪些問題以及怎么解決

2.1 線上發布的容器內是否是包含最新編寫的代碼?反編譯

jad com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance

2.2 線上加載的環境變量有哪些,變量值是什么?

sysenv
sysenv JAVA_OPTS
ognl '#env=@System@getenv(),{#env}'
ognl '#config=@System@getenv("proxy.config"),{#config}'

2.3 線上的系統屬性有哪些,屬性值是什么?

sysprop
sysprop nacos.config.password
sysprop nacos.config.password test 永久修改
ognl '#properties=@System@getProperties(),{#properties}'
ognl '#SW_AGENT_NAME=@System@getProperty("SW_AGENT_NAME"),{#SW_AGENT_NAME}'

2.4 打印日志級別較低的日志:FATAL > ERROR > WARN > INFO > DEBUG > TRACE(未生效)

logger-- root路徑下整體更新
logger --name ROOT --level debug-- 沒有特別指定日志等級
logger -n com.xxxx.xxxx.xxxxx.cache;-- 查看classloader hashcode
sc -d com.xxxx.xxxx.xxxxx.cache;-- 根據hashcode更新level
logger -c 5cc69cfe --name ROOT --level debug

2.5 查看類的靜態屬性以及對靜態屬性的處理

getstatic com.xxxx.xxxx.xxxxx.cache.ApiDefCache apiDefCachegetstatic com.xxxx.xxxx.xxxxx.cache.ApiDefCache apiDefCache 'entrySet().iterator.{? #this.key=="I_REDPAY_P01_REDPAYGETORDER_1.0_DEF"}'
getstatic com.xxxx.xxxx.xxxxx.cache.ApiDefCache apiDefCache 'get("I_REDPAY_P01_REDPAYGETORDER_1.0_DEF")'
getstatic com.xxxx.xxxx.xxxxx.cache.ApiDefCache apiDefCache 'get("I_REDPAY_P01_REDPAYGETORDER_1.0_DEF").getCode()'
getstatic com.xxxx.xxxx.xxxxx.cache.ApiDefCache apiDefCache 'size()'
getstatic com.xxxx.xxxx.xxxxx.cache.ApiDefCache apiDefCache 'put("1","2")'
getstatic com.xxxx.xxxx.xxxxx.cache.ApiDefCache apiDefCache 'entrySet().iterator.{? #this.key=="1"}'
getstatic com.xxxx.xxxx.xxxxx.cache.ApiDefCache apiDefCache 'remove("1")'sc -d com.xxxx.xxxx.xxxxx.cache.ApiDefCache
ognl '@com.xxxx.xxxx.xxxxx.cache.ApiDefCache@apiDefCache'(不一定可以找到類,因為默認只會去SystemClassLoader里找類)
ognl -c 5cc69cfe '@com.xxxx.xxxx.xxxxx.cache.ApiDefCache@apiDefCache'getstatic com.xxxx.xxxx.xxxxx.util.ProxyUtil proxySelectFromDbSwitch
getstatic com.xxxx.xxxx.xxxxx.util.ProxyUtil proxySelectFromDbSwitch '#this.value=true' 
ognl -c 5cc69cfe '@com.xxxx.xxxx.xxxxx.util.ProxyUtil@proxySelectFromDbSwitch'
ognl -c 5cc69cfe '#value=true, @com.xxxx.xxxx.xxxxx.util.ProxyUtil@proxySelectFromDbSwitch.value=#value'

2.6 查看實例對象的方法調用以及實例對象的屬性

watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send-- -x 指定輸出結果的屬性遍歷深度
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send -x 3-- 只查看入參
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send "{params}"-- 只查看第一個入參
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send "{params[0]}"-- 只查看第一個入參的code字段
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send "{params[0].code}"-- 只查看第一個入參且入參的code字段值為payment
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send '{params[0]}' '{params[0].code=="payment"}'-- 只查看方法所在類對象實例
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send "{traget}"-- 只查看方法所在類對象實例的defaultOkHttpClient字段
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send "{target.defaultOkHttpClient}" -x 3-- 只查看方法的返回結果
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send "{result}"-- 查看方法的入參,所在類實例,返回結果
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send "{params, target, result}"-- 在方法調用之前觀察(返回值,異常均不存在)
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send -b-- 在方法調用異常之后觀察
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send -e-- 在方法返回之后觀察(默認)
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send -s-- 在方法結束之后觀察
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send -fAtEnter,AtExit,AtExceptionExit。對應函數入口,函數正常 return,函數拋出異常-- 當方法耗時超過200ms才進行觀察
watch com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send '{params, returnObj}' '#cost>200' -x 2

2.7 調整展示結果的形式為json

options json-format true

2.8 方法調用鏈路分析

stack com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send
stack com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send '#cost>200'

2.9 將stack、watch等命令在后臺執行并將結果輸出到指定文件目錄

stack com.xxxx.xxxx.xxxxx.communication.http.HttpClientInstance send >> stack.out & -- 查看
cat stack.out-- 查看后臺執行的任務
jobs
-- 停止后臺任務 
kill <job-id>
-- 后臺任務最多支持同時執行8個,默認一天后會超時自動關閉,可以通過options的job-timeout調整超時時間

2.10 容器內部線程分析

–查看最繁忙的前3個線程

thread -n 3

3. 高級用法

  • 獲取Spring context,然后調用bean執行方法等等:
    • https://github.com/alibaba/arthas/issues/482
  • 本地代碼熱部署到遠程服務器:
    • https://arthas.aliyun.com/doc/idea-plugin.html

4. 官方文檔

https://arthas.aliyun.com/doc

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85812.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85812.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85812.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flask-Babel 使用示例

下面創建一個簡單的 Flask-Babel 示例&#xff0c;展示如何在 Flask 應用中實現國際化和本地化功能。這個示例將包括多語言支持&#xff08;中文和英文&#xff09;、語言切換功能以及翻譯文本的使用。 項目結構 我們將創建以下文件結構&#xff1a; 1. 首先&#xff0c;創…

[論文閱讀] 軟件工程 | 量子計算如何賦能軟件工程(Quantum-Based Software Engineering)

arXiv:2505.23674 [pdf, html, other] Quantum-Based Software Engineering Jianjun Zhao Subjects: Software Engineering (cs.SE); Quantum Physics (quant-ph) 量子計算如何賦能軟件工程 我們在開發軟件時&#xff0c;常常會遇到一些棘手的問題。比如&#xff0c;為了確保軟…

Ansible 進階 - Roles 與 Inventory 的高效組織

Ansible 進階 - Roles 與 Inventory 的高效組織 如果說 Playbook 是一份完整的“菜譜”,那么 Role (角色) 就可以被看作是制作這道菜(或一桌菜)所需的標準化“備料包”或“半成品組件”。例如,我們可以有一個“Nginx Web 服務器安裝配置 Role”、“MySQL 數據庫基礎設置 Ro…

青少年編程與數學 01-011 系統軟件簡介 04 Linux操作系統

青少年編程與數學 01-011 系統軟件簡介 04 Linux操作系統 一、Linux 的發展歷程&#xff08;一&#xff09;起源&#xff08;二&#xff09;早期發展&#xff08;三&#xff09;成熟與普及&#xff08;四&#xff09;移動與嵌入式領域的拓展 二、Linux 的內核與架構&#xff08…

將圖形可視化工具的 Python 腳本打包為 Windows 應用程序

前文我們已經寫了一個基于python的tkinter庫和matplotlib庫的圖形可視化工具。 基于Python的tkinter庫的圖形可視化工具&#xff08;15種圖形的完整代碼&#xff09;:基于Python的tkinter庫的圖形可視化工具&#xff08;15種圖形的完整代碼&#xff09;-CSDN博客 在前文基礎上&…

【Kotlin】簡介變量類接口

【Kotlin】簡介&變量&類&接口 【Kotlin】數字&字符串&數組&集合 【Kotlin】高階函數&Lambda&內聯函數 【Kotlin】表達式&關鍵字 文章目錄 Kotlin_簡介&變量&類&接口Kotlin的特性Kotlin優勢創建Kotlin項目變量變量保存了指向對…

OpenCV種的cv::Mat與Qt種的QImage類型相互轉換

一、首先了解cv::Mat結構體 cv::Mat::step與QImage轉換有著較大的關系。 step的幾個類別區分: step:矩陣第一行元素的字節數step[0]:矩陣第一行元素的字節數step[1]:矩陣中一個元素的字節數step1(0):矩陣中一行有幾個通道數step1(1):一個元素有幾個通道數(channel()) cv::Ma…

搭建基于VsCode的ESP32的開發環境教程

一、VsCode搜索ESP-IDF插件 根據插件處搜索找到ESP-IDF并安裝 安裝完成 二、配置安裝ESP-IDF 配置IDF 按照如下配置&#xff0c;點擊安裝 安裝完成 三、使用案例程序 創建一個閃光燈的例子程序&#xff0c;演示程序編譯下載。 選擇blink例子&#xff0c;閃爍LED的程序 選…

企業培訓學習考試系統源碼 ThinkPHP框架+Uniapp支持多終端適配部署

在數字化轉型浪潮下&#xff0c;企業對高效培訓與精準考核的需求日益迫切。一套功能完備、多終端適配且易于定制的培訓學習考試系統&#xff0c;成為企業提升員工能力、檢驗培訓成果的關鍵工具。本文給大家分享一款基于 ThinkPHP 框架與 Uniapp 開發的企業培訓學習考試系統&…

【PmHub面試篇】PmHub集成Redission分布式鎖保障流程狀態更新面試專題解析

你好&#xff0c;歡迎來到本次關于PmHub整合TransmittableThreadLocal (TTL)緩存用戶數據的面試系列分享。在這篇文章中&#xff0c;我們將深入探討這一技術領域的相關面試題預測。若想對相關內容有更透徹的理解&#xff0c;強烈推薦參考之前發布的博文&#xff1a;【PmHub后端…

mac 設置cursor (像PyCharm一樣展示效果)

一、注冊 Cursor - The AI Code Editor 二、配置Python環境 我之前使用pycharm創建的python項目&#xff0c;以及創建了虛擬環境&#xff0c;現在要使用cursor繼續開發。 2.1 選擇Python 虛擬環境 PyCharm 通常將虛擬環境存儲在項目目錄下的 venv 或 .venv 文件夾中&#xf…

Spring事務失效-----十大常見場景及解決方案全解析

Spring事務失效的常見場景及原因分析 Spring事務管理是開發中的核心功能,但在實際應用中可能因各種原因導致事務失效。以下是常見的事務失效場景及詳細解析: 1. 方法未被Spring管理 場景:使用new關鍵字直接創建對象,而非通過Spring容器注入原因:Spring事務基于AOP代理,…

剛出爐熱乎的。UniApp X 封裝 uni.request

HBuilder X v4.66 當前最新版本 由于 uniapp x 使用的是自己包裝的 ts 語言 uts。目前語言還沒有穩定下來&#xff0c;各種不支持 ts 各種報錯各種不兼容問題。我一個個問題調通的&#xff0c;代碼如下&#xff1a; 封裝方法 // my-app/utils/request.uts const UNI_APP_BASE…

【ArcGIS微課1000例】0148:Geographic Imager6.2使用教程

文章目錄 一、Geographic Imager6.2下載安裝二、Geographic Imager6.2使用方法1. 打開Geographic Imager2. 導入地理影像3. 導入DEM地形渲染4. 設置地理坐標系統5. 進行地理影像的處理6. 導出地理影像一、Geographic Imager6.2下載安裝 在專欄上一篇文章中已經詳細講述了Geogr…

零基礎安裝 Python 教程:從下載到環境配置一步到位(支持 VSCode 和 PyCharm)與常用操作系統操作指南

零基礎安裝 Python 教程&#xff1a;從下載到環境配置一步到位&#xff08;支持 VSCode 和 PyCharm&#xff09;與常用操作系統操作指南 本文是一篇超詳細“Python安裝教程”&#xff0c;覆蓋Windows、macOS、Linux三大操作系統的Python安裝方法與環境配置&#xff0c;包括Pyt…

定時任務的 cron 表達式

定時任務的 cron 表達式 一、什么時 cron 表達式 Cron表達式是一種廣泛應用于Linux系統的時間表示格式&#xff0c;常用于定時任務的調度。Cron表達式可以通過指定不同的時間參數&#xff0c;描述一個在 未來某個時間點執行的任務。 二、Cron表達式語法 秒 分 時 日 月 周幾…

PHP+mysql 美容美發預約小程序源碼 支持DIY裝修+完整圖文搭建教程

在數字化浪潮席卷的當下&#xff0c;美容美發行業也急需線上轉型&#xff0c;以提升客戶預約效率與服務體驗。開發一款美容美發預約小程序成為眾多商家的迫切需求。本文將為大家分享一套基于 PHPMySQL 的美容美發預約小程序源碼&#xff0c;功能完備、支持 DIY 裝修&#xff0c…

十八、【用戶認證篇】安全第一步:基于 JWT 的前后端分離認證方案

【用戶認證篇】安全第一步:基于 JWT 的前后端分離認證方案 前言什么是 JWT (JSON Web Token)?準備工作第一部分:后端 Django 配置 JWT 認證1. 安裝 `djangorestframework-simplejwt`2. 在 `settings.py` 中配置 `djangorestframework-simplejwt`3. 在項目的 `urls.py` 中添加…

03 Deep learning神經網絡的編程基礎 代價函數(Cost function)--吳恩達

深度學習中的損失函數(Cost Function)用于量化模型預測與真實數據的差距,是優化神經網絡的核心指標。以下是常見類型及數學表達: 核心原理 邏輯回歸通過sigmoid函數將線性預測結果轉換為概率: y ^ ( i ) \hat{y}^{(i)}

Linux信號捕捉技術深度解析

根據您的需求&#xff0c;文章可以聚焦技術實現與實踐的結合&#xff0c;以下提供幾個標題方案供選擇&#xff1a; 方案一&#xff08;學術向標題&#xff09; 《Linux信號捕捉機制全解析&#xff1a;內核態捕獲原理、可重入函數實踐與SIGCHLD異步處理中的volatile陷阱》 方案…