Apache TomEE 10.2.0 配置参数详解
Apache TomEE 10.2.0 配置参数实测详解,覆盖 server.xml 端口连接器、tomee.xml、system.properties、setenv.sh JVM 参数与管理账号等核心配置及生产模板。
Apache TomEE 10.2.0 配置参数详解
一、环境信息
| 项目 | 内容 |
|---|---|
| 组件版本 | Apache TomEE 10.2.0(Web Profile,内置 Tomcat 10.1.57) |
| JDK | OpenJDK 17 |
| 安装目录 | /opt/tomee |
| 配置目录 | /opt/tomee/conf |
| JVM 启动参数位置 | /opt/tomee/bin/setenv.sh |
| HTTP 端口 | 8080 |
| 停止端口 | 8005 |
二、前置条件
- 已按安装指南完成 TomEE 10.2.0 的解压部署,/opt/tomee 目录可用。
- 了解 XML 基本语法;修改配置前先备份原文件:
cp /opt/tomee/conf/server.xml /opt/tomee/conf/server.xml.bak
- 修改任意配置文件后均需重启进程生效:
systemctl restart tomee
三、参数查看与修改方式
3.1 配置文件清单
ls /opt/tomee/conf
实测回显:
catalina.policy catalina.properties context.xml logging.properties
server.xml server.xml.original system.properties tomcat-users.xml
tomcat-users.xml.original tomcat-users.xsd tomee.xml web.xml
带 .original 后缀的是发行包原始备份,可作为改动前的参照。
3.2 修改生效方式
| 文件 | 生效方式 |
|---|---|
| server.xml、tomee.xml、system.properties、tomcat-users.xml、web.xml、catalina.properties | 重启进程生效 |
| bin/setenv.sh | 重启进程生效(仅启动时读取) |
| webapps 下应用自身的配置 | 按 autoDeploy 配置可热部署 |
3.3 验证配置正确性
改动 server.xml 后可先做语法检查再重启:
/opt/tomee/bin/configtest.sh
实测回显末行:
INFO: Server initialization in [1110] milliseconds
命令退出码为 0 表示 server.xml 语法正确。
四、参数总览
| 类别 | 文件 | 关键参数 |
|---|---|---|
| 网络与端口 | conf/server.xml | port 8080/8005/8443、connectionTimeout、redirectPort、maxParameterCount |
| 线程与主机 | conf/server.xml | Host 的 appBase、unpackWARs、autoDeploy |
| TomEE 部署与资源 | conf/tomee.xml | Deployments dir、资源声明 |
| TomEE 系统属性 | conf/system.properties | tomee.serialization.class.blacklist、openejb.* 系列 |
| JVM 内存与远程调试 | bin/setenv.sh | JAVA_OPTS、CATALINA_OPTS、JPDA_ADDRESS |
| 管理账号与角色 | conf/tomcat-users.xml | username、password、roles |
| 类加载路径 | conf/catalina.properties | common.loader、server.loader、shared.loader |
| 日志 | conf/logging.properties | java.util.logging 各 handler 与级别 |
五、核心参数分类详解
5.1 server.xml:端口与连接器
server.xml 是 Catalina 的主配置文件。停止端口位于文件根部:
<Server port="8005" shutdown="SHUTDOWN">
port="8005":接收 SHUTDOWN 关闭指令的端口,实测仅监听本机回环地址;务必不对公网开放。shutdown="SHUTDOWN":触发关闭的明文指令,可改为自定义字符串增强安全性。
默认启用的 HTTP 连接器(TomEE 发行包特有 server 与 xpoweredBy 属性,用于隐藏产品指纹):
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
xpoweredBy="false" server="Apache TomEE" />
| 属性 | 默认值 | 说明 |
|---|---|---|
| port | 8080 | HTTP 监听端口 |
| connectionTimeout | 20000 | 连接建立后等待请求的毫秒数 |
| redirectPort | 8443 | 遇到 SSL 要求时重定向的端口 |
| maxParameterCount | 1000 | 单次请求参数个数的上限 |
| maxThreads | 默认 200 | 最大工作线程数(显式配置 Executor 时为 150) |
8443 的 SSL/TLS 连接器与 8009 的 AJP 连接器在 10.2.0 发行包中默认处于注释状态,未使用时不监听对应端口。
5.2 server.xml:Host 与应用部署
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
| 属性 | 默认值 | 说明 |
|---|---|---|
| appBase | webapps | 相对 CATALINA_BASE 的应用目录,即 /opt/tomee/webapps |
| unpackWARs | true | 是否把 war 包解压为目录运行 |
| autoDeploy | true | 运行期监测 appBase 变化并自动部署 |
war 包放入 /opt/tomee/webapps 后自动解压部署,目录名即访问路径。实测将 hello.war 放入后通过 http://localhost:8080/hello/ 访问返回 200。
5.3 tomee.xml:TomEE 专属配置
tomee.xml 是 TomEE 区别于原版 Tomcat 的核心配置文件,默认内容几乎为空:
<tomee>
<!-- activate next line to be able to deploy applications in apps -->
<!-- <Deployments dir="apps" /> -->
</tomee>
常用能力:
- 声明部署目录:取消注释
<Deployments dir="apps" />后,/opt/tomee/apps 目录中的应用也会被部署。 - 声明资源:在 tomee.xml 中以
<Resource>、<Container>元素声明数据源、JMS 连接工厂等,供应用按 JNDI 名称引用。例如声明一个数据源:
<tomee>
<Resource id="myDataSource" type="DataSource">
JdbcDriver = org.hsqldb.jdbcDriver
JdbcUrl = jdbc:hsqldb:mem:testdb
UserName = sa
Password =
JtaManaged = true
</Resource>
</tomee>
- 调整服务器行为:
<Container id="myCmp" ctype="ENTITY"/>、<Connector id="http+tomcat" port="8081"/>等子元素按需声明。
5.4 system.properties:TomEE 系统属性
system.properties 中的键值对会在启动时注入为 JVM 系统属性。10.2.0 默认唯一启用项:
tomee.serialization.class.blacklist = *
含义:出于安全考虑默认拒绝全部远程反序列化类。常用可调参数还包括(默认均以注释形式给出):
| 属性 | 默认 | 说明 |
|---|---|---|
| tomee.remote.support | false | 是否允许远程 EJB 客户端连接 |
| tomee.serialization.class.whitelist | 空 | 允许反序列化的包前缀,按需最小化开放 |
| org.apache.johnzon.max-string-length | 8192 | JSON-P/JSON-B 反序列化字符串长度上限 |
| openejb.cdi.activated-on-ejb | true | 含 EJB 的模块是否自动激活 CDI |
| openejb.environment.default | true | 是否注册 ManagedExecutorService 等默认资源 |
| openejb.autocreate.jta-datasource-from-non-jta-one | true | 非事务数据源是否自动派生事务数据源 |
修改后重启生效;确认属性已注入可用 JDK 自带的 jcmd 查看:
jcmd $(jps | awk '/Bootstrap/{print $1}') VM.system_properties | grep tomee.serialization
实测回显:
tomee.serialization.class.blacklist=*
5.5 bin/setenv.sh:JVM 参数
setenv.sh 默认不存在,由维护者创建,startup.sh 与 catalina.sh 会自动加载。实测配置:
#!/bin/sh
JAVA_OPTS="-Xms256m -Xmx512m -Djava.awt.headless=true"
| 变量 | 用途 |
|---|---|
| JAVA_OPTS | 传给 JVM 的基础参数,堆内存、头less模式等在此设置 |
| CATALINA_OPTS | 仅传给 Catalina 的参数,可与 JAVA_OPTS 分工 |
| CATALINA_PID | PID 文件路径,catalina.sh stop -force 依赖它 |
| JPDA_ADDRESS | 远程调试端口(配合 catalina.sh jpda start) |
验证堆参数已生效:
jps -v | grep Bootstrap | grep -oE "Xms256m Xmx512m"
实测回显:
Xms256m Xmx512m
内存建议:初始堆与最大堆设置为相同值可避免运行期扩容抖动;256-512MB 适合中小应用,高负载场景按 可用物理内存 = 堆 + 元空间 + 线程栈 + 堆外缓存 估算上调。
5.6 tomcat-users.xml:管理账号
默认文件全部为注释,管理页不可用。实测启用的账号:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<user username="admin" password="q1w2e3r4" roles="manager-gui,manager-script,manager-status,admin-gui"/>
| 角色 | 授权范围 |
|---|---|
| manager-gui | /manager/html 页面 |
| manager-script | /manager/text 文本接口(部署、启停、卸载应用) |
| manager-status | 只读状态页 |
| admin-gui | /host-manager 页面 |
密码存储支持明文或摘要,摘要可用 digest.sh 生成后以 {SHA512}摘要值 形式写入 password 属性。
5.7 catalina.properties:类加载路径
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"
server.loader=
shared.loader=
| 参数 | 说明 |
|---|---|
| common.loader | 所有应用共享的类库路径,需要全局加载的 JDBC 驱动 jar 放入 /opt/tomee/lib |
| server.loader | 仅服务器内部可见的类库,默认为空 |
| shared.loader | 各应用间共享但对服务器不可见的类库,默认为空 |
5.8 logging.properties:日志级别
日志框架为 JULI,常用参数:
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
localhost.org.apache.juli.AsyncFileHandler.level = FINE
排障时可临时把 1catalina.org.apache.juli.AsyncFileHandler.level 调整为 ALL,完成后恢复 FINE,避免日志膨胀。
六、生产配置模板
以下为中小流量生产环境(2 核 4GB 内存的通用服务器、磁盘 40GB+)的推荐基线,均标注适用场景:
- /opt/tomee/bin/setenv.sh(场景:中小 Web 应用,堆 512MB 上限防止单实例挤占整机内存):
#!/bin/sh
JAVA_OPTS="-Xms512m -Xmx512m -Djava.awt.headless=true -XX:MaxMetaspaceSize=256m"
CATALINA_PID="/opt/tomee/temp/tomee.pid"
- server.xml 连接器(场景:前面有 Nginx 反代,无长连接压力):
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="200"
maxParameterCount="1000"
xpoweredBy="false" server="Apache TomEE"
acceptCount="100" />
- system.properties(场景:需要远程 EJB 或 JNDI 客户端时才放开白名单,否则保持 blacklist=*):
tomee.serialization.class.blacklist = *
# tomee.serialization.class.whitelist = com.example.dto
-
tomee.xml(场景:需要为应用提供共享数据源时添加 Resource 声明,否则保持为空)。
-
tomcat-users.xml(场景:仅保留必要角色,密码更换为强密码;磁盘方面常规部署小于 1GB,日志目录建议预留 5GB 并配置轮转)。
七、常见问题
Q1:修改了 server.xml 但重启后不生效?
先用 configtest.sh 确认语法正确且退出码为 0;再确认修改的是运行实例实际使用的 CATALINA_BASE 下的 conf 文件。systemd 单元中 Environment=CATALINA_BASE=/opt/tomee 指明了基准目录,若存在多实例,各实例的 conf 相互独立。
Q2:堆内存上限应该设多大?
以 256-512MB 为基线,观察 /opt/tomee/logs/catalina.out 中是否有 FullGC 频繁、java.lang.OutOfMemoryError 等信号再逐步上调。核对当前值:
ps -ef | grep "[j]ava" | grep -oE "Xms[0-9]+m Xmx[0-9]+m"
实测回显:
Xms256m Xmx512m
Q3:manager 页面提示 403 拒绝访问?
说明账号存在但角色不足或浏览器访问的路径与角色不匹配:/manager/html 需要 manager-gui,/manager/text 需要 manager-script。核对 tomcat-users.xml 中 user 元素的 roles 列表后重启进程。
Q4:如何确认某项 TomEE 系统属性已生效?
通过 JDK 自带的 jcmd 查看注入后的实际值:
jcmd $(jps | awk '/Bootstrap/{print $1}') VM.system_properties | grep "关键字"
八、参考链接
- TomEE 官方文档(部署与资源说明):https://tomee.apache.org/latest/docs/
- TomEE 系统属性清单:https://tomee.apache.org/latest/docs/admin/configuration/properties-listing.html
- Tomcat 10.1 server.xml 参考:https://tomcat.apache.org/tomcat-10.1-doc/config/server.html
- Tomcat 10.1 HTTP Connector 参考:https://tomcat.apache.org/tomcat-10.1-doc/config/http.html
- Tomcat 10.1 Manager 应用文档:https://tomcat.apache.org/tomcat-10.1-doc/manager-howto.html