做者 | 李昊(能夠養肥)java
【Arthas 官方社區正在舉行徵文活動,參加即有獎品拿~點擊投稿】linux
13:40 收到咱們的生產環境服務器綠版 CUP 超負載告警通知。服務器
此時內心只有一個想法,重啓大法好,立刻登陸服務器,執行 top 發現進程 30247 和 28337 佔用 CPU 爲 200 多和100 多基本佔用了 4 核的 3 核,整個過程大概用時 30 秒,維護羣依然很平靜,運營的電話也沒打過來,這時候我判定,此次問題應該影響面很小,用戶可能也暫時沒有發現,好吧,還有時間作排查。session
java -jar arthas-boot.jar
dashboard
thread 35 thread 12042
UUID.randomUUID()
隨機出一個 10 位的字符池,而後再從這個字符池中隨機須要位數的字符串,若是隨機出來的 10 位字符池中都是字母,則二次隨機時候就會出現死循環,問題代碼以下:public static String getRandomStr(boolean numberFlag, int length) { String retStr = ""; String strTable = numberFlag ? UUID.randomUUID().toString().replaceAll("-", "").substring(0, 10) : "1234567890abcdefghijkmnpqrstuvwxyz"; int len = strTable.length(); boolean bDone = true; do { retStr = ""; int count = 0; for (int i = 0; i < length; i++) { double dblR = Math.random() * len; int intR = (int) Math.floor(dblR); char c = strTable.charAt(intR); if (('0' <= c) && (c <= '9')) { count++; } retStr += strTable.charAt(intR); } if (count >= 2) { bDone = false; } } while (bDone); return retStr; }
UUID.randomUUID()
前十位會出現一次全字母的狀況。curl -O arthas.aliyun.com/arthas-boot…
java -jar arthas-boot.jardom
help——查看命令幫助信息
cat——打印文件內容,和 linux 裏的 cat 命令相似
echo–打印參數,和 linux 裏的 echo 命令相似
grep——匹配查找,和 linux 裏的 grep 命令相似
tee——複製標準輸入到標準輸出和指定的文件,和 linux 裏的 tee 命令相似
pwd——返回當前的工做目錄,和 linux 命令相似
cls——清空當前屏幕區域
session——查看當前會話的信息
reset——重置加強類,將被 Arthas 加強過的類所有還原,Arthas 服務端關閉時會重置全部加強過的類
version——輸出當前目標 Java 進程所加載的 Arthas 版本號
history——打印命令歷史
quit——退出當前 Arthas 客戶端,其餘 Arthas 客戶端不受影響
stop——關閉 Arthas 服務端,全部 Arthas 客戶端所有退出
keymap——Arthas 快捷鍵列表及自定義快捷鍵curl
dashboard——當前系統的實時數據面板
thread——查看當前 JVM 的線程堆棧信息
jvm——查看當前 JVM 的信息
sysprop——查看和修改 JVM 的系統屬性
sysenv——查看 JVM 的環境變量
vmoption——查看和修改 JVM 裏診斷相關的 option
perfcounter——查看當前 JVM 的 Perf Counter 信息
logger——查看和修改 logger
getstatic——查看類的靜態屬性
ognl——執行 ognl 表達式
mbean——查看 Mbean 的信息
heapdump——dump java heap, 相似 jmap 命令的 heap dump 功能jvm
sc——查看 JVM 已加載的類信息
sm——查看已加載類的方法信息
jad——反編譯指定已加載類的源碼
mc——內存編譯器,內存編譯 .java 文件爲 .class 文件
redefine——加載外部的 .class 文件,redefine 到 JVM 裏
dump——dump 已加載類的 byte code 到特定目錄
classloader——查看 classloader 的繼承樹,urls,類加載信息,使用 classloader 去 getResource工具
monitor -c 5 demo.MathGame primeFactors
ui
-c 5 未統計週期默認 120surl
watch demo.MathGame primeFactors 「{params,target,returnObj}」 -x 2 -b -s -n 2
-x 2 輸出結果的屬性遍歷深度
-b 方法調用前
-s 方法返回後
-n 2 執行2次
watch demo.MathGame primeFactors 「{params[0],throwExp}」 -e -x 2
-e表示拋出異常時才觸發
trace demo.MathGame run