V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
esolve
V2EX  ›  问与答

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

  •  
  •   esolve · Oct 23, 2017 · 3819 views
    This topic created in 3108 days ago, the information mentioned may be changed or developed.

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

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

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

    如何排查?

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

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