免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 943 | 回复: 0
打印 上一主题 下一主题

[转载]是谁杀死了我的Java应用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-03 17:59 |只看该作者 |倒序浏览

是谁杀死了我的Java应用
经常有客户询问这样的问题:在服务器上的Java进程或应用服务器进程不知道怎么回事被杀死或退出了,并且发生的概率很低,3天才发生一次,能告诉怎样找到原因吗?如果你在使用Solaris10,那么可以使用下面的方法来查找Java进程退出的原因:
如果是Java进程不知道什么原因退出或被杀死,想要分析具体原因,一般来说分下面几步:
1 拿到Java应用程序的日志文件。
一般来说日志文件中会有很应用相关的错误信息。Java进程异常退出的原因最有可能就是应用程序本身的问题。因此检查Java应用程序的日志文件可能是最快定位到错误的方法。
2 查找JVM的致命错误日志
如果应用程序日志文件中没有发现什么线索。那么还可以查看 JVM的致命错误日志。有些致命的错误,比如JNI或虚拟机本身产生的错误,可能使得Java应用程序来不及写日志就退出了。这时候可以查一个以 "hs_err_pid" 开头的日志名,例如hs_err_pid1125.log,其中1125是进程号。这个文件中也记录了一些宝贵的信息来提供一些线索,特别是Java自身的一些Bug。这个文件一般为于当前的工作目录中。用户可以用find命令自己搜索到。
3 查找操作系统的core dump文件
作为被操作系统所调度的进程,Java进程也会在不同的信号下产生Core Dump文件,例如Sig_ill和Seg_segv。这些非常严重的错误的确会使得Java虚拟机根本来不及产生任何日志就宕了。拿到core dump文件就可以使用很多工具来分析具体原因了,例如jmap, jstack等等都可以友好的进行Java进程的Core文件的分析。一般来说,Core文件也放到进程的当前工作目录,用户可以用find命令搜索 “core”。另外可以用coreadm来预先指定core文件存放的地方以及文件名的格式,例如:coreadm -g /var/core/core.%f.%p.%t
4使用Dtrace查找“是谁杀死了Java进程”
但是,有很多情况,进程被杀死的原因很复杂。有可能被别的进程以外杀掉,或被一些脚本不小心kill掉,或者被管理员(或入侵者kill -9)处理掉。这些情况都不会产生日志文件和core dump文件。这些情况很难跟踪。但如果是Solaris10下,可以使用下面的Dtrace脚本来确定“是谁杀死了Java进程”
#!/usr/sbin/dtrace -qs
proc:::signal-send
/args[1]->pr_pid == $1/
{
        printf("%s(pid:%d) is sending signal %d to %s\n", execname, pid, args[2],args[1]->pr_fname);
}
如何运行(1125)是进程号
$ ./sig1.d 1125
sched(pid:0) is sending signal 24 to bc
sched(pid:0) is sending signal 24 to bc
bash(pid:3987) is sending signal 15 to bc
bash(pid:3987) is sending signal 15 to bc
bash(pid:3987) is sendg signal 9 to bc

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/34599/showart_373543.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP