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

百度一面:SpringBoot如何优雅停机?

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

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

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

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

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

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

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

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

2.合理杀死进程

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

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

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

3.设置SpringBoot优雅停机

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

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

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

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

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

(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)设置 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;    }}

本文链接:http://www.28at.com/showinfo-26-102904-0.html百度一面:SpringBoot如何优雅停机?

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

上一篇: 脑洞大开! 22 个极具创意的 Tooltip 提示框

下一篇: 11 个高级 Web 工程师必备的 Web API

标签:
  • 热门焦点
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein&ldquo;利用市场支配力量强迫服装厂商与之签订独家
  • 微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事&ldquo;起猛了,我能看得懂日语了&rdquo;。&ldquo;为什么日本人说话我能听懂?&rdquo;&ldquo;中文不像中文,日语不像日语,但是我竟然看懂了&rdquo;&hellip;&hell
  • 造车两年股价跌六成,小米的估值逻辑变了吗?

    如果从小米官宣造车后的首个交易日起持有小米集团的股票,那么截至2023年上半年最后一个交易日,投资者将浮亏59.16%,同区间的恒生科技指数跌幅为52.78%
  • 支持aptX Lossless无损传输 iQOO TWS 1赛道版发布限时优惠价369元

    2023年7月4日,“无损音质,声动人心”iQOO TWS 1正式发布,支持aptX Lossless无损传输,限时优惠价369元。iQOO TWS 1耳机率先支持端到端aptX Lossless无
  • 滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 存在16项违法事实开始于2121年7月,历经一年时间,网络安全审查办公室对“滴滴出行”网络安全审查终于有了一个暂时的结束。据“网信
Top