這裏記錄幾個Linux效能分析命令(不含每項參數的說明),方便生產環境出問題快速排查(有時候命令總是忘);
ps命令用於檢視進程的執行狀態;
常用方式:
ps -ef | grep java 檢視java服務的詳細資訊;
ps -aux --sort -pcpu | less 根據 CPU 佔用量降序排序;
ps -aux --sort -pcpu,+pmem | head -n 10 按CPU降序,記憶體升序排序,並只展示前10行;
ps -axjf 或者 pstree 按樹狀展示進程;
用於顯示網路介面的很多統計資訊
netstat -i 顯示網絡卡列表
netstat -an | grep xxx | wc -l 檢視某個/特定ip的連線數
netstat -an | grep ESTABLISHED |wc -l 檢視建立正常連線數量
netstat -nat |awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn 檢視每個ip跟伺服器建立的連線數
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20 查詢較多time_wait連netstat -nap | grep pid號 根據進程pid查埠
netstat -nap | grep port號 根據埠port查進程 或者 lsof -i:埠號
top命令用於監控Linux的系統狀況,比如cpu、記憶體的使用,動態檢視進程變化,監控linux的系統狀況
top 然後輸入M 根據佔用記憶體大小進行排序,降序排序
top 然後輸入P 根據CPU使用百分比大小進行排序
這裏順序記錄一下load average
第一行有load average的資訊:系統負載,即任務佇列的平均長度。三個數值分別爲 1分鐘、5分鐘、15分鐘前到現在的平均值,也可以使用uptime檢視該值;
df -h 檢視根目錄磁碟使用情況;
du -sh 目錄 檢視某目錄的佔用大小;
free -h 檢視記憶體的使用情況;
iostat
device:磁碟名稱
tps:每秒鐘發送到的I/O請求數.
Blk_read/s:每秒讀取的block數.
Blk_wrtn/s:每秒寫入的block數.
Blk_read:讀入的block總數.
Blk_wrtn:寫入的block總數.
傳輸的方向:比如src 192.168.1.1說明數據包源地址是192.168.1.1,dst 192.168.1.2指明目的網路地址是192.168.1.2,預設是監控主機對主機的src和dst,即預設監聽本機和目標主機的所有數據。
tcpdump -i eth0 監聽eth0網絡卡的所有流量
tcpdump -i eth0 host 192.168.1.1 捕獲主機192.168.1.1經過本機網絡卡eth0的所有數據包
tcpdump host 192.168.1.1 and \( 192.168.1.2 or 192.168.1.3 \) #捕獲主機A(B/C)
tcpdump -i eth0 src host1 捕獲源主機host1發送的所有的經過eth0網絡卡的所有數據包
tcpdump -i eth0 dst host www.baidu.com 捕獲所有發送到主機www.baidu.com的數據包
tcpdump tcp port 22 and host 192.168.1.1 捕獲主機192.168.1.1接收和發出的tcp協定的ssh的數據包:
tcpdump udp port 53 監聽本機udp的53埠的數據包,udp是dns協定的埠
tcpdump -i eth0 -w file.cap host 192.168.1.1 and tcp port 8081 儲存到file.cap,下載到本地通過Wireshark進行分析
1.通過top查出佔用最高進程 top ,按P按CPU排序
2.佔用過高的應用是java程式通過jps查詢出來
ps -ef|grep 31552
jps -l | grep 31552
3.根據pid查詢出全部執行緒資訊
ps -mp 31552 -o THREAD,tid,time | sort -k 2 -r
-k:按哪列排序;
-r:預設升序,-r降序;
假如是這條執行緒佔用CPU過高 31552 並將它轉16進位制(小寫)=7b40
jstack 31552 | grep 7b40 -A60
-A60 顯示前60行;
通過上述方式,可以很快的定位到佔用CPU的執行緒及程式碼具體位置,方便排查程式碼問題;