背景
“線下沒問題的”、 “代碼不可能有問題 是系統(tǒng)原因”、“能在線上遠(yuǎn)程debug么”
線上問題不同于開發(fā)期間的bug,與運(yùn)行時(shí)環(huán)境、壓力、并發(fā)情況、具體的業(yè)務(wù)相關(guān)。對于線上的問題利用線上環(huán)境可用的工具,收集必要信息 對定位問題十分重要。
對于導(dǎo)致問題的bug、資源瓶頸很難直觀取得數(shù)據(jù),需要根據(jù)資源使用數(shù)據(jù)、日志等信息推測問題根源。并且疑難問題的定位通常需要使用不同的方法追根溯源。
這篇wiki我對自己使用過的工具做了整理,并分享一些案例。
1. 常見問題
1.1 可用性
這里舉幾種常見導(dǎo)致服務(wù)可用性的情況:
a) 502 Bad Gateway
對應(yīng)用系統(tǒng)特別是基于http的應(yīng)用最嚴(yán)重的莫過于"502 Bad Gateway",這表示后端服務(wù)已經(jīng)完全不可用,可能原因
資源不足1:垃圾回收導(dǎo)致,在CMS在應(yīng)用內(nèi)存泄漏或內(nèi)存不足情況下會導(dǎo)致嚴(yán)重的應(yīng)用暫停。
資源不足2:服務(wù)器線程數(shù)不足,常見web server如tomcat jetty都是有大工作線程配置的
資源不足3:數(shù)據(jù)庫資源不足,數(shù)據(jù)庫通常使用連接池配置,maxConnection配置低加上過多慢查詢會block住web server的工作線程
資源不足4:IO資源瓶頸,線上環(huán)境IO是共享的,尤其對于混布環(huán)境(CRM還好 沒有這種情況,但是有很多agent),我們常用的log4j日志工具對于每個(gè)記錄的日志文件也是一種獨(dú)占資源,線程先要獲得鎖才能向日志記錄數(shù)據(jù)。
... ...
各種OOM
b) Socket異常
常見Connection reset by peer,Broken Pipe,EOFException
網(wǎng)絡(luò)問題:在跨運(yùn)營商、機(jī)房訪問情況下可能遇到
程序bug:socket異常關(guān)閉
1.2 平均響應(yīng)時(shí)間
系統(tǒng)發(fā)生問題時(shí)最直觀的表象,這個(gè)參數(shù)在情況惡化傳染其他服務(wù) 導(dǎo)致整個(gè)系統(tǒng)不可用前,可以提前預(yù)警,可能原因:
資源競爭1:CPU
資源競爭2:IO
資源競爭3:network IO
資源競爭4:數(shù)據(jù)庫
資源競爭5:solr、medis
下游接口:異常導(dǎo)致響應(yīng)延時(shí)
1.3 機(jī)器報(bào)警
與應(yīng)用服務(wù)不可用相比,這類錯(cuò)誤不會直接導(dǎo)致服務(wù)不可用,而且如果存在混不,機(jī)器部署多個(gè)服務(wù)可能相互干擾:
CPU
磁盤
fd
IO(網(wǎng)絡(luò) 磁盤)
1.4 小結(jié)
寫了半天,很多情況是重復(fù)提到,通常線上問題的原因不外乎系統(tǒng)資源、應(yīng)用程序,掌握監(jiān)控查看這些資源、數(shù)據(jù)的工具就更容易定位線上的問題。
2常用工具
2.1 Linux工具
a) sysstat:
iostat:查看讀寫壓力
sar:查看CPU 網(wǎng)絡(luò)IO IO,開啟參數(shù)可以查看歷史數(shù)據(jù)
/etc/sysconfig/sysstat HISTORY=7 /etc/cron.d/sysstat */10 * * * * root /usr/lib/sa/sa1 1 1 sar -u/-r/-B/-b/-q/-P/-n -f /var/log/sa/sa09b) top
關(guān)注load、cpu、mem、swap
可按照線程查看資源信息(版本大于3.2.7)
c) vmstat
[sankuai@cos-mop01 logs]$ vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 447332 200456 4160 234512 0 0 11 6 0 0 2 1 97 0 0d) tcpdump
定位網(wǎng)絡(luò)問題神器,可以看到TCPIP報(bào)文的細(xì)節(jié),需要同時(shí)熟悉TCPIP協(xié)議,可以和wireshark結(jié)合使用。
常見場景分析網(wǎng)絡(luò)延遲、網(wǎng)絡(luò)丟包,復(fù)雜環(huán)境的網(wǎng)絡(luò)問題分析。
3.2 java工具
a) jstat
b) jmap
jmap -dump:format=b,file=heap.bin $pidc) jstack or kill -3
查看死鎖、線程等待。
線程狀態(tài):
Running
TIMED_WAITING(on object monitor)
TIMED_WAITING(sleeping)
TIMED_WAITING(parking)
WAINTING(on object monitor)
d) jhat jconsole
jhat很難用 jconsole通過jmx取信息對性能有影響
e) gc日志
-XX:+UseParallelOld
-XX:+ConcurrentMultiSweep
3.3 第三方工具
a) mat
對象詳細(xì)
inboud/outbound
thread overview
配置項(xiàng)
./MemoryAnalyzer -keep_unreachable_objects heap_file
4. 案例分析
4.1 cpu高
現(xiàn)象:CPU報(bào)警
定位問題:
查看CPU占用高的線程
thread dump
jstack $pid > a.txt printf %x $tid $xTID查找線程執(zhí)行的代碼
"main-SendThread(cos-zk13.lf.sankuai.com:9331)" #25 daemon prio=5 os_prio=0 tid=0x00007f78fc350000 nid=$TIDx runnable [0x00007f79c4d09000] java.lang.Thread.State: RUNNABLE at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1035) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)4.2 io高
現(xiàn)象:磁盤IO報(bào)警
環(huán)境:需要安裝sysstat工具
定位問題:
a) 查看CPU占用高的線程
b) 其他同4.1
4.3 資源
a) 數(shù)據(jù)庫
b) log
"RMI TCP Connection(267865)-172.16.5.25" daemon prio=10 tid=0x00007fd508371000 nid=0x55ae waiting for monitor entry [0x00007fd4f8684000] java.lang.Thread.State: BLOCKED (on object monitor) at org.apache.log4j.Category.callAppenders(Category.java:201) - waiting to lock <0x00000000acf4d0c0> (a org.apache.log4j.Logger) at org.apache.log4j.Category.forcedLog(Category.java:388) at org.apache.log4j.Category.log(Category.java:853) at org.apache.commons.logging.impl.Log4JLogger.warn(Log4JLogger.java:234) at com.xxx.core.common.lang.cache.remote.MemcachedClient.get(MemcachedClient.java:110)c) web server
有兩個(gè)非常重要的系統(tǒng)參數(shù):
maxThread: 工作線程數(shù)
backlog:TCP連接緩存數(shù),Jetty(ServerConnector.acceptQueueSize) Tomcat(Connector.acceptCount),高并發(fā)下設(shè)置過小會有502
4.4 gc
a) CMS fail
promotion failed
concurrent fail
[CMS2015-09-18T07:07:27.132+0800: 639182.207: [CMS-concurrent-sweep: 1.704/13.116 secs] [Times: user=17.16 sys=5.20,real=13.12 secs] 443222 (concurrent mode failure): 1546078K->682301K(1756416K), 4.0745320 secs] 1630977K->682301K(2063104K), [CMS Perm :67700K->67693K(112900K)], 15.4860730 secs] [Times: user=19.40 sys=5.20, real=15.48 secs]b) 連續(xù)Full GC
應(yīng)用存在內(nèi)存泄漏,垃圾收集會占用系統(tǒng)大量cpu時(shí)間,極端情況下可能發(fā)生90%以上時(shí)間在做GC的情況。
在系統(tǒng)使用http訪問check alive或者使用了Zookeeper這種通過心跳保證存活性的應(yīng)用中,會可用性異?;蛘弑粃k的master剔除。
5. 注意
保留現(xiàn)場:threaddump top heapdump
注意日志記錄:文件 數(shù)據(jù)庫
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站欄目:Java問題定位方法總結(jié)-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://chinadenli.net/article10/dgpdgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)公司、App設(shè)計(jì)、網(wǎng)站排名、商城網(wǎng)站、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容