V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
esolve
V2EX  ›  问与答

springboot 启动的 Java 进程默默终止,如何检查出原因?

  •  
  •   esolve · 2017-10-23 18:25:11 +08:00 · 3480 次点击
    这是一个创建于 2613 天前的主题,其中的信息可能已经有所发展或是发生改变。

    springboot 启动的 java 进程,运行在 linux 下,不知不觉的默默终止

    ps 的时候突然发现看不到了

    日志用的 debug 等级,看不出问题在哪

    如何排查?

    18 条回复    2017-11-21 23:14:14 +08:00
    zhaohui318
        1
    zhaohui318  
       2017-10-23 18:38:05 +08:00
    springboot 那个版本?用的什么容器? tomcat ?
    jalja27
        2
    jalja27  
       2017-10-23 18:43:34 +08:00 via Android
    运行一段时间才中止的? jmx 能看出 jvm 的运行情况,也有可能 jdk 版本问题,很可能不是 java 层面的问题,要 linux 运维处理了
    esolve
        3
    esolve  
    OP
       2017-10-23 18:44:29 +08:00
    @zhaohui318 tomcat
    1.5.2
    tomcat
    esolve
        4
    esolve  
    OP
       2017-10-23 18:45:38 +08:00
    @jalja27 jdk 版本没问题啊

    linux 下如何排查进程问题?
    sagaxu
        5
    sagaxu  
       2017-10-23 18:52:42 +08:00
    先查一下 syslog,看看有没有诸如 OOM 这类蛛丝马迹,我记得你发过内存占用高的帖子
    生成 core 文件也要打开,以防某些用了 JNI 的库写内存写飞掉了,gclog 也要打开
    然后还要排查一下有没有什么定时脚本不留神 kill 掉了它
    代码里面也要排查一下有没有主动 exit 的地方
    启动之后也要测试一下功能,看看是不是没启动起来就挂了
    排查不出来,部署到独立的 tomcat 里试试,那里 log 会更详细一些
    esolve
        6
    esolve  
    OP
       2017-10-23 18:57:03 +08:00
    @sagaxu 是 OOM 杀了进程,晕
    OOM 杀了进程,只在系统日志里标明吗?
    java 项目自身的日志为何没有迹象?
    另外,如何找到 OOM 的具体原因啊?
    xmh51
        7
    xmh51  
       2017-10-23 18:58:38 +08:00
    查看是否是内存不足。
    xmh51
        8
    xmh51  
       2017-10-23 19:00:18 +08:00
    @esolve linux 有内存管理的。内存不足时,会按策略杀进程。
    sagaxu
        9
    sagaxu  
       2017-10-23 19:03:06 +08:00
    @esolve JVM 自己并不知道自己被 OOM Killer 杀掉了,因为 OOM 是强制性的,不带商量的
    发生 OOM,可能是数据量真的很大,需要那么大内存,也有可能是代码里有内存泄露,具体业务具体分析
    esolve
        10
    esolve  
    OP
       2017-10-23 19:05:31 +08:00
    @sagaxu 我的意思是,如何得知“发生 OOM 时,该占用了多少内存“
    esolve
        11
    esolve  
    OP
       2017-10-23 19:05:45 +08:00
    @sagaxu 我的意思是,如何得知“发生 OOM 时,该进程占用了多少内存“
    misaka19000
        12
    misaka19000  
       2017-10-23 19:09:01 +08:00 via Android
    @esolve 对进程做个监控就行了吧
    sagaxu
        13
    sagaxu  
       2017-10-23 19:33:19 +08:00
    @esolve 打开 gclog,可以看到内存信息,或者写个脚本每隔 100 毫秒记录一下内存占用
    ipeony
        14
    ipeony  
       2017-10-23 20:10:05 +08:00 via Android
    启动的时候加 oom dump 参数
    jalja27
        15
    jalja27  
       2017-10-23 21:17:54 +08:00 via Android
    @esolve 为什么会 kill 掉 java ?服务器上部署多个服务?还是 Vps 这种?正常来说 Jvm 参数可以设置内存大小,没必要通过操作系统或者母鸡策略 kill 掉 java 进程。如果是 Vps 这种但是正常的
    esolve
        16
    esolve  
    OP
       2017-10-23 22:47:57 +08:00
    @jalja27 母鸡策略? 不是 vps,是内部的一台测试机器
    timi
        17
    timi  
       2017-10-24 10:41:58 +08:00
    启动的时候加 HeapDumpOnOutOfMemoryError 参数,然后挂掉的时候会有 OOM 文件,至今遇到两次挂基本都是 OOM (还有一次被我们测试 kill 了,定位了好久)
    jack80342
        18
    jack80342  
       2017-11-21 23:14:14 +08:00
    这几天翻译了 Spring Boot 最新的官方文档,欢迎👏fork,https://www.gitbook.com/book/jack80342/spring-boot/details
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3430 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:51 · PVG 18:51 · LAX 02:51 · JFK 05:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.