jmc线程转储_查找线程转储中的异常和错误
jmc線程轉儲
線程轉儲是解決生產問題/調試生產問題的重要工件。 在像過去我們已經討論了幾種有效的線程轉儲故障模式: 堵車 , 跑步機 , RSI , 一個 LL條條大路通羅馬 .........。 在本文中,我們想介紹另一種線程轉儲故障排除模式。
How to capture thread dumps? There are 8 different options to capture thread dumps. You can use the option that is convenient to you. dumps. You can use the option that is convenient to you.線程轉儲通常在線程堆棧跟蹤中包含異常或錯誤。 應該檢查在其堆棧跟蹤中包含異常或錯誤的線程。 因為它們指出了問題的根源。
最近,一個應用程序引發了java.lang.OutOfMemoryError。 從此應用程序捕獲了線程轉儲。 當我們分析線程轉儲時,我們會注意到一個特定的線程正在拋出java.lang.OutOfMemoryError:
Thread 0x3ff781e764e0 at java.lang.OutOfMemoryError.<init>()V (OutOfMemoryError.java:48) at java.lang.ClassLoader.defineClass1(Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class; (Native Method) at java.lang.ClassLoader.defineClass(Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class; (ClassLoader.java:757) at java.lang.ClassLoader.defineClass(Ljava/lang/String;[BII)Ljava/lang/Class; (ClassLoader.java:636) at sun.reflect.GeneratedMethodAccessor37.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (Method.java:498) at com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Ljava/lang/String;[B)Ljava/lang/Class; (Injector.java:125) at com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Ljava/lang/ClassLoader;Ljava/lang/String;[B)Ljava/lang/Class; (Injector.java:48) at com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector.prepare(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Class; (AccessorInjector.java:51) at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(Ljava/lang/reflect/Field;)Lcom/sun/xml/bind/v2/runtime/reflect/Accessor; (OptimizedAccessorFactory.java:128) at com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Lcom/sun/xml/bind/v2/runtime/JAXBContextImpl;)Lcom/sun/xml/bind/v2/runtime/reflect/Accessor; (Accessor.java:213) at com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.<init>(Lcom/sun/xml/bind/v2/runtime/JAXBContextImpl;Lcom/sun/xml/bind/v2/runtime/Transducer;Lcom/sun/xml/bind/v2/runtime/reflect/Accessor;)V (TransducedAccessor.java:195) : : at com.sun.xml.ws.client.WSServiceDelegate.getPort(Ljavax/xml/ namespace /QName;Ljava/lang/Class;[Ljavax/xml/ws/WebServiceFeature;)Ljava/lang/Object; (WSServiceDelegate.java:274) /QName;Ljava/lang/Class;[Ljavax/xml/ws/WebServiceFeature;)Ljava/lang/Object; (WSServiceDelegate.java:274) at com.sun.xml.ws.client.WSServiceDelegate.getPort(Ljavax/xml/ namespace /QName;Ljava/lang/Class;)Ljava/lang/Object; (WSServiceDelegate.java:267) /QName;Ljava/lang/Class;)Ljava/lang/Object; (WSServiceDelegate.java:267)從該堆棧跟蹤中,我們能夠確定該線程在嘗試將xml轉換為java對象時遇到了OutOfMemoryError。
顯然沒有為該應用程序分配足夠的內存來處理大型XML有效負載。 因此,當將大型XML發送到此應用程序時,它開始拋出OutOfMemoryError。 當分配了足夠的內存(即,增加-Xmx值)時,問題得到解決。 因此,在線程轉儲中查找“異常”或“錯誤”是確定問題根源的好模式。
但是在線程轉儲中查找異常或錯誤并不是一件容易的事。 因為線程轉儲往往包含數百或數千個線程。 每個線程將具有多行堆棧跟蹤。 遍歷堆棧跟蹤的每一行以發現異常或錯誤是一個繁瑣的過程。 線程轉儲分析工具在這里很方便。 您可能考慮使用免費的線程轉儲分析工具,例如: fastThread , IBM TDMA , Samurai …來分析應用程序線程轉儲。
將線程轉儲上載到fastThread應用程序時,它將生成根本原因分析報告。 此報告中的一節之一是“異常”。 在本節中,fastThread應用程序報告所有引發異常或錯誤的線程。 以下是本節的屏幕截圖:
圖:fastThread報告中的“異常”部分您可能會注意到,本節報告了所有在堆棧跟蹤中具有“異常”或“錯誤”的線程。 如果本節中報告了任何線程,則應考慮調查那些線程堆棧跟蹤以確定問題的根源。
翻譯自: https://www.javacodegeeks.com/2020/06/look-for-exceptions-errors-in-thread-dumps.html
jmc線程轉儲
總結
以上是生活随笔為你收集整理的jmc线程转储_查找线程转储中的异常和错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新硬盘linux(新硬盘 linux)
- 下一篇: 使用poi统计工作职责