1. 程式人生 > >生產環境下JAVA程序高CPU佔用故障排查

生產環境下JAVA程序高CPU佔用故障排查

轉自:http://blog.chinaunix.net/uid-10449864-id-3463151.html

問題描述:

生產環境下的某臺tomcat7伺服器,在剛釋出時的時候一切都很正常,在執行一段時間後就出現CPU佔用很高的問題,基本上是負載一天比一天高。

問題分析:
1,程式屬於CPU密集型,和開發溝通過,排除此類情況。
2,程式程式碼有問題,出現死迴圈,可能性極大。

問題解決:
1,開發那邊無法排查程式碼某個模組有問題,從日誌上也無法分析得出。
2,記得原來通過strace跟蹤的方法解決了一臺PHP伺服器CPU佔用高的問題,但是通過這種方法無效,經過google搜尋,發現可以通過下面的方法進行解決,那就嘗試下吧。

解決過程:
1,根據top命令,發現PID為2633的Java程序佔用CPU高達300%,出現故障。

2,找到該程序後,如何定位具體執行緒或程式碼呢,首先顯示執行緒列表,並按照CPU佔用高的執行緒排序:
[
[email protected]
logs]# ps -mp 2633 -o THREAD,tid,time | sort -rn

顯示結果如下:
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
root 10.5 19 - - - - 3626 00:12:48
root 10.1 19 - - - - 3593 00:12:16

找到了耗時最高的執行緒3626,佔用CPU時間有12分鐘了!

將需要的執行緒ID轉換為16進位制格式:
[[email protected] logs]# printf "%x\n" 3626
e18

最後列印執行緒的堆疊資訊:
[
[email protected]
logs]# jstack 2633 |grep e18 -A 30


將輸出的資訊發給開發部進行確認,這樣就能找出有問題的程式碼。
通過最近幾天的監控,CPU已經安靜下來了。

相關推薦

生產環境JAVA程序CPU佔用故障排查

轉自:http://blog.chinaunix.net/uid-10449864-id-3463151.html 問題描述: 生產環境下的某臺tomcat7伺服器,在剛釋出時的時候一切都很正常,在執行一段時間後就出現CPU佔用很高的問題,基本上是負載一天比一天高。 問題分

JAVA程序CPU佔用故障排查

問題描述:生產環境下的某臺tomcat7伺服器,在剛釋出時的時候一切都很正常,在執行一段時間後就出現CPU佔用很高的問題,基本上是負載一天比一天高。問題分析:1,程式屬於CPU密集型,和開發溝通過,排除此類情況。2,程式程式碼有問題,出現死迴圈,可能性極大。問題解決:1,開

java生產環境找出佔用CUP較多資源執行緒 相對定位先用top命令找出佔用資源厲害的java程序id

在這裡對linux下、sun(oracle) JDK的執行緒資源佔用問題的查詢步驟做一個小結;linux環境下,當發現java程序佔用CPU資源很高,且又要想更進一步查出哪一個java執行緒佔用了CPU資源時,按照以下步驟進行查詢: 先用top命令找出佔用資源厲害的ja

【轉】Linuxjava程序CPU佔用率分析方法

文章轉載的地址: https://blog.linuxeye.cn/343.html   在工作當中,肯定會遇到由程式碼所導致的高CPU耗用以及記憶體溢位的情況。這種情況發生時,我們怎麼去找出原因並解決。 一般解決方法是通過top命令找出消耗資源高的執行緒id,利用strace命令檢視該執行緒

weblogicjava程序占用cpu的問題排查

技術 .com htm http 執行命令 roo monitor The tin 1、cpu使用情況如圖: 2、執行命令 :jstack 126624 > cpu1112.log (註意執行此命令時的用戶需為執行進程的用戶,所以此處需要用weblogi

java生產環境記憶體調優

Tomcat 效能監控與調優 Nginx 效能監控與調優 JVM 層 GC 調優 JAVA程式碼層調優 1.JVM的引數型別 標準引數(各版本中保持穩定) -help -server -client -version -showversion -cp -classpath

Linux 定位程序CPU佔用的執行緒

一、Top+pstack+gdb的組合拳 閒言少述,先直接上操作例項,再做原理講解。 1.1 用top命令找到最佔CPU的程序 top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 22688 root 20 0 1842

Java應用故障CPU佔用的問題及排查方案

做為應用負責人,誰都希望自己負責的應用能夠在線上跑得順順當當,不出任何錯誤,也不產生任何告警,當然這是最理想的結果,也是做為技術人員希望達到的最終效果。可是實事上應用就像小孩一樣,總會在不經意間,不按你期望的結果執行,如CPU偏高、記憶體佔用偏高、應用沒有響應、應用自動掛掉等

[JVM]Java生產環境效能監控與調優詳解_Btrace

本章關鍵詞:BTrace、攔截、注意事項 一、入門 1.做什麼的? 可以在應用程式不重啟,不修改的情況下,正在執行的情況下,動態的修改位元組碼,達到監控除錯的目的 可以動態的向目標應用程式的位元組碼注入追蹤程式碼 用到的技術 JavaComplierApi、J

[JVM]Java生產環境效能監控與調優_參考文件連結

第二章 jdk8工具集 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html Troubleshooting https://docs.oracle.com/javase/8/doc

Java生產環境效能監控與調優詳解

第8章 JVM位元組碼與Java程式碼層調優 本章帶大家學習JVM的位元組碼指令,從位元組碼層面講解一些常見問題的底層原理(面試能回答上的話, 絕對加分),比如:i++和++i哪一種效率高?迴圈體中做字串+拼接為什麼效率低?然後會重點對String做講解,包括String常量池的變化、String字面

Java線上應用故障排查之一:CPU佔用【轉】

近期java應用,CPU使用率一直很高,經常達到100%,通過以下步驟完美解決,分享一下。 方法一: 轉載:http://www.linuxhot.com/java-cpu-used-high.html 1.jps 獲取Java程序的PID。 2.jstack pid

服務重啟導致的Java服務抖動CPU佔用

今天后臺組發現新上線的應用CPU總是會佔用過高。(心裡暗罵,新來的運維真無聊,閒著沒事看top幹啥) 首先發送命令 jps -lv 查詢執行的程序pid=18182, [[email protected] service-8072]$ jps 19017 Jp

Java線上應用故障排查之一:CPU佔用

一個應用佔用CPU很高,除了確實是計算密集型應用之外,通常原因都是出現了死迴圈。 以我們最近出現的一個實際故障為例,介紹怎麼定位和解決這類問題。 根據top命令,發現PID為28555的Java程序佔用CPU高達200%,出現故障。 通過ps aux | gre

Java生產環境效能監控與調優詳解 第6章 Nginx效能監控與調優

第6章 Nginx效能監控與調優 6-1 nginx安裝 6-2 ngx_http_stub_status監控連線資訊 6-3 ngxtop監控請求資訊 6-4 nginx-rrd圖形化監控

java web伺服器cpu佔用的處理

平時專案中有時遇到cpu過高的情況,在此基於自己有限的經驗寫個分享,此處的伺服器都是基於linux平臺。 cpu的佔有執行緒型別總的來說分為兩種: us :使用者空間佔用CPU百分比 sy :核心空間佔用CPU百分比 一般來講CPU us高的解決方法: CPU us

Linuxjava進程CPU占用率分析方法(二)

當前 lin cpu占用率 方法 printf clas 進制 ESS strac 1. 通過 top 命令查看當前系統CPU使用情況,定位CPU使用率超過100%的進程ID;2. 通過 ps aux | grep PID 命令進一步確定具體的線程信息;3. 通過 ps -

Java中的CPU佔用和記憶體佔用的問題排查

下面通過模擬例項分析排查Java應用程式CPU和記憶體佔用過高的過程。如果是Java面試,這2個問題在面試過程中出現的概率很高,所以我打算在這裡好好總結一下。 1、Java CPU過高的問題排查 舉個例子,如下:  package com.classloading; public class Te

Linux Shell腳本生產環境安全地刪除文件

rm safe 腳本編寫背景 無論是生產環境、測試環境還是開發環境,經常需要使用rm命令刪除&批量一些“重要”目錄下的文件。按照Linux的哲學“小即是美”(一個程序只做一件事)+“用戶清楚自己做什麽”(用戶知道自己想要什麽,也明白自己在做什麽,並且會為自己的行為負責),那麽用戶在執行r

一次生產環境MongoDB備份還原數據

刪除 命令格式 type 庫存 功能 字符 導出文件 信息 fields 最近開發一個版本的功能當中用到了MongoDB分頁,懶於造數據,於是就研究了下從生產環境上導出數據到本地來進行測試。 研究了一下,發現MongoDB的備份還原和MySQL語法還挺類似,下面請看詳細介紹