linux问题排查常用命令详解
前陣子部署的nginx服務器出現了故障,針對故障現場做了個排查,后來發現是nginx的quic分支代碼的問題,出現了死循環導致CPU 近100%
記錄下在排查的思路和排查過程中使用的命令和工具
查看CPU
top命令
load average:該數據是每隔5秒鐘檢查一次活躍的進程數,然后按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高于5的時候就表明系統在超負荷運轉了。
VIRT:進程使用的虛擬內存。進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES:駐留內存大小。駐留內存是任務使用的非交換物理內存大小。進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR:SHR是進程使用的共享內存。共享內存大小,單位kb
S:這個表示進程的狀態。它有以下不同的值:
- D - 不可中斷的睡眠態。
- R – 運行態
- S – 睡眠態
- T – 被跟蹤或已停止
- Z – 僵尸態
%CPU:自從上一次更新時到現在任務所使用的CPU時間百分比。
%MEM:進程使用的可用物理內存百分比。
使用top命令后,按t,可以切換顯示不同cpu信息
查看固定PID的CPU,內存情況
使用ps查詢指定進程名或者PID的占用情況
值得注意的是ps 命令里的CPU和top 命令里的計算方式不一樣
ps command : CPU usage is currently expressed as the percentage of time spent running during the entire lifetime of a process. This is not ideal,and it does not conform to the standards that ps otherwise conforms to.
CPU usage is unlikely to add up to exactly 100%.
top command: The task’s share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time. In a true SMP environment, if ‘Irix mode’ is Off, top will operate in ‘Solaris mode’ where a task’s cpu usage will be divided by the total number of CPUs. You toggle ‘Irix/Solaris’ modes with the ‘I’ interactive command.
簡單來說: ps是從進程開始就開始算的,是平均的占用率;而top是從上次刷新開始算的,一般幾秒鐘一刷,可以認為是即時的。 排查機器問題的話還是建議看top 命令的%CPU。
查看內存使用情況
free -m /opt/server/查看機器的連接數
查看tcp連接數
netstat -nat |awk '{print $6}'|grep -v 'Foreign'|grep -v 'established)'|sort|uniq -c|sort -rn
當前機器的連接數還ok,不至于導致cpu 100%
常用的三個狀態是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主動關閉,CLOSE_WAIT 表示被動關閉。具體每種狀態的意思參考下圖就可以了:
分析堆棧信息
pstack
安裝 gdb 的時候會自帶安裝 pstack ,使用如下命令安裝即可
yum install gdb -y pstack {PID}使用pstack命令打印對應的堆棧信息, 相隔一段時間多次打印,看到的堆棧信息都是一樣的,說明當前進程在該方法里"卡住了", 很大可能發生了死循環
參考資料:
Nignx服務器CLOSE_WAIT和TIME_WAIT過高分析
netstat 命令詳解
分析進程調用pstack和starce
總結
以上是生活随笔為你收集整理的linux问题排查常用命令详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HashedWheelTimer时间轮原
- 下一篇: Spring Boot返回前端Long型