不想被美国同事笑话,系统当机如何解决

大家好,我的系统是solaris 10 + WAS6.0.2.25,最近业务量大,经常当机,都有一年没当过了,也没有大的改动,现在频繁当机(数据库没事,就是WAS线程经常挂起,一两周挂一次,时间不定),说明经济已经复苏了。系统安装在美国,我让美国同事发java thread dump过来想找出到底挂起的线程是跑哪段代码引起的,结果他发过来的文件名为java_pid23256.hprof.1254406550602,有300M,里面的内容跟我以前看到过的一个java core dump有点不一样。我的疑问如下:
1.到底java core dump跟java thread dump有什么区别,或者说两者是一个概念?
2.同事发过来的文件是二进制的,untraedit打开里面有很多乱码,当然也有很多正常的文字,但是我以前看过网上有人发过dump文件内容是没有乱码的,那个文件文件名为javacore[1].20070608.163300.4468.txt
3.数据库是好的正常运行的,可是WAS容器里面却会挂起线程,这个是什么原因引起的,我查看了一下一个存储过程频繁操作13张transaction表(Sybase),里面没有显式commit的话,是不是就会锁表?这个存储过程抱歉不敢贴出,大致流程是
存储过程
update search
调用其他子存储过程1
search 调用其他子存储过程2
调用其他子存储过程3
调用其他子存储过程4
调用其他子存储过程5
insert另外一张表

上面这个存储过程是做业务的时候必跑的,是不是需要改进?里面有大量的begin end,操作完所有的表和子存储过程后只加一个commit,他是否是罪魁祸首?(当机当天的application log经常显示这操作的13张表死锁)不知道该如何改进?

4.WAS线程挂起还有其他原因吗?如果是OOM引起的,javacore里面可以搜索出什么关键字?
5.我用jprofile打开这个java_pid23256.hprof.1254406550602文件,只能看看一些方法调用的次数,不能看到其他引起线程挂起的有用的信息,请问有没有什么好的工具做有意义的分析的?java版本是1.4,所以1.5的jmap不能打开的。
6.我这个美国同事用的什么方法生成这个java_pid23256.hprof.1254406550602文件的?我试了在solaris 10 + WAS6.0.2.25中使用kill -3 PID生成的java thread dump只能直接注入进native_stdout.log文件中,不会生成单独的文件啊?我查看了一些帖子大概知道可以配置生成这个文件名字格式,但是在solaris环境下想听听专家的意见,谢谢。不好意思问美国佬,怕被笑话。

7.系统中挂起的线程是因为哪行业务代码引起的?这个如何体现在java core dump中?


附录:美国同事发过来的java core dump片段:
ØWARNING90072158<





我以前见过网友发出过的javacore文件javacore[1].20070608.163300.4468.txt,里面可以直接对应到业务类包了。 4XMNATIVESTCKEX**** Exception 2 received when dumping native stack. 3XMTHREADINFO "WebContainer : 24" (TID:1028ED70, sys_thread_t:A7916A8, state:MW, native ID:F0037BB0) prio=5 4XESTACKTRACE at cn.sh.guanghua.alertcore.module.common.NoticeAction.action(NoticeAction.java(Compiled Code)) 4XESTACKTRACE at cn.sh.guanghua.moduleaction.Actions.process(Actions.java(Compiled Code)) 4XESTACKTRACE at cn.sh.guanghua.moduleaction.Actions.doPost(Actions.java(Compiled Code)) 4XESTACKTRACE at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code)) 4XESTACKTRACE at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code)) [ 本帖最后由 jameshwh 于 2009-10-12 15:49 编辑 ]
参与7

7 同行回答

iamcanghai iamcanghai 工程师 湖北中烟
建议你把你的core和dump文件打包发给IBM工程师帮你看看,他们有专业的工具可以RUN出具体代码出问题在哪里,我们每次出现这种问题都是这样处理的。显示全部
建议你把你的core和dump文件打包发给IBM工程师帮你看看,他们有专业的工具可以RUN出具体代码出问题在哪里,我们每次出现这种问题都是这样处理的。 收起
2009-12-27
浏览942
26578777 26578777 IT 北京安宁
你可以加我的qq,我有个不错的文档,可以查找不具体那个线程占用的cpu高。显示全部
你可以加我的qq,我有个不错的文档,可以查找不具体那个线程占用的cpu高。 收起
2009-12-04
浏览941
luckyleo luckyleo 项目经理 山东联博软件有限公司
Core的意思是内存, Dump的意思是扔出来, thread是线程java core dump就是java内存或者核心类抛出来的,比如,那个类内存溢出了或者,方法溢出了等java thread dump就是java线程抛出来的,比如现成挂起,死锁等Thread dumps出来的信息包含线程;线程的运行状态、标识和调用的堆栈;调用...显示全部
Core的意思是内存, Dump的意思是扔出来, thread是线程
java core dump就是java内存或者核心类抛出来的,比如,那个类内存溢出了或者,方法溢出了等
java thread dump就是java线程抛出来的,比如现成挂起,死锁等
Thread dumps出来的信息包含线程;线程的运行状态、标识和调用的堆栈;调用的堆栈包含完整的类名,所执行的方法,如果可能的话还有源代码的行数
Thread Dump能诊断的问题包括:
查找内存泄露,常见的是程序里load大量的数据到缓存 ,发现死锁线程 收起
政府机关 · 2009-10-14
浏览1020
jameshwh jameshwh SSE HP
多谢各位热心解答,其实我想问到底java core dump跟java thread dump有什么区别,或者说两者是一个概念? 根据systemout文件中挂起的线程号应该在core dump还是thread dump中找到运行的代码是什么。。。。。。...显示全部
多谢各位热心解答,其实我想问到底java core dump跟java thread dump有什么区别,或者说两者是一个概念? 根据systemout文件中挂起的线程号应该在core dump还是thread dump中找到运行的代码是什么。。。。。。 收起
2009-10-14
浏览967
泊涯 泊涯 系统测试工程师 高伟达公司
打下GC 看是不是内存出问题HProf非常消耗资源,一般是不要在生产系统使用。SystemErr.log 系统出错日志 native_stderr.log Gc垃圾收集日志 JDBC 看看显示全部
打下GC 看是不是内存出问题
HProf非常消耗资源,一般是不要在生产系统使用。
SystemErr.log 系统出错日志
native_stderr.log Gc垃圾收集日志
JDBC 看看 收起
银行 · 2009-10-13
浏览963
dkm dkm 软件架构设计师 广州八斗软件科技有限公司
你可先总结下目前的情况,收集可以收集的日志信息,通过分析日志应该可以将问题范围缩小,再进一步定位问题点吧。  可参考以下几点分析:1、  既然问题表现是宕机的话,又备有前提条件(系统已稳定运行一段时间无异常;近期业务量变大)    可先从业务方...显示全部
你可先总结下目前的情况,收集可以收集的日志信息,通过分析日志应该可以将问题范围缩小,再进一步定位问题点吧。
  可参考以下几点分析:
1、  既然问题表现是宕机的话,又备有前提条件(系统已稳定运行一段时间无异常;近期业务量变大)
    可先从业务方面和应用代码管理方面确认
       应用程序和数据结构近期是否有变化(确认新增代码的改动是否有影响)
      业务量增大,主要是什么业务加大,用户会频繁使用什么场景,或者业务在触发该场景前,系统还需要进行什么样的操作(根据业务功能点,缩小问题范围,可针对性的检查或者进行一轮压力测试,任务可交给测试部分协助)
2、系统宕机,信息收集与分析
       a、宕机后,系统是否可自动恢复,宕机时,所有功能是否都不可访问
       b、宕机后,服务器内存,cpu使用情况
       c、宕机后,系统日志部分信息,可检查SystemOut.log,和SystemErr.log  
       d、宕机如是因为堆泄漏的话,会有heapdump文件,可根据文件分析溢出内容,查看是否因为业务量增大,使得堆空间大小不能满足,可调整大小(这里和服务器和业务和设计有关,可找开发人员一起讨论下,详细检查下缓存与临时对象的使用率)
      e、把详细垃圾回收打开,查看垃圾回收的频度,与空间分配率
3、数据库角度分析
     1、既然有经验分析是事务问题,可在数据库端检查,数据库事务使用情况,查看事务锁和表锁情况,一般was线程挂起,都是因为资源等待时间过长导致的,业务系统上,最多的操作就是数据库操作,牵涉到太多的设计问题,因此,这里可以考虑从数据库端入手,如数据库日志分析,或者运行时情况分析。
    2、让开发根据业务功能点评审代码,检查业务逻辑,检查相关sql,或者存储过程,确认在大并发请求下,是否会出现多个请求多个线程资源争夺情况,如是是这样就要考虑逻辑优化了。
      
   以上是部分个人建议,您除了收集信息外,也可在公司内部寻找资源一起探讨,说不定开发人员那里的直觉也是个不错的建议。

   工具方面,可以考虑用ibm的isa吧。也可到监控优化板块去看下一些其他资料。 收起
互联网服务 · 2009-10-13
浏览980
ziying ziying 系统工程师 信息有限公司
3.只加一个commit,他是否是罪魁祸首?(当机当天的application log经常显示这操作的13张表死锁)不知道该如何改进? 只有一个commit,应该是从数据完整性考虑,显示13张表死锁,具体日志呢?可以看看存储过程的执行时间,是否执行太久了,看能否进行优化.4.WAS线程挂起还有其他原因吗?如果是O...显示全部
3.只加一个commit,他是否是罪魁祸首?(当机当天的application log经常显示这操作的13张表死锁)不知道该如何改进?
只有一个commit,应该是从数据完整性考虑,显示13张表死锁,具体日志呢?可以看看存储过程的执行时间,是否执行太久了,看能否进行优化.
4.WAS线程挂起还有其他原因吗?如果是OOM引起的,javacore里面可以搜索出什么关键字?
线程挂起一般是程序执行时间过长导致,和OOM无关. 收起
政府机关 · 2009-10-13
浏览925

提问者

jameshwh
SSE HP
评论5

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2009-10-12
  • 关注会员:0 人
  • 问题浏览:5901
  • 最近回答:2009-12-27
  • X社区推广