大數(shù)據(jù)服務上云的思考">大數(shù)據(jù)服務上云的思考
795
2025-03-31
Linux診斷原因
前言
命令集合
整機:top,查看整機系統(tǒng)新能
CPU:vmstat
內(nèi)存:free
硬盤:df
網(wǎng)絡IO:ifstat
生產(chǎn)環(huán)境服務器變慢,診斷思路和性能評估
總結(jié)
前言
在招聘Java開發(fā)工程師的時候,在招聘要求上的最后總會看到熟練使用Linux優(yōu)先等字樣。隨著就業(yè)壓力越來越大,對Java工程師的要求也相對的越來越高。會Linux操作可能成了我們程序員的必備技能。
命令集合
整機:top,查看整機系統(tǒng)新能
使用top命令的話,重點關注的是 %CPU、%MEM 、load average 三個指標
在這個命令下,按1的話,可以看到每個CPU的占用情況
uptime:系統(tǒng)性能命令的精簡版
CPU:vmstat
查看CPU(包含但是不限于)
查看額外
查看所有CPU核信息:mpstat -p ALL 2
每個進程使用CPU的用量分解信息:pidstat -u 1 -p 進程編號
命令格式:vmstat -n 2 3
一般vmstat工具的使用是通過兩個數(shù)字參數(shù)來完成的,第一個參數(shù)是殘陽的時間間隔數(shù)(單位秒),第二個參數(shù)是采樣的次數(shù)
procs
r:運行和等待的CPU時間片的進程數(shù),原則上1核的CPU的運行隊列不要超過2,整個系統(tǒng)的運行隊列不超過總核數(shù)的2倍,否則代表系統(tǒng)壓力過大,我們看蘑菇博客測試服務器,能發(fā)現(xiàn)都超過了2,說明現(xiàn)在壓力過大
b:等待資源的進程數(shù),比如正在等待磁盤I/O、網(wǎng)絡I/O等
cpu
us:用戶進程消耗CPU時間百分比,us值高,用戶進程消耗CPU時間多,如果長期大于50%,優(yōu)化程序
sy:內(nèi)核進程消耗的CPU時間百分比
us + sy 參考值為80%,如果us + sy 大于80%,說明可能存在CPU不足,從上面的圖片可以看出,us + sy還沒有超過百分80,因此說明蘑菇博客的CPU消耗不是很高
id:處于空閑的CPU百分比
wa:系統(tǒng)等待IO的CPU時間百分比
st:來自于一個虛擬機偷取的CPU時間比
內(nèi)存:free
應用程序可用內(nèi)存數(shù):free -m
應用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存 > 70% 內(nèi)存充足
應用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存 < 20% 內(nèi)存不足,需要增加內(nèi)存
20% < 應用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存 < 70%,表示內(nèi)存基本夠用
free -h:以人類能看懂的方式查看物理內(nèi)存
free -m:以MB為單位,查看物理內(nèi)存
free -g:以GB為單位,查看物理內(nèi)存
硬盤:df
格式:df -h / (-h:human,表示以人類能看到的方式換算)
硬盤IO:iostat
系統(tǒng)慢有兩種原因引起的,一個是CPU高,一個是大量IO操作
格式:iostat -xdk 2 3
磁盤塊設備分布:
rkB /s:每秒讀取數(shù)據(jù)量kB;
wkB/s:每秒寫入數(shù)據(jù)量kB;
svctm I/O:請求的平均服務時間,單位毫秒
await I/O:請求的平均等待時間,單位毫秒,值越小,性能越好
util:一秒鐘有百分幾的時間用于I/O操作。接近100%時,表示磁盤帶寬跑滿,需要優(yōu)化程序或者增加磁盤;
rkB/s,wkB/s根據(jù)系統(tǒng)應用不同會有不同的值,但有規(guī)律遵循:長期、超大數(shù)據(jù)讀寫,肯定不正常,需要優(yōu)化程序讀取。
svctm的值與await的值很接近,表示幾乎沒有I/O等待,磁盤性能好,如果await的值遠高于svctm的值,則表示I/O隊列等待太長,需要優(yōu)化程序或更換更快磁盤
網(wǎng)絡IO:ifstat
默認本地沒有,下載ifstat
生產(chǎn)環(huán)境服務器變慢,診斷思路和性能評估
記一次印象深刻的故障?
結(jié)合Linux 和 JDK命令一起分析,步驟如下
使用top命令找出CPU占比最高的
ps -ef 或者 jps 進一步定位,得知是一個怎么樣的后臺程序出的問題
定位到具體線程或者代碼
ps -mp 進程 -o THREAD,tid,time
參數(shù)解釋
-m:顯示所有的線程
-p:pid進程使用CPU的時間
-o:該參數(shù)后是用戶自定義格式
將需要的線程ID轉(zhuǎn)換為16進制格式(英文小寫格式)
printf “%x\n” 有問題的線程ID
jstack 進程ID | grep tid(16進制線程ID小寫英文) -A60
精準定位到錯誤的地方
jwu-1601425790533)]
將需要的線程ID轉(zhuǎn)換為16進制格式(英文小寫格式)
printf “%x\n” 有問題的線程ID
jstack 進程ID | grep tid(16進制線程ID小寫英文) -A60
精準定位到錯誤的地方
總結(jié)
點點關注不迷路,后面有更多更好的知識分享給大家。
Java Linux
版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。
版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。