You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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). 

问题现象

服务器高负载时偶尔崩溃符合硬件限制预期,但无负载时段(如周末)也会崩溃,需排查根因。

排查分析

  1. 内存配置严重不合理

    • 服务器总内存仅8GB,Tomcat的-Xms和-Xmx直接分配6GB,剩余2GB要支撑PostGIS、系统进程、缓存等所有其他开销,内存余量完全不足。即使无请求,JVM内存占用+其他进程消耗也极易触发OOM(内存不足)导致崩溃。
    • 建议将-Xms和-Xmx调整为4GB,留足系统和其他服务的内存空间。
  2. 大页面配置无效且引发内存分配异常

    • 日志明确提示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两个参数。
  3. 无负载时段崩溃的潜在诱因

    • 无请求时,JVM因内存不足频繁触发GC,极端情况下会耗尽内存;另外PostGIS可能存在后台定时任务(如空间索引更新、数据清理),在无负载时段消耗内存,导致系统整体内存不足。
    • 可查看/var/log/syslog系统日志和PostGIS日志,确认无负载时段的后台进程活动情况。

修复步骤

  1. 修改/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"
    
  2. 重启Tomcat9服务:systemctl restart tomcat9
  3. 用top、free -h监控系统内存使用,同时查看/var/log/tomcat9/gc.log分析GC情况,观察是否仍有崩溃
  4. 检查PostGIS后台定时任务,调整执行时机或资源占用限制

内容的提问来源于stack exchange,提问作者Javier Aguilar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:15:59