Tomcat 生產 40 條軍規:容量規劃、調優、故障演練與安全加固

(一)容量規劃 6 條
軍規 1:線程池公式
maxThreads = ((并發峰值 × 平均 RT) / 1000) + 冗余 20 %;
踩坑:壓測 2000 QPS、RT 200 ms,理論 maxThreads=500,線上卻設 150 導致排隊。

軍規 2:Connector 選擇
? CPU < 4 核且短連接 → BIO(已廢棄)。
? 長連接、靜態文件多 → NIO。
? TLS 高并發 → NIO + JSSE 或 APR + OpenSSL。

軍規 3:內存預算
Heap = (并發請求數 × 平均對象大小 × 平均存活時間) / 2 + 峰值 Session 內存 + 50 % 安全墊。

軍規 4:Session 總數上限
maxActiveSessions=10000,超出后觸發 LRU 驅逐,防止 Map 膨脹。

軍規 5:靜態資源分離
Tomcat 只跑動態,靜態用 Nginx + CDN,CPU 下降 40 %。

軍規 6:容器啟動時間
SpringBoot FatJar 內嵌 Tomcat 12 s;外置 Tomcat + war 25 s;通過 jlink 裁剪模塊可降到 8 s。

(二)JVM 調優 7 條
軍規 7:G1 優于 Parallel
-XX:+UseG1GC -XX:MaxGCPauseMillis=200,Full GC 次數從 5 次/天降到 0。

軍規 8:Metaspace 初始值
-XX:MetaspaceSize=256m,防止啟動期頻繁 Full GC。

軍規 9:關閉顯式 GC
-XX:+DisableExplicitGC,防止 RMI 定時觸發 System.gc()。

軍規 10:JMX 安全
-Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=true。

軍規 11:GC Log 輪轉
-Xlog:gc*:file=/opt/logs/gc-%t.log:time,uptime:filecount=10,filesize=100M

軍規 12:OOM 自動 dump
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/dump

軍規 13:容器感知
-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0

(三)線程與連接池 7 條
軍規 14:acceptorThreadCount=2 只在多核且 TLS 握手重 CPU 場景生效。

軍規 15:maxConnections 與 maxThreads 解耦
NIO 模式下 maxConnections=10000,maxThreads=200,防止 C10K 問題。

軍規 16:禁用 BIO
protocol="org.apache.coyote.http11.Http11NioProtocol" 顯式聲明,避免老版本默認 BIO。

軍規 17:Executor 共享
<Service name="Catalina">

軍規 18:StuckThreadDetectionValve
threshold=600,報警線程棧。

軍規 19:AsyncTimeout
NIO 模式下,異步 Servlet 默認 30 s 超時,可在 web.xml 覆蓋。

軍規 20:禁用 AJP
protocol="AJP/1.3" 如無反向代理,關閉端口 8009,防止 Ghostcat。

(四)日志與監控 6 條
軍規 21:AccessLogValve 格式
%{X-Forwarded-For}i %l %u %t "%r" %s %b %D,%D 記錄微秒級耗時。

軍規 22:RollingFileAppender
maxDays=7,防止磁盤爆。

軍規 23:Prometheus JMX Exporter
/opt/jmx_exporter/config.yml 暴露 tomcat_threadpool_currentThreadsBusy 等指標。

軍規 24:Grafana Dashboard
線程、Session、GC、響應碼 4 個維度,P95 響應時間告警閾值 1 s。

軍規 25:慢查詢定位
jstack 采樣 + Arthas trace javax.servlet.http.HttpServlet service 定位 SQL。

軍規 26:錯誤頁面自定義
web.xml 配置 <error-page>

(五)安全加固 7 條
軍規 27:刪除默認應用
webapps/docs、examples、ROOT、manager 全干掉。

軍規 28:關閉自動部署
<Host autoDeploy="false" deployOnStartup="false">

軍規 29:隱藏版本號
Server=" " 或自定義字符串,防止掃描。

軍規 30:啟用 HTTPS
<Connector SSLEnabled="true" sslProtocol="TLS" ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256...">

軍規 31:SameSite Cookie
<Context useHttpOnly="true" sameSiteCookies="strict">

軍規 32:SecurityListener
<Listener className="org.apache.catalina.security.SecurityListener" checkedOsUsers="tomcat" />

軍規 33:文件上傳大小
<maxSwallowSize> 改為 10 MB,防止大文件占滿磁盤。

(六)故障演練 7 條
軍規 34:kill -3 模擬 Full GC 卡頓,驗證 HPA 是否及時擴容。
軍規 35:iptables -A INPUT -p tcp --dport 8080 -j DROP 模擬網絡分區,哨兵探測到后是否切流。
軍規 36:echo 3 > /proc/sys/vm/drop_caches 觸發緩存失效,觀察 RT 抖動。
軍規 37:jmap -histo:live 查看 Session 對象是否泄漏。
軍規 38:Arthas ognl 改 SystemProperty 做動態開關演練。
軍規 39:磁盤寫滿 touch bigfile,驗證 AccessLogValve 是否阻塞線程。
軍規 40:Chaos Mesh 注入 Pod CPU 100 %,驗證 readinessProbe 摘除流量。

(七)云原生與 CI/CD 7 條
軍規 41:Dockerfile 用 distroless/java17-base,鏡像 60 MB → 40 MB。
軍規 42:非 root 運行
RUN addgroup -g 1000 tomcat && adduser -D -s /bin/sh -u 1000 -G tomcat tomcat。

軍規 43:分層構建
依賴層 COPY pom.xml 單獨緩存,代碼變更后 5 s 構建完成。

軍規 44:Helm Chart
values.yaml 暴露 replicaCount、resources、jvmOpts,支持多環境。

軍規 45:優雅停機腳本
preStop: /bin/sh -c "sleep 15 && catalina.sh stop" 讓正在處理的請求完成。

軍規 46:HPA 雙指標
cpuUtilization=60% + tomcat_threadpool_currentThreadsBusy>80% 并發。

軍規 47:Keda 基于 Kafka 消息積壓自動擴容 Tomcat Pod。


結語
40 條軍規是 50 臺 Tomcat、200 次故障、3 個 P1 事故后的復盤。請把這份清單貼在 wiki 首頁,下次事故來臨前,你已經把風險提前清零。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915231.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915231.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915231.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入解析 Amazon Q:AWS 推出的企業級生成式 AI 助手

在人工智能助手競爭激烈的當下&#xff0c;AWS 重磅推出的 Amazon Q 憑借其強大的企業級整合能力&#xff0c;正成為開發者提升生產力的新利器。隨著生成式 AI 技術席卷全球&#xff0c;各大云廠商紛紛布局智能助手領域。在 2023 年 re:Invent 大會上&#xff0c;AWS 正式推出了…

物流自動化WMS和WCS技術文檔

導語大家好&#xff0c;我是社長&#xff0c;老K。專注分享智能制造和智能倉儲物流等內容。歡迎大家使用我們的倉儲物流技術AI智能體。新書《智能物流系統構成與技術實踐》新書《智能倉儲項目出海-英語手冊&#xff0c;必備&#xff01;》完整版文件和更多學習資料&#xff0c;…

Web3.0 實戰項目、簡歷打造、精準投遞+面試準備

目錄 一、獲取真實企業級 Web3.0 項目的 5 種方式 1. 參與開源項目&#xff08;推薦指數&#xff1a;?????&#xff09; 2. 參與黑客松&#xff08;Hackathon&#xff09; 3. 遠程實習 & DAO 協作項目&#xff08;兼職也可&#xff09; 4. Web3 Startup 實戰項目合…

pymongo庫:簡易方式存取數據

文檔 基礎使用 前提&#xff1a;開發機器已安裝mongo配置環境&#xff0c;已啟動服務。 macOS啟動服務&#xff1a;brew services start mongodb-community8.0 macOS停止服務&#xff1a;brew services stop mongodb-community8.0安裝&#xff1a;python3 -m pip install pym…

Java 線程池與多線程并發編程實戰全解析:從異步任務調度到設計模式落地,200 + 核心技巧、避坑指南與業務場景結合

多線程編程在現代軟件開發中扮演著至關重要的角色&#xff0c;它能夠顯著提升應用程序的性能和響應能力。通過合理利用異步線程、多線程以及線程池等技術&#xff0c;我們可以更高效地處理復雜任務&#xff0c;優化系統資源的使用。同時&#xff0c;在實際應用中&#xff0c;我…

gitee 分支切換

ssh-keygen -t rsa -C "pengchengzhangcplaser.com.cn" ssh -T gitgitee.comgit remote add origin 倉庫地址git config --global user.email "youexample.com"git config --global user.name "Your Name"# 1. 更新遠程信息 git fetch origin# …

Vue3生命周期函數

在 Vue 3 中&#xff0c;生命周期鉤子函數是指組件從創建到銷毀的整個過程中&#xff0c;Vue 自動調用的一些特定函數。它們讓你能夠在組件的不同階段執行一些自定義操作。Vue 3 提供了組合式 API 和選項式 API 兩種方式來定義生命周期鉤子。1. onBeforeMount (組合式 API)作用…

基于SEP3203微處理器的嵌入式最小硬件系統設計

目錄 1 引言 2 嵌入式最小硬件系統 3 SEP3202簡述 4 最小系統硬件的選擇和單元電路的設計 4.1 電源電路 4.2 晶振電路 4.3 復位及喚醒電路 4.5 存儲器 4.5.1 FLASH存儲 4.5.2 SDRAM 4.6 串行接口電路設計 4.7 JTAG模塊 4.8 擴展功能&#xff08;LED&#xff09; …

【開源軟件推薦】 SmartSub,一個可以快速識別視頻/音頻字幕的工具

背景介紹 我就說Github上面能找到好東西吧 事情是這樣的 我最近在用PC端的剪映剪輯視頻 需要用到它的語音轉字幕功能 轉完之后&#xff0c;導出的時候 發現 赫然有一項字幕識別的會員權益 我尋思看看什么價格 不貴的話就充了 好家伙&#xff0c;這不看不知道&#xff…

自動駕駛仿真領域常見開源工具

自動駕駛仿真領域常見開源工具1、目錄1.1 自動駕駛仿真領域常見開源2、地圖&場景2.1、場景播放器-Esmini4、被測對象-智駕軟件4.1、Autoware4.4、端到端模型-VAD4.5、端到端模型-UniAD4.6、端到端模型-ThinkTwice4.7、端到端模型-TCP5、評價方法5.1、Leaderboard5.2、Bench…

GPU算力租用平臺推薦,價格便宜且有羊毛薅,最低只要0.49/小時!

1.趨動云&#xff0c;這是我近期一直在用的&#xff0c;使用體驗還不錯&#xff0c;推薦給大家 網址&#xff1a;https://platform.virtaicloud.com/gemini_web/auth/register?inviteCode5f74065eac6d8867eac5c82194e2683a 是否選擇一個算力平臺我認為有幾點需要考慮&#xff…

python學智能算法(二十五)|SVM-拉格朗日乘數法理解

引言 前序學習進程中&#xff0c;已經對最佳超平面的求解有了一定認識。 剛好在此梳理一下: 函數距離 首先有函數距離F&#xff0c;也可以稱為函數間隔F&#xff1a; Fmin?i1...myi(w?xib)F \min_{i1...m}y_{i}(w \cdot x_{i}b)Fi1...mmin?yi?(w?xi?b) 幾何距離 然后…

vscode 源碼編譯

windows 環境 下載安裝 build tools Visual Studio Build Tools 勾選 C 因為安裝詳細信息里是 v143&#xff0c;所以單個組件里也要追加兩個 143 的勾選 點擊安裝&#xff0c;安裝好重啟下電腦 Electron 安裝失敗&#xff1a;connect ETIMEDOUT 20.205.243.166:443 為防Ele…

讀取和寫入json,xml文件

一、JSON文件操作? 1. 核心類?? ??QJsonDocument??&#xff1a;表示整個JSON文檔&#xff0c;提供解析&#xff08;fromJson()&#xff09;和序列化&#xff08;toJson()&#xff09;功能。 ??QJsonObject??&#xff1a;存儲鍵值對集合&#xff0c;支持嵌套對象和數…

深度學習×第10卷:她用一塊小濾鏡,在圖像中找到你

&#x1f308;【第一節 她看到的是像素點&#xff0c;卻試圖拼出你整張臉】&#x1f4f8; 圖像是什么&#xff1f;她從未見過你&#xff0c;但看見的是你的一片光斑圖像&#xff0c;在神經網絡的眼里&#xff0c;是一個個數字格子。這些格子&#xff0c;每個都有 0~255 的亮度…

計算機組成原理中的RAM:核心技術深度解析

摘要&#xff1a;本文深度剖析RAM在計算機體系中的核心地位&#xff0c;結合2025年最新技術標準與實測數據&#xff0c;涵蓋DRAM工作原理、主流技術對比、非易失性存儲革新及未來發展趨勢&#xff0c;為硬件開發者和系統架構師提供權威技術參考。一、RAM基礎原理與系統交互機制…

C語言—深入理解指針(詳)

深入理解指針&#xff08;詳解&#xff09;前言一、指針是什么1、指針的定義2、指針的大小二、指針類型1、類型2、不同類型的意義三、野指針1、野指針形成原因2、如何避免野指針四、指針的運算1、 指針整數2、指針-指針3、指針的關系運算五、const修飾指針1、consr修飾變量2、c…

小談相機的學習過程

前言博主本人并非專職相機開發&#xff0c;還涉及系統的其他幾個模塊&#xff0c;雖然都屬于owner&#xff0c;但是都還在學習探索的一個過程&#xff0c;自認為掌握還不夠細致&#xff0c;此篇文章僅梳理&#xff0c;總結&#xff0c;印證自己近五年相機模塊的一個學習過程&am…

CentOS7 內網服務器yum修改

1、首先確定的內網服務器是有yum源代理服務器的2、修改 /etc/yum.conf 配置文件&#xff0c;增加代理ip和端口號proxyhttp://ip.ip.ip.ip:port3、備份源是文件sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak4、修改配置文件 vi CentOS-Base…

基于單片機自行車自動防盜報警系統設計

摘 要 本文闡述了自行車防盜報警系統原理&#xff0c;介紹如何用stc89c52單片機實現防盜報警&#xff0c;分析各個部分的工作原理&#xff0c;并給出了原理圖和源程序。此設計電路由震動傳感器、單片機、無線超再生發射/接收電路、LED顯示器和蜂鳴器組成。由于超再生接收是一種…