tomcat線上死迴圈的排查
一段死迴圈造成的伺服器CUP高負載追溯
-
事故緣由:
- 線上伺服器近期頻繁出現某節點停止服務情況,且出問題的伺服器不固定,當時檢查發現磁碟被tomcat日誌填滿,以為是被惡意刷流量,於是刪掉了日誌,重啟了服務解決,當第三次出現該問題時,我開始查詢原因。
-
追溯步驟
- tail -f日誌,發現大量查詢資料庫日誌不斷重新整理,但是又沒有具體業務程式碼暴露,考慮某處有死迴圈。
- top命令發現java程序佔用大量cpu:
-
程序號為10864
- top -p 10864 -H
-
找到佔用cpu最多的幾個執行緒,分別是10867、10866、13595、13596
- jstack 10864 > stack.log,將佔用cpu較多的執行緒號轉為16進位制,在stack.log中查詢。
10867、10866兩執行緒為gc執行緒
進一步找,發現執行緒13595在為RUNABLE狀態,並且在呼叫資料庫,根據堆疊資訊,找到了父子關係查詢部分自己為自己的父級情況下造成死迴圈的程式碼。
相關推薦
tomcat線上死迴圈的排查
一段死迴圈造成的伺服器CUP高負載追溯 事故緣由: 線上伺服器近期頻繁出現某節點停止服務情況,且出問題的伺服器不固定,當時檢查發現磁碟被tomcat日誌填滿,以為是被惡意刷流量,於是刪掉了日誌,
一次線上死迴圈的排查
1、問題發現 Prometheus報警某服務的一個節點 Old GC過多,需要排查。 2、檢視GC日誌 使用tail -f gc.log命令檢視異常節點的GC日誌,從日誌可以看出Young GC過於頻繁,竟然在1s內有9次Young GC: 使用tail -f gc.l
[手遊專案2]-21-死迴圈排查
.打開了所有的log,看最後一條log,定位最後一個函式 很多人喜歡這樣寫 while(true) if(break) 這個死迴圈 for(true) if(++) 也是一個道理 儘量避免寫這樣的程式碼
排查定位由死迴圈引起的cpu負載飆高或者死鎖
在linux下: linux的top命令可以檢視程序的pid,我們找到java程式的pid, 然後執行 top -Hp pid 就可以檢視到這個程序下執行緒的執行情況。 這樣粗略可以看到哪些執行緒比較繁忙,這時候就用到jdk自帶的小工具jstack(官方文件或者自行 百度)。 我們
MySQL死鎖系列-線上死鎖問題排查思路
### 前言 MySQL 死鎖異常是我們經常會遇到的線上異常類別,一旦線上業務日間複雜,各種業務操作之間往往會產生鎖衝突,有些會導致死鎖異常。這種死鎖異常一般要在特定時間特定資料和特定業務操作才會復現,並且分析解決時還需要了解 MySQL 鎖衝突相關知識,所以一般遇到這些偶爾出現的死鎖異常,往往一時沒有頭緒
死鎖排查的小竅門 --使用jdk自帶管理工具jstack
pre ble new deadlock 一段 指令 tro bject print 本文版權歸 遠方的風lyh和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。 開發時間久了,難免會寫出一些一些死鎖的代碼,自己明明調用該方法可該方法就是不執行、不進該
tomcat假死 (原因及解決辦法)
空間 error: 解決 -h 多人 lan 特殊 sun out 一、懷疑JVM內存溢出 表現:tomcat就連續拋java.lang.OutOfMemoryError的錯誤 1、首先是:java.lang.OutOfMemoryError: Java heap
利用jvisualvm工具查找tomcat假死問題
jvm內存快照分析 java垃圾不回收 tomcat假死原因查找 內存泄漏問題分析 java內存瞬間爆滿分析 解決由於jvm內存泄漏導致的頻繁fullgc帶來的tomcat假死問題分析 問題現狀:系統運行期間突然出現tomcat假死,因為系統很久沒改代碼,以為是訪問量增加帶來的內存導致,改
應用程序卡死如何排查
應用程序卡死 排查思路 故障排查 linux排查 一.應用程序卡死如何排查故障:客服報障,平臺點擊界面菜單無反應排查步驟:1.首先先從公司架構入手,2個節點2層代理負載再到後端web,程序再調用中間件,最後才到數據庫2.先把負載卸掉,用單節點單負載進行訪問3.如果不行,再連接數據庫服務器,用t
sql server 死鎖排查
getdate rest spi 排它鎖 pro 版本 sql ack proxy 原文:sql server 死鎖排查 記得以前客戶在使用軟件時,有偶發出現死鎖問題,因為發生的時間不確定,不好做問題的重現,當時解決問題有點棘手了。 現總結下查看死
檢測tomcat假死時重新啟動及郵件通知
curl -i elif grep list send http 計劃 dev tom 腳本內容: #!/bin/bash IP=10.78.1.183 PORT=8114 TOMCAT_DIR=/data/tomcat_8114 function send_mail(){
while死迴圈
1、沒有自增自減變數 public static void main(String[] args){ int x = 0; while( x < 3 ) { System.out.println("value of x : " + x );
mysql死鎖排查
死鎖 show engine innodb status;顯示引擎引數,查死鎖sql show engine innodb mutex; LATEST DETECTED DEADLOCK ------------------------ 2017-01-21
使用@ManyToMany查詢資料時的死迴圈問題解決辦法
初學使用spring data jpa,將問題記錄 以User 和Role為例,兩者為雙向的多對多關係,即可以通過User查詢到Role資訊,也可以通過Role查詢到User資訊 首先要明白為什麼會出現死迴圈這個問題,造成這個死迴圈的原因是因為查詢User時,包含了Role屬性,Role中又
多執行緒下HashMap的死迴圈
多執行緒下HashMap的死迴圈 Java的HashMap是非執行緒安全的。多執行緒下應該用ConcurrentHashMap。 多執行緒下[HashMap]的問題(這裡主要說死迴圈問題): 1、多執行緒put操作後,get操作導致死迴圈。 2、多執行緒
HashMap的死迴圈解析
HashMap死迴圈問題圖解 在HashMap的陣列真實長度達到閾值後,會呼叫擴容方法: void resize(int newCapacity) { Entry[] oldTable = table
1024這天,我故意寫了個死迴圈~
摘要: 導致CPU100%的原因很多,而程式中出現死迴圈就是原因之一。然而,並不是每個人在工作中都有機會踩中這個坑。我就是其中一個沒踩過的。人生似乎有些不完整。 所以,我做了一個很重要的決定:在程式中寫一個死迴圈。 作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這是一個我的Q
ubantu系統修改許可權失敗,導致只能客人會話登入解決辦法 ubantu系統出現登入介面死迴圈處理辦法 ubantu系統出現登入介面死迴圈處理辦法
由於之前想將使用者授予root許可權,參考了網上的修改“使用者名稱:x:0:500:tommy:/home/tommy:/bin/bash”,將兩個1000改為0的辦法,可能是因為沒有登出,導致切換使用者後,只能進入到客人會話模式。並且悲催地忘了root密碼,於是下面介紹一下自己的拯救辦法: 第一步:關閉“
ubantu系統出現登入介面死迴圈處理辦法 ubantu系統修改許可權失敗,導致只能客人會話登入解決辦法
繼上篇ubantu系統修改許可權失敗,導致只能客人會話登入解決辦法部落格,雖然進行了相應的修改,但是卻出現了登入死迴圈情況,於是再次進行修改。 第一步:“ctrl+Alt+F1”進入命令列介面,輸入使用者名稱+密碼,登陸進去。 第二步:這次應該是按照以前的辦法輸入“startx”命令,但是出現了“ti
springboot中@NamedQuery查詢結果出現死迴圈
在進行@NamedQuery時,出現這樣的結果: [{"id":1,"name":"諸葛亮","address":"成都","age":33,"sex":"男","clazz":{"code":1,"name":"應用數學1班","students":[{"id":2,"name":"觀音","