我们遇到了一个问题,我们的JVM (Weblogic上的HotSpot)终止时出现了致命错误。
SIGSEGV (0xb) at pc=0xffffffff7a045f1c我们对致命错误日志(Oracle: Fatal Error Log Troubleshooting)进行了分析和重新分析。错误日志包括在错误发生时运行的线程及其跟踪(下面的前三行读取跟踪)。每次发生致命错误时,跟踪都是相同的。
J com.bea.wsrp.producer.container.ServletRequestImpl.setHeaders(Ljava/util/Map;Ljava/util/LinkedHashMap;Ljava/lang/String;)V
j com.bea.wsrp.producer.container.RequestFactory.createServletRequest(Ljavax/servlet/http/HttpServletRequest;Lcom/bea/wsrp/model/markup/IRuntimeContext;Lcom/bea/wsrp/model/markup/IMarkupParams;Lcom/bea/wsrp/producer/handlers/ServiceHandler$InvocationType;)Lcom/bea/wsrp/producer/container/ServletRequestImpl;+213
j com.bea.wsrp.producer.container.RequestFactory.createServletRequest(Ljavax/servlet/http/HttpServletRequest;Lcom/bea/wsrp/model/markup/IRuntimeContext;Lcom/bea/wsrp/model/markup/IMarkupParams;Lcom/bea/wsrp/model/markup/state/IOpaqueState;Lcom/bea/wsrp/model/markup/INavigationalContext;Lcom/bea/wsrp/producer/handlers/ServiceHandler$InvocationType;)Lcom/bea/wsrp/producer/container/ServletRequestImpl;+5我的问题是,给定堆栈跟踪和我们的源代码,当我们运行的代码的最后部分大约80行跟踪并且非常通用(意味着许多不同的操作通过它)时,我们如何计算出需要的操作(或者更彻底地测试代码部分)来重新创建这个问题?有没有什么静态代码分析方法可以帮上忙?搜索字节码会有帮助吗?或者我们被卡住了,无法访问供应商的源代码?
试错测试(包括我们的标准性能/功能脚本)无法重新创建问题,甚至无法使用setHeaders方法(上面跟踪的第一行)。
感谢您对解决此问题的新方法的帮助。
发布于 2015-01-22 00:53:59
如果你的意思是重新创建相同的线程状态,你不知道它死的时候是什么状态,你可以使用Thread.currentThread().setName(...)
有些人使用它来设置线程名称中的线程状态信息,以便以后的堆栈转储分析可以为您提供一些状态信息,例如,线程名称可以是这样的:
thread [abc] values [tx=1234, state=state1, user=someuser, starttime=123456]
https://stackoverflow.com/questions/28072566
复制相似问题