面試官:生產(chǎn)服務(wù)器變慢了,你能談?wù)勗\斷思路嗎

來自公眾號(hào):Java極客技術(shù)
作者鴨血粉絲

面試官都這么問了,我能說不能嗎?

生產(chǎn)服務(wù)器變慢了,一般都是從這幾點(diǎn)去分析:服務(wù)器整體情況, CPU 使用情況,內(nèi)存,磁盤,磁盤 IO ,網(wǎng)絡(luò) IO

一一來說

top

看服務(wù)器整體使用情況,一般都是 top 命令搞定

image

我知道當(dāng)你看到這張圖的時(shí)候,肯定有點(diǎn)兒懵,特別是一個(gè)個(gè)的數(shù)字,這都是個(gè)啥?

image

阿粉帶你一行一行的看

第 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ì)利用率

image

vmstat

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

image

一般 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é)果就知道了

image

其中: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)維說,這鍋我可不背

image

相對(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è)命令了

image

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 命令很像有沒有~

image

這么多指標(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 次。

image

其中:

  • 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 ,再也不怕和面試官扯皮了

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容