【Linux】經常使用命令與服務器異常分析與定位

1、引言

2、經常使用命令

#CentOS安裝系統狀態命令,如下性能指標命令沒有的能夠嘗試安裝
yum install -y sysstat

整機性能指標命令

一、top命令

#查看整機系統性能命令
top -H

# -H 能夠查看由某個進程啓動的全部線程 ,p指定要看的進程
top -Hp 6106

image.png

  • load average:三組數字分別表示爲1分鐘、5分鐘、15分鐘CPU負載的狀況。以一個單核的機器爲例,load=0.5表示CPU還有一半的資源能夠處理其餘的線程請求,load=1表示CPU全部的資源都在處理請求,沒有剩餘的資源能夠利用了,而load=2則表示CPU已經超負荷運做,另外還有一倍的線程正在等待處理。多核處理器中,你的load average不該該高於處理器核心的總數量。

說明:該命令用來從全局的角度查看整機系統性能。java

二、uptime命令

#top命令的簡化版
[root@localhost home]# uptime
 22:43:42 up  1:06,  2 users,  load average: 0.97, 0.74, 0.40

CPU性能指標命令

一、vmstat命令

#每兩秒採樣一次,共採樣3次
[root@localhost home]# vmstat -n 2 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 427172   2116 342488    0    0    23     4  494  564  3  7 91  0  0
 1  0      0 427172   2116 342520    0    0     0    65 4586 4940 20 26 54  0  0
 2  0      0 427172   2116 342524    0    0     0     0 4589 4940 20 25 54  0  0
  • procs
項目 含義
r 運行和等待cpu時間片的進程數,原則上1核的cpu的運行隊列不要超過2,整個系統的運行隊列不要超過總核數的2倍
b 等待資源的進程數,好比正在等待磁盤I/O、網絡I/O等
  • cpu
項目 含義
us 用戶進程消耗cpu時間百分比,us值高,表明用戶進程消耗cpu時間多,若是長期大於50%,須要優化程序
sy 內核進程消耗的cpu時間百分比,us+sy參考值爲80%,超過此閾值代表cpu負荷過大
id 處於空閒的cpu百分比
wa 系統等待IO的cpu時間百分比
st 來自於一個虛擬機竊取的cpu時間百分比

說明:該命令主要用來查看cpu的一些指標(包含但不限於)。ios

二、mpstat(Multiprocessor Statistics)命令

#查看全部cpu核心的信息,2秒採樣一次共三次,-P {|ALL} 表示監控哪一個CPU, cpu在[0,cpu個數-1]中取值
mpstat -P ALL 2 3

image.png

說明:查看全部cpu核信息,其報告與CPU的一些統計信息,這些信息存放在/proc/stat文件中。在多CPUs系統裏,其不但能查看全部CPU的平均情況信息,並且可以查看特定CPU的信息。服務器

三、pidstat命令

#查看cpu的信息,每秒鐘採樣1次共採樣5次,-p指定具體進程編號
pidstat -u 1 5 -p 1796

#查看內存信息,每秒鐘採樣1次共採樣5次,-p指定具體進程編號
pidstat -r 1 5 -p 1796

#查看磁盤信息,每秒鐘採樣1次共採樣5次,-p指定具體進程編號
pidstat -d 1 5 -p 1796

image.png

image.png

image.png

說明:查看某個具體的進程使用cpu的信息。網絡

內存指標命令

一、free命令

#默認單位kb
free

#指定單位mb
free -m

#指定單位gb
free -g

image.png

磁盤指標命令

一、df命令

#查看磁盤剩餘空間
df -h

image.png

IO指標命令

一、iostat命令(磁盤IO)

#查看磁盤IO情況,2秒採樣一次共三次
iostat -xdk 2 3

image.png

項目 含義
rkB/s 每秒讀取數據量kb
wkB/s 每秒寫入數據量kb
svctm IO請求的平均服務時間,單位毫秒
await IO請求的平均等待時間,單位毫秒,值越小越好
util 一秒中有百分之幾的時間用於IO操做,接近100%時,表示磁盤帶寬盤滿,須要優化程序或增長磁盤

說明:rkB/s、wkB/s長期超大的數據讀寫,確定不是正常現象;svctm與await值很接近,表示幾乎沒有IO等待,磁盤性能好,若是await值遠高於svctm的值,表示IO等待時間太長,待優化。性能

一、ifstat命令(網絡IO)

#查看網絡IO情況
ifstat 1

3、服務器異常分析與定位

一、JAVA程序CPU佔用太高的分析思路與定位

製造一個簡單的CPU密集計算的java程序,而後再服務器上跑起來,以此實例來模擬生產環境CPU佔用太高的場景。
image.png優化

#編譯
javac WhileTrueDemo.java -d

#運行示例程序,形成CPU密集計算
nohup java com.jayway.WhileTrueDemo &

具體步驟

  • 先用整機性能命令top找出CPU佔比最好的進程

image.png

說明:經過top命令基本能夠看出PID爲6106的進程CPU佔用過大。spa

  • 利用ps後者jps進一步定位
#採用ps命令進一步查看搞事的java程序
[root@localhost home]# ps -ef | grep java | grep -v grep
root       6106   1460 99 22:09 pts/0    00:52:15 java com.jayway.WhileTrueDemo

#採用java自帶命令查看
[root@localhost home]# jps -l
6106 com.jayway.WhileTrueDemo
6238 sun.tools.jps.Jps
  • 定位到具體線程或者代碼
#-m 顯示全部的線程
#-p pid進程使用CPU的時間
#-o 該參數後是用戶自定義格式
ps -mp 6106 -o THREAD,tid,time

image.png

說明:從上圖可知6107這個線程佔用的CPU最多而且佔用CPU時間也最多,從它下手繼續分析。線程

  • 將須要的線程ID轉換爲16進制英文小寫格式
#轉換線程號6107爲16進制英文小寫,結果爲:17db
printf "%x\n" 6107
  • java程序採用jstack命令查看java堆棧信息,定位具體問題
# 進程號爲6106,查找問題線程號17db(16進制英文小寫)
jstack 6106 | grep 17db -C10

image.png

說明:從上圖就能夠看出WhileTrueDemo文件的第八行代碼是問題的根源。3d

相關文章
相關標籤/搜索