请问一般简单的线上服务自动重启的最佳实践是怎样的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
yesterdaysun
V2EX    Java

请问一般简单的线上服务自动重启的最佳实践是怎样的?

  •  
  •   yesterdaysun Mar 1, 2021 4055 views
    This topic created in 1885 days ago, the information mentioned may be changed or developed.

    SpringBoot 部署了一个单机的小型的图片服务器, 因为有一些特殊的处理逻辑加上只有特定的访问流量, 是纯自己写加部署的, 没有用一些第三方的库.

    有时候流量一大, 或者遇到一些奇怪的 bug 应用会无响应或者进程直接退出, 这些问题暂时不管, 会慢慢修, 出问题的时候, 线上的应用一般当场重启就 OK 了, 不过挂的频率有些高了, 可能 1-2 天就会挂掉 1 次.

    现在的做法就是暴露一个 actuator endpoint 来做 health check, 然后人工时不时看一下是不是还活着, 死了就上去手动 kill/restart, 我知道这很傻, 但是找了一圈没发现有相应的办法, 所以有没有什么库 /服务 /程序 /架构可以实现自动检查健康状态, 然后根据一定规则自动重启之类的? 或者这方面的最佳实践是啥?

    21 replies    2021-03-17 11:25:33 +08:00
    NoahNye
        1
    NoahNye  
       Mar 1, 2021
    使用 systemd,restart 设置成 on-failure
    xcc880
        2
    xcc880  
       Mar 1, 2021
    如 1#所说用 systemd, 或者尝试 docker, restart 设置为 always.
    icebay
        3
    icebay  
       Mar 1, 2021
    > 现在的做法就是暴露一个 actuator endpoint 来做 health check, 然后人工时不时看一下是不是还活着, 死了就上去手动 kill/restart, 我知道这很傻, 但是找了一圈没发现有相应的办法, 所以有没有什么库 /服务 /程序 /架构可以实现自动检查健康状态, 然后根据一定规则自动重启之类的? 或者这方面的最佳实践是啥?

    另一种做法,写个脚本定时运行检查,自动重启
    tianshiyeben
        4
    tianshiyeben  
       Mar 1, 2021
    www.wgstart.com WGCLOUD 监控系统,安装后用进程监控或服务接口监控都可以,支持邮件告警,也可以集成微信钉钉告警
    theOneMe
        5
    theOneMe  
       Mar 1, 2021
    supervisor
    yesterdaysun
        6
    yesterdaysun  
    OP
       Mar 1, 2021
    @NoahNye @xcc880 @theOneMe 如果我理解的没错, 这种守护进程型的东西必须是服务进程退出才会生效, 但是现在很多时候是服务挂起, 就是进程还在但是 request 无响应, 这种情况应该没用吧

    倒是 @tianshiyeben 说的监控系统有点像, 但是这和 SpringBootAdmin 差不多, 也只是做到了告警, 但是无法自动操作重启应用啊? 有这样的东西吗?
    chendy
        7
    chendy  
       Mar 1, 2021
    1. 排查 bug
    2. crontab 重启
    tianshiyeben
        8
    tianshiyeben  
       Mar 1, 2021
    @yesterdaysun WGCLOUD 也是 java 写的,自动重启不好把握,你收到告警,去重启就行了
    FakNoCNName
        9
    FakNoCNName  
       Mar 1, 2021
    @yesterdaysun 这种情景可以自己写个 http 探针,定时用 http 请求检查服务可用性,异常就执行上面朋友说的那些方案。
    Latin
        10
    Latin  
       Mar 1, 2021
    supervisor+1
    dqzcwxb
        11
    dqzcwxb  
       Mar 1, 2021
    用 arthas 排查问题,重启不是解决方案
    firefox12
        12
    firefox12  
       Mar 1, 2021
    要知道 服务不可用的时候,应用未必是退出 或者挂掉的
    wucao219101
        13
    wucao219101  
       Mar 1, 2021
    supervisor+1
    生产环境一直在用的方案
    yesterdaysun
        14
    yesterdaysun  
    OP
       Mar 1, 2021   1
    又搜了一圈, 发现这个帖子里面说的 Docker Healthcheck 可能是我想要的东西
    https://stackoverflow.com/questions/57515333/how-to-do-health-check-of-a-spring-boot-applications-which-is-running-in-docker

    或者又查到 K8S 里面也有类似的机制, 也许搞个单机的也行, 不过就像上面一位大哥说的, 还是要先排查问题, 已经在研究 Arthas 了.
    xcc880
        15
    xcc880  
       Mar 1, 2021 via iPhone
    @yesterdaysun docker 健康检查的确可以,但还是要花时间制本
    xcc880
        16
    xcc880  
       Mar 1, 2021 via iPhone
    之前遇到内存泄漏导致无法请求或者请求超时的情况,使用 jmap dump 快照,结合 eclipse 的 mat 工具很快就能找到泄漏点。不知道能否对你有帮助
    simple2025
        17
    simple2025  
       Mar 1, 2021
    @yesterdaysun 如果是 http 直接暴露个 http 的接口,定时任务去检查就好了
    yikuo
        18
    yikuo  
       Mar 2, 2021 via Android
    systemd 有 watchdog 功能,可以结合自动重启一起使用
    someonedeng
        19
    someonedeng  
       Mar 3, 2021
    docker always restart
    liian2019
        20
    liian2019  
       Mar 3, 2021
    简单点直接写个脚本,定时调 health check,失败了就执行 java -jar
    telnetning
        21
    telnetning  
       Mar 17, 2021
    定时任务跑健康检查脚本,检查接口是否正常。
    不过如果频繁挂,是不是先考虑定位下具体是什么原因。
    About     Help     Advertise     Blog     API     FAQ     Solana     5465 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 64ms UTC 08:37 PVG 16:37 LAX 01:37 JFK 04:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86