面試官:生產(chǎn)服務(wù)器變慢了,你能談?wù)勗\斷思路嗎
面試官都這么問(wèn)了,我能說(shuō)不能嗎?
生產(chǎn)服務(wù)器變慢了,一般都是從這幾點(diǎn)去分析:服務(wù)器整體情況, CPU 使用情況,內(nèi)存,磁盤(pán),磁盤(pán) IO ,網(wǎng)絡(luò) IO
一一來(lái)說(shuō)
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ù)。一般情況下,只要沒(méi)有僵死的進(jìn)程,就沒(méi)啥大問(wèn)題。
第 3 行:用戶(hù)占用資源百分比、系統(tǒng)內(nèi)核占用資源百分比、改變過(guò)優(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ù)字鍵盤(pán) 1 能夠看到各個(gè) CPU 的詳細(xì)利用率

vmstat
想要了解 CPU 使用情況的話,常用的命令就是 vmstat 。

一般 vmstat 工具的使用是通過(guò)兩個(gè)數(shù)字參數(shù)來(lái)完成的,第一個(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ù),一般來(lái)說(shuō)整個(gè)系統(tǒng)的運(yùn)行隊(duì)列不要超過(guò)總核數(shù)的 2 倍,要不然系統(tǒng)壓力太大了 b : 等待資源的進(jìn)程數(shù),比如正在等待磁盤(pán) IO ,網(wǎng)絡(luò) IO 這種
cpu :
us ?:用戶(hù)進(jìn)程消耗 CPU 時(shí)間百分比, us 值高的話,說(shuō)明用戶(hù)進(jìn)程消耗 CPU 時(shí)間比較長(zhǎng),如果長(zhǎng)期大于 50% 的話,那就說(shuō)明程序還有需要優(yōu)化的地方 sy :內(nèi)核進(jìn)程消耗的 CPU 時(shí)間百分比 us + sy 參考值為 80% ,如果大于 80% 的話,說(shuō)明可能存在 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)境出問(wèn)題了,你說(shuō)因?yàn)閮?nèi)存給的不夠,運(yùn)維說(shuō),這鍋我可不背

相對(duì)來(lái)說(shuō), free -m 是比較容易看,而且結(jié)果也是比較精確的
如果應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存大于 70% 的話,說(shuō)明內(nèi)存是充足的,沒(méi)啥問(wèn)題,但是如果小于 20% 的話,就要考慮增加內(nèi)存了
df
如果排查磁盤(pán)問(wèn)題的話,首先要看的就是磁盤(pán)空間夠不夠,還記得阿粉在上家公司的時(shí)候,用的還是 svn 出現(xiàn)了一個(gè)很神奇的問(wèn)題,就是哪里都不報(bào)錯(cuò),就是提交不上代碼,排查到最后是磁盤(pán)空間不夠...
所以別問(wèn)阿粉為啥排查磁盤(pán)問(wèn)題時(shí),第一就是看磁盤(pán)空間夠不夠?。?!
查看磁盤(pán)空間就是 df 或者 df -h 這兩個(gè)命令了

iostat
說(shuō)到磁盤(pán) IO 相信你一定能夠想到,在對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作時(shí),第一要考慮到的就是磁盤(pán) IO 操作,因?yàn)橄鄬?duì)來(lái)說(shuō),如果在某個(gè)時(shí)間段給磁盤(pán)進(jìn)行大量的寫(xiě)入操作會(huì)造成程序等待時(shí)間長(zhǎng),導(dǎo)致客戶(hù)端那邊好久都沒(méi)啥反應(yīng),用戶(hù)體驗(yàn)就降低了嗎
檢查磁盤(pán) IO 情況的命令就是 iostat ,如果你用的時(shí)候發(fā)現(xiàn)提示:-bash: iostat: command not found ,那是因?yàn)闆](méi)有安裝 sysstat ,安裝一下就可以了:yum install -y sysstat
接下來(lái)運(yùn)行命令:iostat -xdk 3 2 ,和 vmstat 命令很像有沒(méi)有~

這么多指標(biāo)咱們不需要都關(guān)注,只要看其中這幾個(gè)就可以了:
rkB/s :每秒讀取數(shù)據(jù)量 kB ; wkB/s :每秒寫(xiě)入數(shù)據(jù)量 kB ; svctm :I/O 請(qǐng)求的平均服務(wù)時(shí)間,單位毫秒; util :一秒中有百分之幾的時(shí)間用于 I/O 操作,如果接近 100% 說(shuō)明磁盤(pán)帶寬跑滿(mǎn)了,這個(gè)時(shí)候就要優(yōu)化程序或者增加磁盤(pán)了
sar
網(wǎng)絡(luò) IO 的話,可以通過(guò) sar -n DEV 3 2 這條命令來(lái)看,和上面的差不多,意思就是每隔 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ì)新手來(lái)說(shuō)比較容易看到
OK ,下次面試官問(wèn)你生產(chǎn)服務(wù)器變慢了,你能談?wù)勗\斷思路嗎?咋不能呢,從服務(wù)器整體情況開(kāi)始說(shuō),一直到網(wǎng)絡(luò) IO ,再也不怕和面試官扯皮了

< END >

1.?人人都能看懂的 6 種限流實(shí)現(xiàn)方案!
3.?大型網(wǎng)站架構(gòu)演化發(fā)展歷程
6. 看完這篇Redis緩存三大問(wèn)題,保你能和面試官互扯
7. 程序員必知的 89 個(gè)操作系統(tǒng)核心概念
8. 深入理解 MySQL:快速學(xué)會(huì)分析SQL執(zhí)行效率
10. Spring Boot 面試,一個(gè)問(wèn)題就干趴下了!

掃碼二維碼關(guān)注我
·end·
—如果本文有幫助,請(qǐng)分享到朋友圈吧—
我們一起愉快的玩耍!

