阿里開源 java 專案記憶體監控工具 arthas
介紹
Arthas(阿爾薩斯)是阿里巴巴開源的 Java 診斷工具,實現了 jvm 自帶的幾乎所有診斷功能,深受 jvm 分析人員喜愛。
安裝
因為這個工具是 jar 檔案,需要有 Java 執行環境,所以請先確保系統安裝了 jre 或 JDK
# 檢測環境 java -version # 顯示類似如下,說明已經擁有java執行環境; # 如果報錯,請先安裝或檢查jre\jdk是否安裝且配置環境變數 openjdk version "1.8.0_252" OpenJDK Runtime Environment (build 1.8.0_252-b09) OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
# linux系統 # 下載jar包 curl -O https://arthas.aliyun.com/arthas-boot.jar # 執行監控 java -jar arthas-boot.jar # 獲取工具幫助 java -jar arthas-boot.jar -h [INFO] arthas-boot version: 3.3.9 Usage: arthas-boot [-h] [--target-ip <value>] [--telnet-port <value>] [--http-port <value>] [--session-timeout <value>] [--arthas-home <value>] [--use-version <value>] [--repo-mirror <value>] [--versions] [--use-http] [--attach-only] [-c <value>] [-f <value>] [--height <value>] [--width <value>] [-v] [--tunnel-server <value>] [--agent-id <value>] [--stat-url <value>] [--select <value>] [pid] Bootstrap Arthas EXAMPLES: java -jar arthas-boot.jar <pid> java -jar arthas-boot.jar --target-ip 0.0.0.0 java -jar arthas-boot.jar --telnet-port 9999 --http-port -1 java -jar arthas-boot.jar --tunnel-server 'ws://192.168.10.11:7777/ws' java -jar arthas-boot.jar --tunnel-server 'ws://192.168.10.11:7777/ws' --agent-id bvDOe8XbTM2pQWjF4cfw java -jar arthas-boot.jar --stat-url 'http://192.168.10.11:8080/api/stat' java -jar arthas-boot.jar -c 'sysprop; thread' <pid> java -jar arthas-boot.jar -f batch.as <pid> java -jar arthas-boot.jar --use-version 3.3.9 java -jar arthas-boot.jar --versions java -jar arthas-boot.jar --select arthas-demo java -jar arthas-boot.jar --session-timeout 3600 java -jar arthas-boot.jar --attach-only java -jar arthas-boot.jar --repo-mirror aliyun --use-http WIKI: https://arthas.aliyun.com/doc Options and Arguments: -h,--help Print usage --target-ip <value> The target jvm listen ip, default 127.0.0.1 --telnet-port <value> The target jvm listen telnet port, default 3658 --http-port <value> The target jvm listen http port, default 8563 --session-timeout <value> The session timeout seconds, default 1800 (30min) --arthas-home <value> The arthas home --use-version <value> Use special version arthas --repo-mirror <value> Use special remote repository mirror, value is center/aliyun or http repo url. --versions List local and remote arthas versions --use-http Enforce use http to download, default use https --attach-only Attach target process only, do not connect -c,--command <value> Command to execute, multiple commands separated by ; -f,--batch-file <value> The batch file to execute --height <value> arthas-client terminal height --width <value> arthas-client terminal width -v,--verbose Verbose, print debug info. --tunnel-server <value> The tunnel server url --agent-id <value> The agent id register to tunnel server --stat-url <value> The report stat url --select <value> select target process by classname or JARfilename <pid> Target pid
解除安裝: rm -rf ~/.arthas/
監控 Java 程式
執行 java -jar arthas-boot.jar
如果當前系統有多個 Java 服務,則會顯示多個程式 id,選擇你要監控的服務 id,輸入前面中括號中的數值
想要檢視當前系統,是否有 Java 服務,可以執行:
ps -ef |grep java
或者jps
如果有返回,則說明當前系統有 Java 服務正在執行也可以先找到系統的 Java 服務程式 id,然後直接執行:
java -jar arthas-boot.jar java程式id
進入了 arthas 執行模式
檢視當前程式資訊
執行 dashboard
, 結束檢視,按 ctrl + c
- 執行緒相關
- ID 執行緒 ID,這個 id 與 jstack 中的 nativeID 不同
- NAME 執行緒名
GROUP 執行緒組名 - PRIORITY 優先順序,越大表示優先順序越高
- STATE 執行緒狀態
- %CPU CPU 消耗比,
- TIME 總執行時長
- INTERRUPTED 中斷狀態
- DAEMON 是否為守護程式
- 記憶體相關
- heap 堆
- eden_space 伊甸園區間
- survivor_space 倖存者區間
- tenured_gen
- nonheap
- code_cache 程式碼快取區
- metaspace
- GC 回收
- gc.ps_scavenge.count
- gc.ps_scavenge.time(ms)
- gc.ps_marksweep.count
- gc.ps_marksweep.time(ms)
- Puntime
- os.name
- os.version
- java.version
- java.home
- systemload.average
- processors
- uptime
獲取命令幫助
執行 dashboard -h
-i 更新資料間隔時長,單位毫秒,預設間隔時長為 5 秒
-n 根據間隔時長,獲取資料,總共獲取的次數
arthas 中,所有命令都可以用 -h 引數,獲取命令的幫助資訊
其他常用命令
- thread 顯示執行緒資訊和執行緒堆疊資訊
- id 執行緒 id
thread 15
檢視執行緒號為 15 的執行緒資訊
- -n X 指定最忙的前 X 個執行緒,並列印堆疊
thread -n 5
檢視當前最繁忙的前 5 個執行緒
- -b 找出當前阻塞其他執行緒的執行緒
thread -b
檢視當前阻塞的執行緒
- -i X 指定 CPU 佔比統計取樣間隔時長,單位毫秒,預設 5000ms
thread -i 2000
指定取樣間隔時長為 2 秒thread -n 3 -i 2000
指定間隔 2 秒檢視最繁忙的前 3 個執行緒
- --state 檢視指定狀態的執行緒,狀態有:[NEW, TERMINATED, WAITING, RUNNABLE, TIMED_WAITING, BLOCKED]
thread --state RUNNABLE
- id 執行緒 id
- jvm 檢視當前 jvm 資訊
- JVM 引數
- THREAD 執行緒相關
- COUNT JVM 中活躍的執行緒數
- DAEMON-COUNT 當前活躍的守護執行緒數
- PEAK-COUNT 從 JVM 啟動開始曾經活著的最大執行緒數
- STARTED-COUNT 從 JVM 啟動開始總共啟動過的執行緒數
DEADLOCK-COUNT JVM 當前死鎖的執行緒數
- FILE-DESCRIPTOR 檔案相關
- MAX-FILE-DESCRIPTOR-COUNT 最大可以開啟的檔案描述符數
- OPEN-FILE-DESCRIPTOR-COUNT 當前開啟的檔案描述符數
- THREAD 執行緒相關
- sysprop 檢視當前 jvm 的系統屬性 system-property
- sysenv 檢視當前 jvm 的環境屬性 system-environment-variables
- vmoptions 檢視、更新 vm 診斷相關的引數
- perfcounter 檢視當前 jvm 的 perf count 資訊
- logger 檢視 logger 資訊,更新 logger 級別
- mbean 檢視或監控 Mbean 的屬性資訊
- sc 搜尋通過 JVM 載入的類資訊
- sm 搜尋通過 JVM 載入的方法資訊
- dump 已載入類的 bytecode 到特定目錄
- jad 反編譯指定的載入類的原始碼
- trace 方法內部呼叫路徑,並輸出方法路徑上的每個節點上耗時
- stack 輸出當前方法被呼叫的呼叫路徑
- tt 方法執行資料的時空隧道,記錄下指定方法每次呼叫的入參和返回資訊,並能對這些不同的時間下呼叫進行觀測
- profiler 使用 async-profiler 生成火焰圖
- cat 列印檔案內容,和 Linux 裡的 cat 命令類似
- echo 列印引數,和 Linux 裡的 echo 命令類似
- grep 類似傳統的
grep
命令 - pwd 返回當前的工作目錄,和 Linux 命令類似
- options 選項
本文由檸檬班Allen老師原創,轉載需註明出處!
學習資料領取加V:17352871687 (備註知乎)
相關文章
- 記憶體CPU監控記憶體
- RabbitMQ - 記憶體磁碟監控MQ記憶體
- linux安裝Arthas監控java程式LinuxJava
- iOS微信記憶體監控iOS記憶體
- Arthas JVM 監控器JVM
- 帶你上手阿里開源的 Java 診斷利器:Arthas阿里Java
- Android 分割槽和記憶體監控Android記憶體
- luajit表記錄監控(憶一次專案上線中遇到的luajit物件記憶體洩漏)物件記憶體
- 阿里雲容器Kubernetes監控(一)-資源監控阿里
- Flutter 上的記憶體洩漏監控Flutter記憶體
- 雲音樂 Android 記憶體監控探索篇Android記憶體
- 瀏覽器performance工具介紹及記憶體問題表現與監控記憶體的幾種方式瀏覽器ORM記憶體
- [實戰] Flutter 上的記憶體洩漏監控Flutter記憶體
- 目前哪些開源雲監控工具比較好用!
- Java記憶體模型,垃圾回收機制,常用記憶體命令及工具Java記憶體模型
- SpringBoot 監控、專案部署Spring Boot
- 一鍵配置開源伺服器監控工具 NetData伺服器
- java專案cpu或記憶體過高,排查問題思路Java記憶體
- Andriod專案記憶體洩漏流程記憶體
- 2018年阿里巴巴關於Java重要開源專案彙總阿里Java
- 噹噹架構部總監張亮:玩轉Java開源專案架構Java
- Android記憶體洩漏監控和優化技巧總結Android記憶體優化
- 利用 Shell 指令碼來監控 Linux 系統的記憶體指令碼Linux記憶體
- Shell----監控CPU/記憶體/負載高時的程式記憶體負載
- 最新Android開源庫、工具、開源專案整理分享Android
- 網路監控系統七大開源工具分析開源工具
- 一次排查Java專案記憶體洩漏的過程Java記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- 【JVM實戰系列】「監控調優體系」實戰開發arthas-spring-boot-starter監控你的微服務是否健康JVMSpringboot微服務
- 在開源領域,有一些庫和工具專門用於 GPU 監控和管理。以下是幾個常見的開源 GPU 監控庫:GPU
- 開源監控利器Prometheus初探Prometheus
- InfluxDB、Grafana等開源軟體的監控後門UXGrafana
- 專案管理必備——使用燃盡圖監控專案整體進度專案管理
- 一文探討堆外記憶體的監控與回收記憶體
- 在 Node 服務中發生 OOM 時,如何監控記憶體?OOM記憶體
- 用 Bash 指令碼監控 Linux 上的記憶體使用情況指令碼Linux記憶體
- PowerShell 指令碼來監控 CPU、記憶體和磁碟使用情況:指令碼記憶體
- 如何用bash shell 指令碼監控 Linux記憶體、磁碟和 CPU?指令碼Linux記憶體