在平時的開發當中總難免會遇到各種各樣的問題,比如說記憶體洩漏、死鎖、CPU占用過高,伺服器記憶體使用異常等。
jvm中自帶了jsp,jcmd,jstat,jinfo等一些常用控制的指令工具。還包括一些JConsole,Jvisualvm,包括網上封裝的一些腳本等強大的工具。
還有對jvm記憶體檔案分析工具MAT,在平時運用中,可以幫助我們快速定位問題。(具體可以參照https://arthas.aliyun.com/doc/)
Arthas 是Alibaba開源的Java診斷工具,采用指令行互動模式,是排查jvm相關問題的利器。
列舉一下它能做的一些事情:
提供性能看闆,包括線程、cpu、記憶體等資訊,并且會定時的重新整理。
根據各種條件檢視線程快照。比如找出cpu占用率最高的n個線程等
輸出jvm的各種資訊,如gc算法、jdk版本、ClassPath等
檢視/設定sysprop和sysenv
檢視某個類的靜态屬性,也可以通過ognl文法執行一些語句
檢視已加載的類的詳細資訊,比如這個類從哪個jar包加載的。也可以檢視類的方法的資訊
dump某個類的位元組碼到指定目錄
直接反編譯指定的類
檢視類加載器的一些資訊
可以讓jvm重新加載某個類
監控方法的執行,同時可以擷取到執行的入參、出參以及抛出的異常
追蹤方法執行的調用棧,以及各個方法的調用時間
針對上面的一些描述的功能,非常的強大,對現在一些零碎的指令作的一個內建工具,不需要到處切換使用。
1.jvm相關的一些指令
dashboard——目前系統的實時資料面闆
thread——檢視目前 JVM 的線程堆棧資訊
jvm——檢視目前 JVM 的資訊
sysprop——檢視和修改 JVM 的系統屬性
sysenv——檢視 JVM 的環境變量
getstatic——檢視類的靜态屬性
ognl——執行 ognl 表達式
mbean——檢視 Mbean 的資訊
2.class/classloader相關
sc——檢視 JVM 已加載的類資訊
sm——檢視已加載類的方法資訊
jad——反編譯指定已加載類的源碼
mc——記憶體編繹器,記憶體編繹 .java 檔案為 .class 檔案
redefine——加載外部的 .class 檔案,redefine 到 JVM 裡
dump——dump 已加載類的 byte code 到特定目錄
classloader——檢視 classloader 的繼承樹,urls,類加載資訊,使用 classloader 去 getResource
3.monitor/watch/trace 相關
monitor——方法執行監控
watch——方法執行資料觀測
trace——方法内部調用路徑,并輸出方法路徑上的每個節點上耗時
stack——輸出目前方法被調用的調用路徑
tt——方法執行資料的時空隧道,記錄下指定方法每次調用的入參和傳回資訊,并能對這些不同的時間下調用進行觀測
4.還包括一些基礎指令
help——檢視指令幫助資訊
cat——列印檔案内容,和 linux 裡的 cat 指令類似
pwd——傳回目前的工作目錄,和 linux 指令類似
cls——清空目前螢幕區域
session——檢視目前會話的資訊
reset——重置增強類,将被 Arthas 增強過的類全部還原,Arthas 服務端關閉時會重置所有增強過的類
version——輸出目前目标 Java 程序所加載的 Arthas 版本号
history——列印指令曆史
quit——退出目前 Arthas 用戶端,其他 Arthas 用戶端不受影響
shutdown——關閉 Arthas 服務端,所有 Arthas 用戶端全部退出
linux伺服器中一些常用性能檢視工具
free 檢視記憶體使用情況,包括實體記憶體和虛拟記憶體 free -h或free -m
vmstat 對系統的整體情況進行統計,包括核心程序、虛拟記憶體、磁盤、陷阱和 CPU 活動的統計資訊 vmstat 2 100
top 實時顯示系統中各個程序的資源占用狀況及總體狀況 top
mpstat 實時系統監控工具,它會報告與CPU相關的統計資訊 mpstat
sar 收集、報告和儲存CPU、記憶體、輸入輸出端口使用情況 sar -n DEV 3 100
netstat 檢驗本機各端口的網絡連接配接情況,用于顯示與IP、TCP、UDP和ICMP協定相關的統計資料 netstat -a
tcpdump 用于捕捉或者過濾網絡上指定接口上接收或者傳輸的TCP/IP包 tcpdump -i eth0 -c 3
IPTraf 用來生成包括TCP資訊、UDP計數、ICMP和OSPF資訊、以太網負載資訊、節點狀态資訊、IP校驗和錯誤等等統計資料 iptraf
df 檢查linux的檔案系統的磁盤空間占用情況 df -h
iostat 收集顯示系統儲存設備輸入和輸出狀态統計 iostat -x -k 2 100
iotop 用來監視磁盤I/O使用狀況的top類工具 iotop
lsof 用于以清單的形式顯示所有打開的檔案和程序 lsof
atop 顯示的是各種系統資源(CPU, memory, network, I/O, kernel)的綜合,并且在高負載的情況下進行了彩色标注 atop
htop 它和top指令十分相似,進階的互動式的實時linux程序監控工具 htop
ps 最基本同時也是非常強大的程序檢視指令 ps aux
dstat 全能系統資訊統計工具,可用于替換vmstat、iostat、netstat、nfsstat和ifstat這些指令的工具 dstat
uptime 用于檢視伺服器運作了多長時間以及有多少個使用者登入,快速獲知伺服器的負荷情況 uptime
dmesg 主要用來顯示核心資訊。使用dmesg可以有效診斷機器硬體故障或者新增硬體出現的問題。 dmesg
mpstat 用于報告多路CPU主機的每顆CPU活動情況,以及整個主機的CPU情況。 mpstat 2 3
mytop 用于監控 mysql 的線程和性能。它能讓你實時檢視資料庫以及正在處理哪些查詢。 mytop
iftop 用來監控網卡的實時流量(可以指定網段)、反向解析IP、顯示端口資訊等 iftop
jnettop 以相同的方式來監測網絡流量但比 iftop 更形象。它還支援自定義的文本輸出,并能以友好的互動方式來深度分析日志。 jnettop
ngrep 網絡層的 grep。它使用 pcap ,允許通過指定擴充正規表達式或十六進制表達式來比對資料包。 ngrep
nmap 可以掃描你伺服器開放的端口并且可以檢測正在使用哪個作業系統 nmap
du 檢視Linux系統中某目錄的大小 du -sh 目錄名
fdisk 檢視硬碟及分區資訊 fdisk -l
一般用的都是linux伺服器,配合一些伺服器中的指令或者是封裝好的腳本可以幫助我們快速了解整個服務運作狀态。雖然現在比如springboot,springcloud
有許多監控的工具包(actuator ,admin),或者雲伺服器自帶的一些功能,或者網上封裝的一些腳本監控工具等為我們提供了很大的便利,
但掌握伺服器這些基本工具的使用會讓我們更好地定位問題