我們的作業環境中,經常會出現各種各樣的行程問題,而我們要做的就是快速發現問題、解決問題,
- 我們常見的行程問題一般分為兩類:對資源的使用過度和行程的狀態問題
- 資源使用過度一般為CPU、記憶體、IO以及檔案句柄使用過度等,一般會影響業務的穩定運行,或造成其他服務行程出現問題
- 行程狀態問題一般常見的為僵尸行程和不可中斷的睡眠狀態,這些會導致業務服務出現問題
- 列舉一些常見的行程問題:

- 對于這些常見問題,我們可以通過以下這些命令進行分析
- (對于這些命令的具體選項引數還請自行查找一下)
top:實時顯示系統中各個行程的資源占用狀態
ps:顯示瞬間行程的狀態
strace:跟蹤行程的系統呼叫
lsof:列出某個程式行程所打開的檔案資訊
free:用來查看系統可用記憶體
iostat:動態監視系統磁盤操作活動
vmstat:實時動態監控作業系統的虛擬記憶體、行程、cpu活動
ldd:用來查看程式運行所需的共享庫
問題行程排查方式
針對CPU資源使用情況排查
- 輸入
top命令可以列出行程的資源使用情況,按住shift+p就可以按照CPU使用率的大小排序,可以直觀的看到每個行程占用的CPU使用率
top

把瞬間的系統行程狀態提取出來
- 我們按照CPU的使用率,按由大到小大的順序提取前十的行程
- 這樣我們可以通過COMMAND看到使用cpu最多的十個行程
ps -aux --sort=-%cpu|head -n 10
[root@centos7 ~]# ps -aux --sort=-%cpu|head -n 10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 953 0.2 0.2 273196 4876 ? Ssl 3月05 0:14 /usr/bin/vmtoolsd
root 1959 0.2 0.0 0 0 ? S 00:08 0:00 [kworker/0:3]
root 415 0.1 0.0 0 0 ? S 3月05 0:07 [xfsaild/dm-0]
root 1910 0.1 0.0 0 0 ? S 3月05 0:01 [kworker/0:1]
root 1937 0.1 0.0 0 0 ? S 00:00 0:01 [kworker/0:2]
root 1 0.0 0.2 125768 4260 ? Ss 3月05 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 3月05 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 3月05 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 3月05 0:00 [ksoftirqd/0]
查找行程使用記憶體資源過多
- 依然是使用
top命令,按Shift+m就是按照記憶體的方式排序 ps命令也是一樣,把-%cpu換成-%MEM即可

磁盤IO分析- 使用
iostat命令查看 - 沒有安裝的話
yum -y install sysstat命令安裝
iostat 2 1
[root@centos7 ~]# iostat 2 1
Linux 3.10.0-1160.el7.x86_64 (centos7) 2021年03月06日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.10 0.00 0.25 0.02 0.00 99.63
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.00 19.20 2.40 106015 13243
scd0 0.00 0.19 0.00 1028 0
dm-0 0.67 17.03 2.03 94054 11195
dm-1 0.02 0.40 0.00 2204 0
- 兩個引數:2代表重繪的頻率,1代表總共的次數
- KB_read/s代表讀;KB_wrtn/s代表寫
- 加上-x選項可以更清楚的看清當前磁盤的負荷狀態
- 如果想更具體的了解行程使用IO的情況,可以使用
iotop命令 - 注意:這個命令可能是占用較大的系統性能

行程占用檔案描述符問題 - 首先我們可以查看系統允許所有行程打開檔案句柄的總數,這個數值代表系統上所有行程允許打開的最大fd數量
[root@centos7 ~]# cat /proc/sys/fs/file-max
190603
- 有時還需要查看當前所有行程打開和允許打開的fd數量
[root@centos7 fs]# cat /proc/sys/fs/file-nr
1152 0 190603
- 我們還可以精確到某個行程允許打開的fd數量,因為系統除了對總數量有限制外,還對單行程也有限制
[root@centos7 ~]# ulimit -n
1024
- 我們想了解某行程當前打開了哪些fd
ll /rpoc/{pid}/fd
- 輸入想了解行程的pid號,如果內容多可以加
wc進行統計 - 如果行程打開的檔案句柄過多,超過系統限制,就可能導致行程或服務出現影響,需要排查和調整
僵尸行程
- 子行程exit()后,并非馬上消失,而是留下一個(Zombie)的資料結構等待父行程處理,如果子行程exit()后,父行程沒來得及處理,這個時候子行程的狀態是Z
- 可以通過
top來查看當前系統的僵尸行程

- 也可以通過ps+grep這個組合來查看
ps -e -o ppid,stat | grep Z
- 發現就殺死它,通過下面這條命令發現并殺死僵尸行程
ps -e -o ppid,stat | grep Z | cut -d "" -f2 | xargs kill -9
行程不可中斷睡眠狀態
- 可中斷的睡眠狀態一般以“S”表示,不可中斷的一般以“D”表示
- 一般這種情況,就是沒事的時候重啟下系統吧
以上內容都是我買的一個小課里的,只有命令總結,沒寫描述性的文字,所有可能有的地方不是很清晰,見諒,
嘿嘿,應該不會有什么侵權什么的吧?是吧?是吧?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/267014.html
標籤:其他
上一篇:Windows 與 Linux 進行檔案共享時不能正常掃描和掛載共享目錄
下一篇:作業系統第一章作業系統引論作業
