線上問題排查,以下場景,你遇到過嗎? 一、了解機器連接配接數情況問題:1.2.3.4的sshd的監聽端口是22,如何統計1.2.3.4的sshd服務各種連接配接狀态(TIME_WAIT/ CLOSE_WAIT/ ESTABLISHED)的連接配接數。 常見方法:
- netstat -n | grep 1.2.3.4:22 | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
- netstat -lnpta | grep ssh | egrep “TIME_WAIT | CLOSE_WAIT | ESTABLISHED”
- n [僅限于阿裡雲]
說明:netstat是追查網絡連接配接問題常用工具,和grep/awk結合更是神器,當然如果在阿裡雲上,還有更友善的方法。 二、從已經備份好的日志中查詢資料問題:從已備份的suyun.2019-06-26.log.bz2日志中,找出包含關鍵字1.2.3.4的日志有多少條。 常見方法:
- bzcat suyun.2019-06-26.log.bz2 | grep '1.2.3.4' | wc -l
- bzgrep '1.2.3.4' suyun.2019-06-26.log.bz2 | wc -l
- less suyun.2019-06-26.log.bz2 | grep '10.37.9.11' | wc -l
說明:線上日志檔案一般以bz2 壓縮之後保留,如果解壓查詢,非常耗空間與時間,bzcat和bzgrep是研發同學必須掌握的工具。 三、備份服務的技巧問題:打包備份/opt/web/suyun_web目錄,排除掉目錄中的logs和目錄,打包好的檔案存放在/opt/backup目錄下。 常見方法:tar -zcvf /opt/backup/shenjian.tar.gz </span> -exclude /opt/web/suyun_web/logs </span> /opt/web/suyun_web 說明:這個指令線上應用較為頻繁,在項目需要打包遷移時,常常需要排除掉日志目錄,exclude是需要掌握的參數。 四、查詢線程數問題:查詢伺服器運作服務的總線程數,當機器線程數超報警閥值時,能快速查出相關程序及線程資訊。 參考答案:
- ps -eLf | wc -l
- pstree -p | wc -l
五、磁盤報警,清空最大檔案問題:找出伺服器上,某個正在運作的tomcat産生的大量異常日志,找出該檔案,并釋放空間。不妨設該檔案包含log關鍵字,并且大于1G。 常見方法:第一步,找到該檔案
- find / -type f -name "log" | xargs ls -lSh | more
- du -a / | sort -rn | grep log | more
- find / -name 'log' -size +1000M -exec du -h {} ;
第二步,将檔案清空假設找到的檔案為a.log正确的情況方式應該為:echo "">a.log檔案空間會立刻釋放。
很多同學會使用:rm -rf a.log這樣檔案雖然删除,但是因tomcat服務仍在運作,空間不會立刻釋放,需要重新開機tomcat才能将空間釋放。 六、顯示檔案,過濾注釋問題:顯示server.conf 檔案,屏蔽掉#号開頭的注釋行 常見方法:
- sed -n '/^[#]/!p' server.conf
- sed -e '/^#/d' server.conf
- grep -v "^#" server.conf
七、磁盤IO異常排查問題:磁盤IO異常如何排查,類似寫入慢或目前使用率較高,請查出導緻磁盤IO異常高的程序ID。 常見方法:第一步:iotop -o檢視目前正在寫磁盤操作的所有程序ID資訊。
第二步:如果此時各項寫入名額都很低,基本沒有大的寫入操作,則需要排查磁盤自身。可以檢視系統dmesg或cat /var/log/message看看是否有相關的磁盤異常報錯,同時可以在寫入慢的磁盤上touch一個空檔案看看,是否磁盤故障導緻無法寫入。
希望對經常進行線上操作的同學有幫助,如果有更好的實踐,也歡迎分享。
本文轉自“架構師之路”公衆号,58沈劍提供。