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


點擊「閱讀原文」查看良許原創(chuàng)精品視頻。
點擊「閱讀原文」查看良許原創(chuàng)精品視頻。
面試官都這么問了,我能說不能嗎?
生產(chǎn)服務(wù)器變慢了,一般都是從這幾點去分析:服務(wù)器整體情況, CPU 使用情況,內(nèi)存,磁盤,磁盤 IO ,網(wǎng)絡(luò) IO
一一來說
top
看服務(wù)器整體使用情況,一般都是 top 命令搞定

我知道當你看到這張圖的時候,肯定有點兒懵,特別是一個個的數(shù)字,這都是個啥?
阿粉帶你一行一行的看
第 1 行:系統(tǒng)時間、運行時間、登錄終端數(shù)、系統(tǒng)負載(三個數(shù)值分別為1分鐘、5分鐘、15分鐘內(nèi)的平均值,數(shù)值越小意味著負載越低)
第 2 行:進程總數(shù)、運行中的進程數(shù)、睡眠中的進程數(shù)、停止的進程數(shù)、僵死的進程數(shù)。一般情況下,只要沒有僵死的進程,就沒啥大問題。
第 3 行:用戶占用資源百分比、系統(tǒng)內(nèi)核占用資源百分比、改變過優(yōu)先級的進程資源百分比、空閑的資源百分比等。
第 4 行:物理內(nèi)存總量、內(nèi)存空閑量、內(nèi)存使用量、作為內(nèi)核緩存的內(nèi)存量
第 5 行:虛擬內(nèi)存總量、虛擬內(nèi)存空閑量、虛擬內(nèi)存使用量、已被提前加載的內(nèi)存量
第 6 行里面主要看 PID 和 COMMAND 這兩個參數(shù),其中 PID 就是進程 ID , COMMAND 就是執(zhí)行的命令,能夠看到比較靠前的兩個進程都是 java 進程
在當前這個界面,按下數(shù)字鍵盤 1 能夠看到各個 CPU 的詳細利用率

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

一般 vmstat 工具的使用是通過兩個數(shù)字參數(shù)來完成的,第一個參數(shù)是采樣的時間間隔,單位是秒,第二個參數(shù)是采樣的次數(shù),阿粉這次的命令是:vmstat -n 3 2意思就是隔 3 秒取樣一次,一共取樣 2 次
其中主要關(guān)注 procs 和 cpu 這兩個參數(shù)
procs :
r :運行和等待 CPU 時間片的進程數(shù),一般來說整個系統(tǒng)的運行隊列不要超過總核數(shù)的 2 倍,要不然系統(tǒng)壓力太大了 b : 等待資源的進程數(shù),比如正在等待磁盤 IO ,網(wǎng)絡(luò) IO 這種
cpu :
us ?:用戶進程消耗 CPU 時間百分比, us 值高的話,說明用戶進程消耗 CPU 時間比較長,如果長期大于 50% 的話,那就說明程序還有需要優(yōu)化的地方 sy :內(nèi)核進程消耗的 CPU 時間百分比 us + sy 參考值為 80% ,如果大于 80% 的話,說明可能存在 CPU 不足
free
查看內(nèi)存情況用的就是 free , 它主要有三個命令:freefree -gfree -m,阿粉是推薦free -m為啥呢,咱們瞅瞅它們各自的運行結(jié)果就知道了

其中:free命令運行結(jié)果顯示的非常不友好,看到 3880324 可以快速告訴我它是多大嗎?free -g這個命令四舍五入了,明明給的內(nèi)存是 4G ,結(jié)果使用free -g一查看,竟然成了 3G ?excuse me ?如果線上環(huán)境出問題了,你說因為內(nèi)存給的不夠,運維說,這鍋我可不背

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

iostat
說到磁盤 IO 相信你一定能夠想到,在對數(shù)據(jù)庫進行操作時,第一要考慮到的就是磁盤 IO 操作,因為相對來說,如果在某個時間段給磁盤進行大量的寫入操作會造成程序等待時間長,導(dǎo)致客戶端那邊好久都沒啥反應(yīng),用戶體驗就降低了嗎
檢查磁盤 IO 情況的命令就是 iostat ,如果你用的時候發(fā)現(xiàn)提示:-bash: iostat: command not found,那是因為沒有安裝 sysstat ,安裝一下就可以了:yum install -y sysstat
接下來運行命令:iostat -xdk 3 2,和vmstat命令很像有沒有~
這么多指標咱們不需要都關(guān)注,只要看其中這幾個就可以了:
rkB/s :每秒讀取數(shù)據(jù)量 kB ; wkB/s :每秒寫入數(shù)據(jù)量 kB ; svctm :I/O 請求的平均服務(wù)時間,單位毫秒; util :一秒中有百分之幾的時間用于 I/O 操作,如果接近 100% 說明磁盤帶寬跑滿了,這個時候就要優(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ù)包
這種方式特別簡單直觀,對新手來說比較容易看到
OK ,下次面試官問你生產(chǎn)服務(wù)器變慢了,你能談?wù)勗\斷思路嗎?咋不能呢,從服務(wù)器整體情況開始說,一直到網(wǎng)絡(luò) IO ,再也不怕和面試官扯皮了
推薦閱讀:
5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機,樹莓派,等等。在公眾號內(nèi)回復(fù)「1024」,即可免費獲?。。?/span>
