<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2598字,需瀏覽 6分鐘

           ·

          2020-08-12 14:28


          每天早上七點(diǎn)三十,準(zhǔn)時(shí)推送干貨


          面試官都這么問(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 命令搞定

          img

          我知道當(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é)果就知道了

          img

          其中: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)方案!

          2.?一個(gè)空格引發(fā)的“慘案“

          3.?大型網(wǎng)站架構(gòu)演化發(fā)展歷程

          4.?Java語(yǔ)言“坑爹”排行榜TOP 10

          5. 我是一個(gè)Java類(lèi)(附帶精彩吐槽)

          6. 看完這篇Redis緩存三大問(wèn)題,保你能和面試官互扯

          7. 程序員必知的 89 個(gè)操作系統(tǒng)核心概念

          8. 深入理解 MySQL:快速學(xué)會(huì)分析SQL執(zhí)行效率

          9. API 接口設(shè)計(jì)規(guī)范

          10. Spring Boot 面試,一個(gè)問(wèn)題就干趴下了!



          掃碼二維碼關(guān)注我


          ·end·

          —如果本文有幫助,請(qǐng)分享到朋友圈吧—

          我們一起愉快的玩耍!



          你點(diǎn)的每個(gè)贊,我都認(rèn)真當(dāng)成了喜歡

          瀏覽 51
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲AV无码成人精品区在线欢看 | 午夜在线免费视频 | 一级A片电影A片录像 | 日本不卡一区在线 | 夜色大香蕉视频网 |