我们遇到了一个问题,我们的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方法(上述跟踪的第一行)。
感谢您对解决此问题的新方法提供任何帮助。
答案 0 :(得分:1)
如果你的意思是重新创建相同的线程状态,你不知道它死后是什么,你可以使用Thread.currentThread().setName(...)
有些人使用它在线程名称中设置线程状态信息,以便稍后的堆栈转储分析可以为您提供一些有状态信息,例如线程名称可能类似于:
thread [abc] values [tx=1234, state=state1, user=someuser, starttime=123456]