當項目上線后,作為一個后台開發選手,必備的技能之一就是當服務器出現故障時,查看服務器進程及各種參數,然后排查問題。
第一步,根據應用端口號查看應用進程
ps -ef |grep 111111
1
結果如下:
注意觀察CPU、內存參數,百分比,絕對數值越高說明服務器壓力越大,但並不代表掛了。
當然,如果長時間維持在較高水平,即便沒掛,也說明離掛不遠了。
第二步,查看服務器日志
查看應用服務器日志,觀察是否存在 full gc。
tail -500f xxxxx.log
1
如果出現長時間的full gc,你也要小心了。
這時,需要繼續檢查。
第三步,查看應用進程下cpu或者內存使用率非常高的線程
top -H -p 11111 # 11111是第一步查出來的應用進程
1
結果如下:
如果cpu或者mem長時間保持在99%,說明這個線程占用了大量資源。
這時需要把服務器內存堆棧日志下載下來。
第四步 下載堆棧日志
jstack -l 11111 > xxx.stack // 11111是第一查出來的應用進程
1
這個命令可以把堆棧日志下載到xxx.stack的文本文件中。
xxx.stack是一個文本文件,就在當前目錄下,你可以把他下載到電腦硬盤,用文本工具打開。
第五步 查找導致高使用率的原因
通常第三步找到的高使用率的線程就是導致服務器高壓力的原因。
在第四步下載的日志文件中查找改線程的ID,要注意的是,通過名稱看到屏幕的id是十進制的,而下載的文本日志中的ID是十六進制的,需要把十進制轉換成十六進制的數字,才能搜索到。
如果能夠在堆棧日志中搜索到改線程ID,就可以找到導致服務器壓力大的原因。
