Centos下JAVA进程莫名自杀了

NET920 2015-10-06 10:41:09
一个服务端程序运行在Centos上,服务器内存16G,如果启动时没有限制JVM内存时,过一两天后此JAVA进程会占用4G多内存,太吃内存了;今天限制了JVM内存,发现运行几小时后,此程序对应的JAVA进程竟然自杀了!!!而且没有任何错误输出!!请教各位,如何排查?

#!/bin/sh
JAVA_HOME=/usr/lib/jdk1.7.0_79
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
ulimit -HSn 65536

#java -jar -Xms2048m -Xmx2048m /home/do.jar >>/home/out.log #这种写法进程在一段时间后会自杀
java -jar /home/do.jar >>/home/out.log #这种写法进程不会自杀,但随着时间推移,内存占用越来越大!!

...全文
1146 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjxtju 2015-10-09
  • 打赏
  • 举报
回复
猜测: >>重定向标准输出到文件,相当于你的java程序打开了一个文件在内存里当做标准输出,因为你的log随着时间推移太大,而jvm又不会自动把文件写入到硬盘,于是程序占用内存越来越大.最后内存不够用自己因分配不了更多内存,直接异常终止了. 也许用管道能解决问题. java -jar /home/do.jar | cat >> out.log 这样一段时间后cat可能也会越来越占内存,不清楚,在于cat会不会自动存硬盘.但do.jar应该不会终止才对. 因为你的log实在有点大,长时间运行后也许需要考虑设定log的最大值.写个脚本实现,或者linux有自己的工具实现之类的. 也许 java -jar /home/do.jar | split 会解决问题, 让split 收到一定数据后直接写到硬盘就好了.需要指定下 split的参数, 因为分太小文件会太多. 试试吧,linux应该有自己的log工具,也许通过管道连接log工具直接就解决了.
HeiYanQuanDeMao 2015-10-08
  • 打赏
  • 举报
回复
有可能被,linux系统本身kill掉了,查看一下,/var/log/messages还有/var/log/dmesg是否有kill相关信息
rumlee 2015-10-07
  • 打赏
  • 举报
回复
检查下程序内存泄漏问题,程序自动挂了应该是内存溢出了。

62,636

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧