当前位置:首页 > 科技  > 软件

面试官:SpringBoot如何优雅停机?

来源: 责编: 时间:2024-03-18 17:40:34 246观看
导读优雅停机(Graceful Shutdown)是指在服务器需要关闭或重启时,能够先处理完当前正在进行的请求,然后再停止服务的操作。优雅停机的实现步骤主要分为以下几步:停止接收新的请求:首先,系统会停止接受新的请求,这样就不会有新的任

优雅停机(Graceful Shutdown)是指在服务器需要关闭或重启时,能够先处理完当前正在进行的请求,然后再停止服务的操作。zde28资讯网——每日最新资讯28at.com

优雅停机的实现步骤主要分为以下几步:zde28资讯网——每日最新资讯28at.com

  1. 停止接收新的请求:首先,系统会停止接受新的请求,这样就不会有新的任务被添加到任务队列中。
  2. 处理当前请求:系统会继续处理当前已经在处理中的请求,确保这些请求能够正常完成。这通常涉及到等待正在执行的任务完成,如处理HTTP请求、数据库操作等。
  3. 释放资源:在请求处理完成后,系统会释放所有已分配的资源,如关闭数据库连接、断开网络连接等。
  4. 关闭服务:最后,当所有请求都处理完毕且资源都已释放后,系统会安全地关闭服务。

0.SpringBoot如何实现优雅停机?

优雅停机的实现步骤分为以下两步:zde28资讯网——每日最新资讯28at.com

  1. 使用合理的 kill 命令,给 Spring Boot 项目发送优雅停机指令。
  2. 开启 Spring Boot 优雅停机/自定义 Spring Boot 优雅停机的实现。

1.合理杀死进程

在 Linux 中 kill 杀死进程的常用命令有以下这些:zde28资讯网——每日最新资讯28at.com

  1. kill -2 pid:向指定 pid 发送 SIGINT 中断信号,等同于 ctrl+c。也就说,不仅当前进程会收到该信号,而且它的子进程也会收到终止的命令。
  2. kill -9 pid:向指定 pid 发送 SIGKILL 立即终止信号。程序不能捕获该信号,最粗暴最快速结束程序的方法。
  3. kill -15 pid:向指定 pid 发送 SIGTERM 终止信号。信号会被当前进程接收到,但它的子进程不会收到,如果当前进程被 kill 掉,它的的子进程的父进程将变成 init 进程 (init 进程是那个 pid 为 1 的进程)。
  4. kill pid:等同于 kill 15 pid。

因此,在以上命令中,我们不能使用“kill -9”来杀死进程,使用“kill”杀死进程即可。zde28资讯网——每日最新资讯28at.com

2.设置SpringBoot优雅停机

在 Spring Boot 2.3.0 之后,可以通过配置设置开启 Spring Boot 的优雅停机功能,如下所示:zde28资讯网——每日最新资讯28at.com

# 开启优雅停机,默认值:immediate 为立即关闭server.shutdown=graceful# 设置缓冲期,最大等待时间,默认:30秒spring.lifecycle.timeout-per-shutdown-phase=60s

此时,应用在关闭时,Web 服务器将不再接受新请求,并等待正在进行的请求完成的缓冲时间。zde28资讯网——每日最新资讯28at.com

然而,如果是 Spring Boot 2.3.0 之前,就需要自行扩展(线程池)来实现优雅停机了。它的核心实现实现是在系统关闭时会调用 ShutdownHook,然后在 ShutdownHook 中阻塞 Web 容器的线程池,直到所有请求都处理完毕再关闭程序,这样就实现自定义优雅线下了。zde28资讯网——每日最新资讯28at.com

但是,不同的 Web 容器(Tomcat、Jetty、Undertow)有不同的自定义优雅停机的方法,以 Tomcat 为例,它的自定义优雅停机实现如下。zde28资讯网——每日最新资讯28at.com

2.1 Tomcat 容器关闭代码

public class TomcatGracefulShutdown implements TomcatConnectorCustomizer, ApplicationListener<ContextClosedEvent> {    private volatile Connector connector;    public void customize(Connector connector) {        this.connector = connector;    }    public void onApplicationEvent(ContextClosedEvent contextClosedEvent) {        this.connector.pause();        Executor executor = this.connector.getProtocolHandler().getExecutor();        if (executor instanceof ThreadPoolExecutor) {            try {                log.info("Start to shutdown tomcat thread pool");                ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;                threadPoolExecutor.shutdown();                if (!threadPoolExecutor.awaitTermination(20, TimeUnit.SECONDS)) {                    log.warn("Tomcat thread pool did not shutdown gracefully within 20 seconds. ");                }            } catch (InterruptedException e) {                log.warn("Fail to shut down tomcat thread pool ", e);            }        }    }}

2.2 设置 Tomcat 自动装配

@Configuration@ConditionalOnClass({Servlet.class, Tomcat.class})public static class TomcatConfiguration {    @Bean    public TomcatGracefulShutdown tomcatGracefulShutdown() {        return new TomcatGracefulShutdown();    }    @Bean    public EmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory(TomcatGracefulShutdown gracefulShutdown) {        TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory();        tomcatFactory.addConnectorCustomizers(gracefulShutdown);        return tomcatFactory;    }}

zde28资讯网——每日最新资讯28at.com

PS:Jetty、Undertow 优雅停机的实现方式,参考《面试训练营》,vx:gg_stonezde28资讯网——每日最新资讯28at.com

课后思考

Spring Boot Actuator 能实现优雅停机吗?为什么?如何实现分布式系统的优雅停机?zde28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-77522-0.html面试官:SpringBoot如何优雅停机?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 编程语言3月榜单:Python第一C++排第三,昔日王者第四预示互联网时代结束

下一篇: Java中的锁升级机制:偏向锁、轻量级锁和重量级锁

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的&ldquo;头腾
  • 电视息屏休眠仍有网络上传 爱奇艺被质疑“薅消费者羊毛”

    记者丨宁晓敏 见习生丨汗青出品丨鳌头财经(theSankei) 前不久,爱奇艺发布了一份亮眼的一季报,不仅营收和会员营收创造历史最佳表现,其运营利润也连续6个月实现增长。自去年年初
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大&ldquo;烤&rdquo;之下的除了众生,还有各大企业发布的ESG报告。ESG是&ldquo;环境保
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
  • 2299元起!iQOO Pad开启预售:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其搭载了天玑
Top