java線上服務問題排查__java

來源:互聯網
上載者:User
1、業務日誌相關

如果系統出現異常或者業務有異常,首先想到的都是查看業務日誌

查看日誌工具:

less 或者more

grep

tail -f filename 查看即時的最新內容

ps:切忌vim直接開啟大記錄檔,因為會直接載入到記憶體的 <h1 id="id-線上問題排查-2、 資料庫相關">2、資料庫相關

java應用很多瓶頸在資料庫,一條sql沒寫好導致慢查詢,可能就會帶來應用帶來致命危害。

如果出現Could not get JDBC Connection 、介面響應慢、線程打滿等,

需要登入線上庫,

查看資料庫連接情況:show processlist,查看當前資料庫的串連情況,確實由於慢查詢造成,需要手動kill 3、JVM相關

java虛擬機器相關的問題一般多是以下幾種問題:gc時間過長、OOM、死結、線程block、線程數暴漲等問題。一般通過以下幾個工具都能定位出問題。

jps命令

jinfo命令

jstat命令

jstack命令

jmap命令 3.1 OOM問題

發生OOM問題一般服務都會crash,業務日誌會有OutOfMemoryError。OOM一般都是出現了記憶體泄露,需要查看OOM時候的jvm堆的快照,如果配置了-XX:+HeapDumpOnOutOfMemoryError, 在發生OOM的時候會在-XX:HeapDumpPath產生堆的dump檔案,結合MAT,可以對dump檔案進行分析,尋找出發生OOM的原因. 關於MAT使用不詳述了,google上一堆(http://inter12.iteye.com/blog/1407492)。

ps.

1、伺服器的記憶體一般較大,所以要保證伺服器的磁碟空間大於記憶體大小

2、另外手動dump堆快照,可以使用命令jmap -dump:format=b,file=file_name pid 或者kill -3 pid 3.2 死結

死結原因是兩個或者多個線程相互等待資源,現象一般是出現線程hung住,更嚴重會出現線程數暴漲,系統出現api alive警示等。查看死結最好的方法就是分析當時的線程棧。

具體case 可以參考jstack命令裡面的例子

用到的命令:

jps -v

jstack -l pid 3.3 線程block、線程數暴漲

jstack -l pid |wc -l

jstack -l pid |grep "BLOCKED"|wc -l

jstack -l pid |grep "Waiting on condition"|wc -l

線程block問題一般是等待io、等待網路、等待監視器鎖等造成,可能會導致請求逾時、造成造成線程數暴漲導致系統502等。

如果出現這種問題,主要是關注jstack 出來的BLOCKED、Waiting on condition、Waiting on monitor entry等狀態資訊。

  如果大量線程在“waiting for monitor entry”:

  可能是一個全域鎖阻塞住了大量線程。

  如果短時間內列印的 thread dump 檔案反映,隨著時間流逝,waiting for monitor entry 的線程越來越多,沒有減少的趨勢,可能意味著 某些線程在臨界區裡呆的時間太長了,以至于越來越多新線程遲遲無法進入臨界區 。
如果大量線程在“waiting on condition”:  可能是它們又跑去擷取第三方資源 ,遲遲擷取不到Response ,導致大量線程進入等待狀態。 所以如果你發現有大量的線程都處在 Wait on condition,從線程堆棧看,正等待網路讀寫 ,這可能是一個網路瓶頸的徵兆 ,因為網路阻塞導致線程無法執行。 3.3 gc時間過長

todo

先貼一個文章占坑:http://www.oracle.com/technetwork/cn/articles/java/g1gc-1984535-zhs.html 4、伺服器問題 4.1 CPU

top命令(參考https://linux.cn/article-2352-1.html)

主要關注cpu的load,以及比較耗cpu的進程

由於現在伺服器都是虛擬機器,還要關注st(st 的全稱是 Steal Time ,是分配給運行在其它虛擬機器上的任務的實際 CPU 時間)

 

常用互動命令:

h 協助,十分有用

R: 反向排序

x:將排序欄位高亮顯示(縱列)

y 將運行進程高亮顯示(橫行)

shift+> 或shift+<:切換排序欄位

d或s: 設定顯示的重新整理間隔

f: 欄位管理 設定顯示的欄位

k:kill進程 4.2 記憶體

free命令:

free -m -c10 -s1

-m:以MB為單位顯示,其他的有-k -g -b

-s: 間隔多少秒持續觀察記憶體使用量狀況

-c:觀察多少次

 

 

vmstat命令:(http://man.linuxde.net/vmstat)

vmstat 1 10

1表示每隔1s輸出一次,10 表示輸出10次

 

兩個參數需要關注

r: 運行隊列中進程數量,這個值也可以判斷是否需要增加CPU。(長期大於1)

b: 等待IO的進程數量。
  4.3 IO

iostat 命令(http://www.orczhou.com/index.php/2010/03/iostat-detail/)

 

iostat -m 1 10 -m:某些使用block為單位的列強制使用MB為單位 1 10:資料顯示每隔1秒重新整理一次,共顯示10次

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.