linux问题排查常用命令详解
前陣子部署的nginx服務器出現(xiàn)了故障,針對故障現(xiàn)場做了個排查,后來發(fā)現(xiàn)是nginx的quic分支代碼的問題,出現(xiàn)了死循環(huán)導致CPU 近100%
記錄下在排查的思路和排查過程中使用的命令和工具
查看CPU
top命令
load average:該數(shù)據(jù)是每隔5秒鐘檢查一次活躍的進程數(shù),然后按特定算法計算出的數(shù)值。如果這個數(shù)除以邏輯CPU的數(shù)量,結(jié)果高于5的時候就表明系統(tǒng)在超負荷運轉(zhuǎn)了。
VIRT:進程使用的虛擬內(nèi)存。進程使用的虛擬內(nèi)存總量,單位kb。VIRT=SWAP+RES
RES:駐留內(nèi)存大小。駐留內(nèi)存是任務使用的非交換物理內(nèi)存大小。進程使用的、未被換出的物理內(nèi)存大小,單位kb。RES=CODE+DATA
SHR:SHR是進程使用的共享內(nèi)存。共享內(nèi)存大小,單位kb
S:這個表示進程的狀態(tài)。它有以下不同的值:
- D - 不可中斷的睡眠態(tài)。
- R – 運行態(tài)
- S – 睡眠態(tài)
- T – 被跟蹤或已停止
- Z – 僵尸態(tài)
%CPU:自從上一次更新時到現(xiàn)在任務所使用的CPU時間百分比。
%MEM:進程使用的可用物理內(nèi)存百分比。
使用top命令后,按t,可以切換顯示不同cpu信息
查看固定PID的CPU,內(nèi)存情況
使用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。
查看內(nèi)存使用情況
free -m /opt/server/查看機器的連接數(shù)
查看tcp連接數(shù)
netstat -nat |awk '{print $6}'|grep -v 'Foreign'|grep -v 'established)'|sort|uniq -c|sort -rn
當前機器的連接數(shù)還ok,不至于導致cpu 100%
常用的三個狀態(tài)是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主動關(guān)閉,CLOSE_WAIT 表示被動關(guān)閉。具體每種狀態(tài)的意思參考下圖就可以了:
分析堆棧信息
pstack
安裝 gdb 的時候會自帶安裝 pstack ,使用如下命令安裝即可
yum install gdb -y pstack {PID}使用pstack命令打印對應的堆棧信息, 相隔一段時間多次打印,看到的堆棧信息都是一樣的,說明當前進程在該方法里"卡住了", 很大可能發(fā)生了死循環(huán)
參考資料:
Nignx服務器CLOSE_WAIT和TIME_WAIT過高分析
netstat 命令詳解
分析進程調(diào)用pstack和starce
總結(jié)
以上是生活随笔為你收集整理的linux问题排查常用命令详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HashedWheelTimer时间轮原
- 下一篇: linux 其他常用命令