欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java應用/JVM宕機排查步驟操作

 更新時間:2020年09月17日 08:57:57   作者:Mistra丶  
這篇文章主要介紹了Java應用/JVM宕機排查步驟操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

相信大家都遇到過,自己的Java應用運行一段時間就宕機了或者響應請求特別慢。這時候就需要我們了來找出問題所在了。絕大部分都是代碼問題導致的。

一、服務宕機

如果是服務宕機,發(fā)生致命問題導致進程已經(jīng)死掉了,那么已經(jīng)訪問不了了,通常都是CPU問題引起的,程序一般會自己生成javacore文件,一般生成位置在/root目錄或jar包同目錄下。JavaCore文件主要保存的是Java應用各線程在某一時刻的運行的位置,即JVM執(zhí)行到哪一個類、哪一個方法、哪一個行上。

找到這個文件,執(zhí)行命令

gdb java <文件>

bt

如果文件沒有損壞的話可以看到完整的棧調(diào)用信息。就可以定位到問題代碼所在。

我曾經(jīng)就因為底層調(diào)用的一個geo庫出問題,導致程序直接掛掉,分析core文件可以清晰的看到native方法的調(diào)用。

二、服務響應請求慢

出現(xiàn)這個問題一般都是內(nèi)存溢出,GC線程一直在重復GC,沒有線程來處理用戶請求,或者問題代碼導致CPU占用過高。

程序崩潰前會生成HeapDump文件,也可以手動生成,HeapDump是一個二進制文件,它保存了某一時刻JVM堆中對象使用情況。

在JVM啟動參數(shù)要配置好HeapDump的生成位置和配置打印gc日志。這樣才能排查問題。

先分析GC日志

在線分析工具地址:https://gceasy.io/

把gc文件上傳就好了,就可以看到分析結(jié)果。重點關(guān)注什么區(qū)域的GC占用最多時間。

離線分析工具:GCViewer 是一款開源的GC日志分析工具。

如果程序內(nèi)存溢出,通過分析gc文件可以發(fā)現(xiàn)程序內(nèi)存占用機會100%而且一直重復GC。

分析HeapDump文件

1、先找到Java應用的pid

ps -ef | grep java 或者 jps -l 查看

2、查看堆內(nèi)存使用量

jmap -heap <pid>

3、查看Java進程中的每一個線程的情況(linux),可以清晰的看到每一個線程的cpu及內(nèi)存使用情況

top -Hp <pid>

window下可以借助工具 Process Explorer,

4、打印線程快照信息,保存到文件xxx.txt中方便查看

jstack <pid> > xxx.txt

參考這一篇文章: http://www.dbjr.com.cn/article/195797.htm

5、通過top -Hp <pid>看到的線程id是10進制的,我們輸出到xxx.txt中的是16進制,所以需要轉(zhuǎn)一下,找一個異常線程tid

printf "%x" <tid> 假如輸出為 1111

6、在xxx.txt文件中查找tid為1111的棧信息,可以看到這個線程在干什么,定位到問題代碼。

7、程序宕機會自動產(chǎn)生dump文件,若沒有宕機就手動導出dump文件

jmap -dump:format=b,file=文件名 <pid>

桌面分析工具:Eclipse Memory Analyzer,它有windows版的和Linux版的

windows下:把HeapDump文件放進去就可以了,分析完后,很直觀的看到當前內(nèi)存占用量最高的是某個類的某個參數(shù)。持有了多少個對象,這些對象占用了多少內(nèi)存,從而定位到問題代碼。

Linux下:先把Eclipse Memory Analyzer版上傳到服務器,解壓,假如/home/mat為解壓后路徑,執(zhí)行命令

/home/mat/ParseHeapDump.sh <文件名> org.eclipse.mat.api:suspects prg.eclipse.mat.api:overview

org.eclipse.mat.api:top_components

分析完之后會在當前文件生成結(jié)果文件。下載到本地查看即可。

以上這篇Java應用/JVM宕機排查步驟操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis遷移到Mybatis-Plus的實現(xiàn)方法

    Mybatis遷移到Mybatis-Plus的實現(xiàn)方法

    這篇文章主要介紹了Mybatis遷移到Mybatis-Plus的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • @valid 無法觸發(fā)BindingResult的解決

    @valid 無法觸發(fā)BindingResult的解決

    這篇文章主要介紹了@valid 無法觸發(fā)BindingResult的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java中的FileInputStream 和 FileOutputStream 介紹_動力節(jié)點Java學院整理

    Java中的FileInputStream 和 FileOutputStream 介紹_動力節(jié)點Java學院整理

    FileInputStream 是文件輸入流,它繼承于InputStream。FileOutputStream 是文件輸出流,它繼承于OutputStream。接下來通過本文給大家介紹Java中的FileInputStream 和 FileOutputStream,需要的朋友可以參考下
    2017-05-05
  • 深入了解java.util.Arrays的使用技巧

    深入了解java.util.Arrays的使用技巧

    在這篇文章中,我們將來帶大家看看?java.util.Arrays?,我們可以使用?Arrays?創(chuàng)建,比較,排序,搜索,stream?和轉(zhuǎn)化數(shù)組,感興趣的小伙伴可以了解一下
    2023-02-02
  • SpringMvc實現(xiàn)簡易計算器功能

    SpringMvc實現(xiàn)簡易計算器功能

    這篇文章主要為大家詳細介紹了SpringMvc實現(xiàn)簡易計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 解決SpringBoot中使用@Transactional注解遇到的問題

    解決SpringBoot中使用@Transactional注解遇到的問題

    這篇文章主要介紹了SpringBoot中使用@Transactional注解遇到的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 淺析Java中Apache BeanUtils和Spring BeanUtils的用法

    淺析Java中Apache BeanUtils和Spring BeanUtils的用法

    這篇文章主要介紹了Java中Apache BeanUtils和Spring BeanUtils的用法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 使用cmd根據(jù)WSDL網(wǎng)址生成java客戶端代碼的實現(xiàn)

    使用cmd根據(jù)WSDL網(wǎng)址生成java客戶端代碼的實現(xiàn)

    這篇文章主要介紹了使用cmd根據(jù)WSDL網(wǎng)址生成java客戶端代碼的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Java集合Stack源碼詳解

    Java集合Stack源碼詳解

    java工具包中的Stack是繼承于Vector(矢量隊列)的,由于Vector是通過數(shù)組實現(xiàn)的,這就意味著,Stack也是通過數(shù)組實現(xiàn)的,而非鏈表。當然,我們也可以將LinkedList當作棧來使用!
    2018-05-05
  • Springboot整合hibernate validator 全局異常處理步驟詳解

    Springboot整合hibernate validator 全局異常處理步驟詳解

    本文分步驟給大家介紹Springboot整合hibernate validator 全局異常處理,補呢文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01

最新評論