簡述:百度程序員排查問題的工具清單,分享給你! Linux命令類 tail 最常用的tail-f tail-300fshopbase.log#倒數(shù)300行并進(jìn)入實(shí)時(shí)監(jiān)聽文件寫入模式 grep grepfor
百度程序員排查問題的工具清單,分享給你!
Linux命令類
tail
最常用的tail -f
tail -300f shopbase.log #倒數(shù)300行并進(jìn)入實(shí)時(shí)監(jiān)聽文件寫入模式
grep
grep forest f.txt #文件查找 grep forest f.txt cpf.txt #多文件查找 grep 'log' /home/admin -r -n #目錄下查找所有符合關(guān)鍵字的文件 cat f.txt | grep -i shopbase grep 'shopbase' /home/admin -r -n --include *.{vm,java} #指定文件后綴 grep 'shopbase' /home/admin -r -n --exclude *.{vm,java} #反匹配 seq 10 | grep 5 -A 3 #上匹配 seq 10 | grep 5 -B 3 #下匹配 seq 10 | grep 5 -C 3 #上下匹配,平時(shí)用這個(gè)就妥了 cat f.txt | grep -c 'SHOPBASE'
awk
1 、基礎(chǔ)命令
awk '{print $4,$6}' f.txt awk '{print NR,$0}' f.txt cpf.txt awk '{print FNR,$0}' f.txt cpf.txt awk '{print FNR,FILENAME,$0}' f.txt cpf.txt awk '{print FILENAME,"NR="NR,"FNR="FNR,"$"NF"="$NF}' f.txt cpf.txt echo 1:2:3:4 | awk -F: '{print $1,$2,$3,$4}'
2 、匹配
awk '/ldb/ {print}' f.txt #匹配ldb awk '!/ldb/ {print}' f.txt #不匹配ldb awk '/ldb/ && /LISTEN/ {print}' f.txt #匹配ldb和LISTEN awk '$5 ~ /ldb/ {print}' f.txt #第五列匹配ldb
3 、 內(nèi)建變量
NR:NR表示從awk開始執(zhí)行后,按照記錄分隔符讀取的數(shù)據(jù)次數(shù),默認(rèn)的記錄分隔符為換行符,因此默認(rèn)的就是讀取的數(shù)據(jù)行數(shù),NR可以理解為Number of Record的縮寫。
FNR:在awk處理多個(gè)輸入文件的時(shí)候,在處理完第一個(gè)文件后,NR并不會從1開始,而是繼續(xù)累加,因此就出現(xiàn)了FNR,每當(dāng)處理一個(gè)新文件的時(shí)候,F(xiàn)NR就從1開始計(jì)數(shù),F(xiàn)NR可以理解為File Number of Record。
NF: NF表示目前的記錄被分割的字段的數(shù)目,NF可以理解為Number of Field。
find
sudo -u admin find /home/admin /tmp /usr -name *.log(多個(gè)目錄去找) find . -iname *.txt(大小寫都匹配) find . -type d(當(dāng)前目錄下的所有子目錄) find /usr -type l(當(dāng)前目錄下所有的符號鏈接) find /usr -type l -name "z*" -ls(符號鏈接的詳細(xì)信息 eg:inode,目錄) find /home/admin -size +250000k(超過250000k的文件,當(dāng)然+改成-就是小于了) find /home/admin f -perm 777 -exec ls -l {} ; (按照權(quán)限查詢文件) find /home/admin -atime -1 1天內(nèi)訪問過的文件 find /home/admin -ctime -1 1天內(nèi)狀態(tài)改變過的文件 find /home/admin -mtime -1 1天內(nèi)修改過的文件 find /home/admin -amin -1 1分鐘內(nèi)訪問過的文件 find /home/admin -cmin -1 1分鐘內(nèi)狀態(tài)改變過的文件 find /home/admin -mmin -1 1分鐘內(nèi)修改過的文件
pgm
批量查詢vm-shopbase滿足條件的日志
pgm -A -f vm-shopbase 'cat /home/admin/shopbase/logs/shopbase.log.2017-01-17|grep 2069861630'
tsar
tsar是咱公司自己的采集工具。很好用, 將歷史收集到的數(shù)據(jù)持久化在磁盤上,所以我們快速來查詢歷史的系統(tǒng)數(shù)據(jù)。當(dāng)然實(shí)時(shí)的應(yīng)用情況也是可以查詢的啦。大部分機(jī)器上都有安裝。
tsar ###可以查看最近一天的各項(xiàng)指標(biāo)
tsar --live ###可以查看實(shí)時(shí)指標(biāo),默認(rèn)五秒一刷
tsar --mem tsar --load tsar --cpu ###當(dāng)然這個(gè)也可以和-d參數(shù)配合來查詢某天的單個(gè)指標(biāo)的情況
tsar --memtsar --loadtsar --cpu###當(dāng)然這個(gè)也可以和-d參數(shù)配合來查詢某天的單個(gè)指標(biāo)的情況
top
top除了看一些基本信息之外,剩下的就是配合來查詢vm的各種問題了
ps -ef | grep java top -H -p pid
獲得線程10進(jìn)制轉(zhuǎn)16進(jìn)制后jstack去抓看這個(gè)線程到底在干啥
其他
netstat -nat|awk '{print $6}'|sort|uniq -c|sort -rn #查看當(dāng)前連接,注意close_wait偏高的情況,比如如下
排查利器
btrace
首當(dāng)其沖的要說的是btrace。真是生產(chǎn)環(huán)境&預(yù)發(fā)的排查問題大殺器。 簡介什么的就不說了。直接上代碼干
1、查看當(dāng)前誰調(diào)用了ArrayList的add方法,同時(shí)只打印當(dāng)前ArrayList的size大于500的線程調(diào)用棧
@OnMethod(clazz = "java.util.ArrayList", method="add", location = @Location(value = Kind.CALL, clazz = "/.*/", method = "/.*/")) public static void m(@ProbeClassName String probeClass, @ProbeMethodName String probeMethod, @TargetInstance Object instance, @TargetMethodOrField String method) { if(getInt(field("java.util.ArrayList", "size"), instance) > 479){ println("check who ArrayList.add method:" + probeClass + "#" + probeMethod + ", method:" + method + ", size:" + getInt(field("java.util.ArrayList", "size"), instance)); jstack(); println(); println("==========================="); println(); } }
2、監(jiān)控當(dāng)前服務(wù)方法被調(diào)用時(shí)返回的值以及請求的參數(shù)
@OnMethod(clazz = "com.taobao.sellerhome.transfer.biz.impl.C2CApplyerServiceImpl", method="nav", location = @Location(value = Kind.RETURN)) public static void mt(long userId, int current, int relation, String check, String redirectUrl, @Return AnyType result) { println("parameter# userId:" + userId + ", current:" + current + ", relation:" + relation + ", check:" + check + ", redirectUrl:" + redirectUrl + ", result:" + result); }
注意:
經(jīng)過觀察,1.3.9的release輸出不穩(wěn)定,要多觸發(fā)幾次才能看到正確的結(jié)果
正則表達(dá)式匹配trace類時(shí)范圍一定要控制,否則極有可能出現(xiàn)跑滿CPU導(dǎo)致應(yīng)用卡死的情況
由于是字節(jié)碼注入的原理,想要應(yīng)用恢復(fù)到正常情況,需要重啟應(yīng)用。
騰佑科技專注idc行業(yè)13年,不管是服務(wù)器租用、服務(wù)器托管、機(jī)柜租用、云服務(wù)器等業(yè)務(wù)都可以找我們哦。
鄭州騰佑科技有限公司(以下簡稱“騰佑科技”)成立于2009年, 總部位于鄭州,是 一家致力于互聯(lián)網(wǎng)服務(wù)業(yè)的高新技術(shù)企業(yè),公司主營業(yè)務(wù)以互聯(lián)網(wǎng)數(shù)據(jù)中心、云計(jì)算、人 工智能、軟件開發(fā)、安全服務(wù)“互聯(lián)網(wǎng)+”行業(yè)解決方案及行業(yè)應(yīng)用等相關(guān)業(yè)務(wù)。
售前咨詢熱線:400-996-8756
備案提交:0371-89913068
售后客服:0371-89913000
搜索詞
熱門產(chǎn)品推薦