java大廠面試題整理(九)生產環境linux幾個常用命令

這篇很雜,是幾個問題整理在一起了。下面簡單的一個個說一下。

生產環境服務器變慢了,診斷思路是什麼?

其實服務器變慢的原因是很多的,所以要一點點排查。主要是分了下面幾個方面:

  • 整機
    linux命令:top可以查看當前電腦的進程cpu消耗情況,
    其中有個load average後面有三個值,如果三個值相加/3大於0.6.說明系統壓力過大。
    top還有個精簡版的命令:uptime。就可以查看這三個值。
  • CPU
    linux命令:vmstat可以按照給定時間間隔採樣。例如:;vmstat -n 2 3
    上面的命令意思是:每個兩秒採樣一次,共採樣三次。

    這個命令不僅僅可以查看cpu,主要是爲了查看cpu而已,但是也還有一些別的參數。簡單說下參數的意思:
    procs中:
    r:運行和等待cpu時間片的進程數。原則上整個系統的運行隊列不能超過總和數的2倍。否則代表系統壓力過大。
    b:等待資源的進程數,比如正在等待磁盤i/o,網絡i/o等。
    cpu中:
    us:用戶進程消耗cpu時間的百分比。us值高,用戶消耗cpu時間多,如果長期大於百分之五十則需要優化。
    sy:內核進程消耗cpu時間百分比。
    us+sy如果大於百分之八十,說明可能存在cpu不足。
    id:處於空閒的cpu百分比。
    wa:系統等待io的cpu時間百分比。
  • 內存
    linux查看內存命令:free。後面可以用-x指定單位。
  • 硬盤
    linux命令:df。查看磁盤剩餘空間數。
  • 磁盤IO
    linux查看命令:iostat
    這裏參數比較多,簡單介紹下:
    rkB/s:每秒讀取數據量kb
    wkB/s: 每秒寫入數據量kb
    svctm:io請求的平均服務時間,單位毫秒
    await:io請求的平均等待時間,單位毫秒。值越小性能越好。
    util:一秒鐘有百分之幾的時間用於io操作。接近百分百時,說明磁盤帶寬跑滿,需要優化程序或者增加磁盤。
    rkB和wkB根據系統應用不同會有不同的值,但如果長期超大數據讀寫,說明不正常,需要優化程序。
    svctm和await的值越接近,說明幾乎沒有io等待,磁盤性能好。
    如果await遠高於svctm說明io隊列等待v太長。需要優化。

CPU佔用過高定位,分析思路

基本上簡單的查看定位性能問題就是如上查看,看哪個值有問題再着重解決。比如說io,內存和硬盤這些問題,io的話調整代碼。沒啥好解決的辦法。而內存硬盤不行就換大一點的。畢竟現在成本也便宜。這裏操作性比較大的是cpu佔用過高的解決思路。下面簡單說下定位CPU佔用過高的步驟。

  1. 先用top命令找出cpu佔比最高的。
  2. ps -ef|grep java|grep -v grep 或者jps -l進一步定位。得知是一個怎樣的後臺程序佔cpu過高。
  3. 定位到具體的線程或者代碼 ps -mp 進程號 -o THREAD,tid,time

    這個命令中:
  • -m是顯示所有的線程
  • -p pid進程使用cpu時間
  • -o 該參數後是用戶的自定義輸出格式
  1. 將需要的線程id轉化成16進制格式(英文小寫格式)
  2. 用jstack 進程號|grep 線程id(16進制的) -A60。

本篇筆記就到這裏了,因爲我看的教材少了一集,感覺錯過了很多東西。。所以就這麼虎頭蛇尾的結束了。如果稍微幫到你了記得點個喜歡點個關注,也祝大家工作順順利利!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章