Debian系统下Tomcat9无负载时崩溃问题排查求助
问题排查:Debian服务器Tomcat9无负载时段崩溃
环境信息
服务器硬件参数
- 处理器:Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz(2核)
- 内存:8GB
- 硬盘:500GB
已部署组件
Debian服务器,部署PostGIS空间数据库、GeoServer及Tomcat9
Tomcat9配置(/etc/default/tomcat9)
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 JAVA_OPTS="-Djava.awt.headless=true -Xms6144m -Xmx6144m -Xss512k -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Xloggc:/var/log/tomcat9/gc.log -XX:+UseLargePages -XX:LargePageSizeInBytes=256m -Dfile.encoding=UTF-8"
最新日志(/var/log/tomcat9/catalina.out)
OpenJDK 64-Bit Server VM warning: Setting LargePageSizeInBytes has no effect on this OS. Large page size is 2048K. [2024-08-18 12:16:45] [info] OpenJDK 64-Bit Server VM warning: Failed to reserve large pages memory req_addr: 0x0000000000000000 bytes: 251658240 (errno = 12). [2024-08-18 12:16:45] [info] OpenJDK 64-Bit Server VM warning: Failed to reserve large pages memory req_addr: 0x0000000680000000 bytes: 6442450944 (errno = 12). [2024-08-18 12:16:45] [info] OpenJDK 64-Bit Server VM warning: Failed to reserve large pages memory req_addr: 0x0000000000000000 bytes: 12582912 (errno = 12). [2024-08-18 12:16:45] [info] OpenJDK 64-Bit Server VM warning: Failed to reserve large pages memory req_addr: 0x0000000000000000 bytes: 12582912 (errno = 12). [2024-08-18 12:16:45] [info] OpenJDK 64-Bit Server VM warning: Failed to reserve large pages memory req_addr: 0x0000000000000000 bytes: 100663296 (errno = 12). [2024-08-18 12:16:45] [info] OpenJDK 64-Bit Server VM warning: Failed to reserve large pages memory req_addr: 0x0000000000000000 bytes: 100663296 (errno = 12).
问题现象
服务器高负载时偶尔崩溃符合硬件限制预期,但无负载时段(如周末)也会崩溃,需排查根因。
排查分析
内存配置严重不合理
- 服务器总内存仅8GB,Tomcat的
-Xms和-Xmx直接分配6GB,剩余2GB要支撑PostGIS、系统进程、缓存等所有其他开销,内存余量完全不足。即使无请求,JVM内存占用+其他进程消耗也极易触发OOM(内存不足)导致崩溃。 - 建议将
-Xms和-Xmx调整为4GB,留足系统和其他服务的内存空间。
- 服务器总内存仅8GB,Tomcat的
大页面配置无效且引发内存分配异常
- 日志明确提示
Setting LargePageSizeInBytes has no effect on this OS,说明手动设置的256m大页尺寸不被Debian支持,系统默认大页为2048K(2MB)。 - 后续的
Failed to reserve large pages memory(errno=12对应内存不足),是启用大页后内存分配失败的直接表现,这种异常会导致JVM运行不稳定,即使无负载也可能触发崩溃。 - 建议直接移除
-XX:+UseLargePages和-XX:LargePageSizeInBytes=256m两个参数。
- 日志明确提示
无负载时段崩溃的潜在诱因
- 无请求时,JVM因内存不足频繁触发GC,极端情况下会耗尽内存;另外PostGIS可能存在后台定时任务(如空间索引更新、数据清理),在无负载时段消耗内存,导致系统整体内存不足。
- 可查看
/var/log/syslog系统日志和PostGIS日志,确认无负载时段的后台进程活动情况。
修复步骤
- 修改
/etc/default/tomcat9中的JAVA_OPTS,调整内存参数并移除大页配置,示例配置:JAVA_OPTS="-Djava.awt.headless=true -Xms4096m -Xmx4096m -Xss512k -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Xloggc:/var/log/tomcat9/gc.log -Dfile.encoding=UTF-8" - 重启Tomcat9服务:
systemctl restart tomcat9 - 用
top、free -h监控系统内存使用,同时查看/var/log/tomcat9/gc.log分析GC情况,观察是否仍有崩溃 - 检查PostGIS后台定时任务,调整执行时机或资源占用限制
内容的提问来源于stack exchange,提问作者Javier Aguilar
相关产品推荐
相关产品推荐

