日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

面試官:SpringBoot如何優雅停機?

來源: 責編: 時間:2024-03-18 17:40:34 183觀看
導讀優雅停機(Graceful Shutdown)是指在服務器需要關閉或重啟時,能夠先處理完當前正在進行的請求,然后再停止服務的操作。優雅停機的實現步驟主要分為以下幾步:停止接收新的請求:首先,系統會停止接受新的請求,這樣就不會有新的任

優雅停機(Graceful Shutdown)是指在服務器需要關閉或重啟時,能夠先處理完當前正在進行的請求,然后再停止服務的操作。xxX28資訊網——每日最新資訊28at.com

優雅停機的實現步驟主要分為以下幾步:xxX28資訊網——每日最新資訊28at.com

  1. 停止接收新的請求:首先,系統會停止接受新的請求,這樣就不會有新的任務被添加到任務隊列中。
  2. 處理當前請求:系統會繼續處理當前已經在處理中的請求,確保這些請求能夠正常完成。這通常涉及到等待正在執行的任務完成,如處理HTTP請求、數據庫操作等。
  3. 釋放資源:在請求處理完成后,系統會釋放所有已分配的資源,如關閉數據庫連接、斷開網絡連接等。
  4. 關閉服務:最后,當所有請求都處理完畢且資源都已釋放后,系統會安全地關閉服務。

0.SpringBoot如何實現優雅停機?

優雅停機的實現步驟分為以下兩步:xxX28資訊網——每日最新資訊28at.com

  1. 使用合理的 kill 命令,給 Spring Boot 項目發送優雅停機指令。
  2. 開啟 Spring Boot 優雅停機/自定義 Spring Boot 優雅停機的實現。

1.合理殺死進程

在 Linux 中 kill 殺死進程的常用命令有以下這些:xxX28資訊網——每日最新資訊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”殺死進程即可。xxX28資訊網——每日最新資訊28at.com

2.設置SpringBoot優雅停機

在 Spring Boot 2.3.0 之后,可以通過配置設置開啟 Spring Boot 的優雅停機功能,如下所示:xxX28資訊網——每日最新資訊28at.com

# 開啟優雅停機,默認值:immediate 為立即關閉server.shutdown=graceful# 設置緩沖期,最大等待時間,默認:30秒spring.lifecycle.timeout-per-shutdown-phase=60s

此時,應用在關閉時,Web 服務器將不再接受新請求,并等待正在進行的請求完成的緩沖時間。xxX28資訊網——每日最新資訊28at.com

然而,如果是 Spring Boot 2.3.0 之前,就需要自行擴展(線程池)來實現優雅停機了。它的核心實現實現是在系統關閉時會調用 ShutdownHook,然后在 ShutdownHook 中阻塞 Web 容器的線程池,直到所有請求都處理完畢再關閉程序,這樣就實現自定義優雅線下了。xxX28資訊網——每日最新資訊28at.com

但是,不同的 Web 容器(Tomcat、Jetty、Undertow)有不同的自定義優雅停機的方法,以 Tomcat 為例,它的自定義優雅停機實現如下。xxX28資訊網——每日最新資訊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;    }}

xxX28資訊網——每日最新資訊28at.com

PS:Jetty、Undertow 優雅停機的實現方式,參考《面試訓練營》,vx:gg_stonexxX28資訊網——每日最新資訊28at.com

課后思考

Spring Boot Actuator 能實現優雅停機嗎?為什么?如何實現分布式系統的優雅停機?xxX28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-77522-0.html面試官:SpringBoot如何優雅停機?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 編程語言3月榜單:Python第一C++排第三,昔日王者第四預示互聯網時代結束

下一篇: Java中的鎖升級機制:偏向鎖、輕量級鎖和重量級鎖

標簽:
  • 熱門焦點
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 從 Pulsar Client 的原理到它的監控面板

    背景前段時間業務團隊偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費了、生產者消息發送緩慢等各種問題。雖然我們有個監控頁面可以根據 topic 維度查看他的發送狀態,
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數或類的行為。裝飾器本質上是一個函數,它接受另一個函數或類作為參數,并返回一個新的函數或類。它們通常用
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 阿里大調整

    來源:產品劉有媒體報道稱,近期淘寶天貓集團啟動了近年來最大的人力制度改革,涉及員工績效、層級體系等多個核心事項,目前已形成一個初步的&ldquo;征求意見版&rdquo;:1、取消P序列
  • 阿里瓴羊One推出背后,零售企業迎數字化新解

    作者:劉曠近年來隨著數字經濟的高速發展,各式各樣的SaaS應用服務更是層出不窮,但本質上SaaS大多局限于單一業務流層面,對用戶核心關切的增長問題等則沒有提供更好的解法。在Saa
  • 引領旗艦級影像能力向中端機普及 OPPO K11 系列發布 1799 元起

    7月25日,OPPO正式發布K系列新品—— OPPO K11 。此次 K11 在中端手機市場長期被忽視的影像板塊發力,突破性地搭載索尼 IMX890 旗艦大底主攝,支持 OIS
  • OPPO K11樣張首曝:千元機影像“卷”得真不錯!

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
  • 蘋果140W USB-C充電器:采用氮化鎵技術

    據10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
Top 主站蜘蛛池模板: 岱山县| 石柱| 台江县| 兴隆县| 溧水县| 铅山县| 大竹县| 桃源县| 宿州市| 米泉市| 青龙| 三原县| 湖南省| 抚远县| 陕西省| 柘荣县| 岐山县| 曲阳县| 淮安市| 英德市| 镇坪县| 维西| 木里| 平罗县| 呼图壁县| 肇东市| 咸丰县| 驻马店市| 明溪县| 浦东新区| 三门县| 宁河县| 渭南市| 望城县| 新巴尔虎左旗| 鄂州市| 泊头市| 肇庆市| 临海市| 淳化县| 安泽县|