2026/1/29 7:18:35
网站建设
项目流程
大型门户网站建设包括哪些方面,做企业规划的网站,制作电子商务网站页面,芜湖做网站需要多少钱#x1f6a8; 服务器跑着跑着就死机了#xff1f;
一次把 Tomcat “总内存”限制住#xff0c;彻底避免把主机撑爆#xff08;新手教程#xff09;一、文章缘起#xff1a;
服务器总是运行着运行着#xff0c;就被 Tomcat 撑死了
事情一开始#xff0c;其实很普通。
一… 服务器跑着跑着就死机了一次把 Tomcat “总内存”限制住彻底避免把主机撑爆新手教程一、文章缘起服务器总是运行着运行着就被 Tomcat 撑死了事情一开始其实很普通。一台16G 内存的服务器只跑一个 Tomcat看起来完全够用。Tomcat 启动正常、访问也不慢一切都显得很“健康”。可问题是只要运行一段时间SSH 开始变慢服务响应越来越卡最后整台机器直接死机 / OOM / 被云平台重启最折磨人的是重启之后还能继续跑但过几个小时或几天又会再死一次。二、新手最容易掉进的误区我明明已经限制了 JVM 内存当时我的配置是这样的-Xmx8g服务器 16GTomcat 最多 8G怎么看都很合理。但现实是服务器还是被拖死了。三、后来才明白的真相关键-Xmx只限制 JVM 堆内存并不等于 Tomcat 的“总内存”。Tomcat 在运行过程中还会不断消耗Metaspace类加载、反射Direct MemoryNIO / 网络 IO线程栈线程越多越吃本地库 / Native 内存这些内存不受-Xmx控制会慢慢增长最终把系统内存吃光 所以只靠 JVM 参数根本拦不住 Tomcat 撑爆服务器。四、真正正确的思路一句话就够JVM 负责“怎么用内存”操作系统负责“最多能用多少内存”。要避免服务器被拖死必须从操作系统层面限制 Tomcat 进程的“总内存”。五、最稳、最简单的解决方案新手必学适用环境LinuxUbuntu / CentOS / Rocky / AlmaTomcat 使用systemd启动先确认systemctl status tomcat只要能看到active (running)就可以继续。六、核心实操3 步限制 Tomcat 总内存✅ Step 1给 Tomcat 加 OS 级内存上限sudosystemctl edit tomcat粘贴下面内容[Service] MemoryAccountingtrue MemoryMax10G含义很简单Tomcat 这个进程最多只能使用 10G 内存超过就直接被系统拦住✅ Step 2让配置生效sudosystemctl daemon-reloadsudosystemctl restart tomcat如果之前启动失败过sudosystemctl reset-failed tomcatsudosystemctl start tomcat✅ Step 3确认限制真的生效一定要做systemctl show tomcat -p MemoryMax看到类似输出MemoryMax10737418240说明OS 级别内存限制已经生效✅Tomcat 再也不可能把服务器撑爆。七、新手推荐的 JVM 配置稳妥版不追求极限性能只求长期稳定-Xms4g -Xmx6g可选加上-XX:MaxMetaspaceSize512m -XX:MaxDirectMemorySize512m原则只有一个JVM 配得保守一点操作系统来兜底。八、新手最容易踩的坑务必避开❌ 只配-Xmx不做 OS 限制❌ 用nohup/screen启 Tomcatsystemd 管不到❌ 改了配置却忘记重启❌ 线程数太大线程栈把内存吃光❌ 以为“机器内存大就没问题”九、附完整tomcat.service示例可直接用下面是一个完整、可复制的tomcat.service适合新手生产环境可直接使用。适用说明Tomcat/opt/tomcatJDK/opt/jdk限制 Tomcat 总内存10G/etc/systemd/system/tomcat.service[Unit] DescriptionApache Tomcat Afternetwork.target [Service] Typeforking # 新手可先用 root熟悉后再换 tomcat 用户 Userroot Grouproot # Java 环境 EnvironmentJAVA_HOME/opt/jdk EnvironmentJRE_HOME/opt/jdk # Tomcat 路径 EnvironmentCATALINA_HOME/opt/tomcat EnvironmentCATALINA_BASE/opt/tomcat EnvironmentCATALINA_PID/opt/tomcat/temp/tomcat.pid # JVM 参数示例 EnvironmentJAVA_OPTS-Xms4g -Xmx6g -XX:MaxMetaspaceSize512m -XX:MaxDirectMemorySize512m # OS 级别总内存限制关键 MemoryAccountingtrue MemoryHigh9G MemoryMax10G # 启动 / 停止 ExecStart/opt/tomcat/bin/startup.sh ExecStop/opt/tomcat/bin/shutdown.sh # 异常重启策略 Restarton-failure RestartSec5 SuccessExitStatus143 [Install] WantedBymulti-user.target生效sudosystemctl daemon-reloadsudosystemctlenabletomcatsudosystemctl restart tomcat十、最后一句话送给新手不是 Tomcat 有问题而是你从没告诉操作系统“它最多只能用多少内存。”只要记住并用上这两行MemoryAccountingtrue MemoryMax10GTomcat 就再也拖不死你的服务器了。