我注意到这种行为只有两次。一次使用OSS软件ElasticSearch,并且一次使用一些自定义编写的软件。行为是这样的,使用退出代码6启动Java应用程序段错误,唯一有效的是重启。该系统看似健康;大量内存,交换,磁盘等。系统日志报告没有异常,但每次我们尝试重新启动应用程序时java都会崩溃。当我们尝试重新启动它时,应用程序没有记录任何有关任何问题的信息(这使我认为这是JVM的一个问题,或者在应用程序日志记录逻辑启动之前发生了段错误。是JVM本身的问题,还是应用程序?
Jun 8 15:13:48 node3 kernel:java [7362]:segfault at 00000000417f71a8 rip 00002aaaaaf67812 rsp 00000000417f71b0 error 6
重新启动Linux主机可以解决问题,我发现这个问题很奇怪。好像JVM或应用程序中的一个条件在尝试重新启动之间是持久的(就像正在运行的java程序之外的共享资源处于孤立/受损状态 - 信号量,共享内存,消息队列),但是有问题的程序确实如此似乎没有使用IPCS ......
在这种情况下,Java应用程序出现问题并且Java Garbage Collection一直在运行,并且占用了大量CPU,因此我们关闭了应用程序。尝试重新启动失败并出现上述错误。我没有精通Java内部的任何地方,我不确定会导致段错误的原因,也不知道为什么重启会解决问题。我不是重新启动系统以纠正问题的粉丝,因为重新启动通常无法解决问题的根本原因。这不是一个重复的问题,但我很困惑为什么重新启动会纠正这个问题。
运行过程的限制是非常慷慨的,我没有在日志中看到任何指示达到限制:
限制软限制硬限位单位
最大CPU时间无限制无限秒
最大文件大小无限制无限字节
最大数据大小无限制无限字节
最大堆栈大小10485760无限字节
最大核心文件大小0 0字节
最大居民设置无限制无限字节
Max处理790527 790527进程
最大打开文件131072 131072文件
最大锁定内存32768 32768字节
最大地址空间无限制无限字节
最大文件锁无限制无限锁
最大未决信号790527 790527信号
最大消息大小819200 819200字节
最好的优先级0 0
最大实时优先级0 0
Java是jdk1.6.0_29,主机操作系统是Oracle Linux(RHEL)5.8。
任何线索或见解?