來自公眾號(hào):Java極客技術(shù)
作者鴨血粉絲
面試官都這么問了,我能說不能嗎?
生產(chǎn)服務(wù)器變慢了,一般都是從這幾點(diǎn)去分析:服務(wù)器整體情況, CPU 使用情況,內(nèi)存,磁盤,磁盤 IO ,網(wǎng)絡(luò) IO
一一來說
top
看服務(wù)器整體使用情況,一般都是 top 命令搞定
我知道當(dāng)你看到這張圖的時(shí)候,肯定有點(diǎn)兒懵,特別是一個(gè)個(gè)的數(shù)字,這都是個(gè)啥?
阿粉帶你一行一行的看
第 1 行:系統(tǒng)時(shí)間、運(yùn)行時(shí)間、登錄終端數(shù)、系統(tǒng)負(fù)載(三個(gè)數(shù)值分別為1分鐘、5分鐘、15分鐘內(nèi)的平均值,數(shù)值越小意味著負(fù)載越低)
第 2 行:進(jìn)程總數(shù)、運(yùn)行中的進(jìn)程數(shù)、睡眠中的進(jìn)程數(shù)、停止的進(jìn)程數(shù)、僵死的進(jìn)程數(shù)。一般情況下,只要沒有僵死的進(jìn)程,就沒啥大問題。
第 3 行:用戶占用資源百分比、系統(tǒng)內(nèi)核占用資源百分比、改變過優(yōu)先級(jí)的進(jìn)程資源百分比、空閑的資源百分比等。
第 4 行:物理內(nèi)存總量、內(nèi)存空閑量、內(nèi)存使用量、作為內(nèi)核緩存的內(nèi)存量
第 5 行:虛擬內(nèi)存總量、虛擬內(nèi)存空閑量、虛擬內(nèi)存使用量、已被提前加載的內(nèi)存量
第 6 行里面主要看 PID 和 COMMAND 這兩個(gè)參數(shù),其中 PID 就是進(jìn)程 ID , COMMAND 就是執(zhí)行的命令,能夠看到比較靠前的兩個(gè)進(jìn)程都是 java 進(jìn)程
在當(dāng)前這個(gè)界面,按下數(shù)字鍵盤 1 能夠看到各個(gè) CPU 的詳細(xì)利用率
vmstat
想要了解 CPU 使用情況的話,常用的命令就是 vmstat 。
一般 vmstat 工具的使用是通過兩個(gè)數(shù)字參數(shù)來完成的,第一個(gè)參數(shù)是采樣的時(shí)間間隔,單位是秒,第二個(gè)參數(shù)是采樣的次數(shù),阿粉這次的命令是:vmstat -n 3 2 意思就是隔 3 秒取樣一次,一共取樣 2 次
其中主要關(guān)注 procs 和 cpu 這兩個(gè)參數(shù)
procs :
- r :運(yùn)行和等待 CPU 時(shí)間片的進(jìn)程數(shù),一般來說整個(gè)系統(tǒng)的運(yùn)行隊(duì)列不要超過總核數(shù)的 2 倍,要不然系統(tǒng)壓力太大了
- b : 等待資源的進(jìn)程數(shù),比如正在等待磁盤 IO ,網(wǎng)絡(luò) IO 這種
cpu :
- us :用戶進(jìn)程消耗 CPU 時(shí)間百分比, us 值高的話,說明用戶進(jìn)程消耗 CPU 時(shí)間比較長(zhǎng),如果長(zhǎng)期大于 50% 的話,那就說明程序還有需要優(yōu)化的地方
- sy :內(nèi)核進(jìn)程消耗的 CPU 時(shí)間百分比
- us + sy 參考值為 80% ,如果大于 80% 的話,說明可能存在 CPU 不足
free
查看內(nèi)存情況用的就是 free , 它主要有三個(gè)命令:free free -g free -m ,阿粉是推薦 free -m 為啥呢,咱們瞅瞅它們各自的運(yùn)行結(jié)果就知道了
其中:free 命令運(yùn)行結(jié)果顯示的非常不友好,看到 3880324 可以快速告訴我它是多大嗎?free -g 這個(gè)命令四舍五入了,明明給的內(nèi)存是 4G ,結(jié)果使用 free -g 一查看,竟然成了 3G ?excuse me ?如果線上環(huán)境出問題了,你說因?yàn)閮?nèi)存給的不夠,運(yùn)維說,這鍋我可不背
相對(duì)來說, free -m 是比較容易看,而且結(jié)果也是比較精確的
如果應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存大于 70% 的話,說明內(nèi)存是充足的,沒啥問題,但是如果小于 20% 的話,就要考慮增加內(nèi)存了
df
如果排查磁盤問題的話,首先要看的就是磁盤空間夠不夠,還記得阿粉在上家公司的時(shí)候,用的還是 svn 出現(xiàn)了一個(gè)很神奇的問題,就是哪里都不報(bào)錯(cuò),就是提交不上代碼,排查到最后是磁盤空間不夠...
所以別問阿粉為啥排查磁盤問題時(shí),第一就是看磁盤空間夠不夠?。?!
查看磁盤空間就是 df 或者 df -h 這兩個(gè)命令了
iostat
說到磁盤 IO 相信你一定能夠想到,在對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作時(shí),第一要考慮到的就是磁盤 IO 操作,因?yàn)橄鄬?duì)來說,如果在某個(gè)時(shí)間段給磁盤進(jìn)行大量的寫入操作會(huì)造成程序等待時(shí)間長(zhǎng),導(dǎo)致客戶端那邊好久都沒啥反應(yīng),用戶體驗(yàn)就降低了嗎
檢查磁盤 IO 情況的命令就是 iostat ,如果你用的時(shí)候發(fā)現(xiàn)提示:-bash: iostat: command not found ,那是因?yàn)闆]有安裝 sysstat ,安裝一下就可以了:yum install -y sysstat
接下來運(yùn)行命令:iostat -xdk 3 2 ,和 vmstat 命令很像有沒有~
這么多指標(biāo)咱們不需要都關(guān)注,只要看其中這幾個(gè)就可以了:
- rkB/s :每秒讀取數(shù)據(jù)量 kB ;
- wkB/s :每秒寫入數(shù)據(jù)量 kB ;
- svctm :I/O 請(qǐng)求的平均服務(wù)時(shí)間,單位毫秒;
- util :一秒中有百分之幾的時(shí)間用于 I/O 操作,如果接近 100% 說明磁盤帶寬跑滿了,這個(gè)時(shí)候就要優(yōu)化程序或者增加磁盤了
sar
網(wǎng)絡(luò) IO 的話,可以通過 sar -n DEV 3 2 這條命令來看,和上面的差不多,意思就是每隔 3 秒取樣一次,一共取樣 2 次。
其中:
- IFACE :LAN 接口
- rxpck/s :每秒鐘接收的數(shù)據(jù)包
- txpck/s :每秒鐘發(fā)送的數(shù)據(jù)包
- rxKB/s :每秒接收的數(shù)據(jù)量,單位 KByte
- txKB/s :每秒發(fā)出的數(shù)據(jù)量,單位 KByte
- rxcmp/s :每秒鐘接收的壓縮數(shù)據(jù)包
- txcmp/s :每秒鐘發(fā)送的壓縮數(shù)據(jù)包
- rxmcst/s:每秒鐘接收的多播數(shù)據(jù)包
這種方式特別簡(jiǎn)單直觀,對(duì)新手來說比較容易看到
OK ,下次面試官問你生產(chǎn)服務(wù)器變慢了,你能談?wù)勗\斷思路嗎?咋不能呢,從服務(wù)器整體情況開始說,一直到網(wǎng)絡(luò) IO ,再也不怕和面試官扯皮了