Tomcat 安全与主意事项

本文详细介绍了如何安全地配置并使用Tomcat服务器,包括避免使用root用户启动、隐藏Tomcat版本信息、禁止自动部署等功能,以提高系统的安全性。


文章出处:http://netkiller.github.io/www/index.html 

Tomcat 安全与主意事项

不要使用root用户启动tomcat

关闭war自动部署 unpackWARs="false" autoDeploy="false"

隐藏Tomcat版本信息

首次安装完成后立即删除webapps下面的所有代码

注释或删除 tomcat-users.xml 所有用户权限,看上去如下:

# cat conf/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
</tomcat-users>

服务器上不要安装JDK,请使用 Server JRE.

应用程序部署与tomcat启动,不能使用同一个用户。

 

延伸阅读:http://netkiller.github.io/www/index.html

转载于:https://my.oschina.net/neochen/blog/146217

<think>好的,用户想了解在Tomcat中配置JVM参数的注意事项和最佳实践。首先,我需要回顾一下相关的知识,并结合之前的引用内容来整理回答。 根据引用[3],Tomcat需要JDK环境,并且JAVA_HOME必须正确设置。所以配置JVM参数时,首先要确保Java环境正确。接下来,用户的问题是关于JVM参数的,所以需要参考引用[2]中的垃圾收集器配置,比如G1GC的参数设置,这可能适用于Tomcat。另外,引用[1]提到了启动参数优先级,包括JVM选项的位置和格式,这也需要应用到Tomcat的启动脚本中。 首先,JVM参数的设置位置。通常,Tomcat通过catalina.shcatalina.bat来启动,用户可以在这些脚本中添加JVM参数,比如在JAVA_OPTSCATALINA_OPTS中设置。注意CATALINA_OPTS和JAVA_OPTS的区别,前者只在启动时生效,后者在启动和停止时都生效,所以推荐使用CATALINA_OPTS以避免问题。 接下来是内存分配。初始堆和最大堆的设置很重要,通常使用-Xms和-Xmx,并且建议两者设为相同值,避免动态调整带来的性能波动。例如,-Xms2G -Xmx2G。需要根据服务器的物理内存来调整,避免设置过大导致内存交换OOM错误。 垃圾回收器的选择,引用[2]提到G1GC适合Kafka,同样适用于Tomcat,特别是高吞吐和低延迟的场景。所以推荐使用-XX:+UseG1GC,并设置相关参数如MaxGCPauseMillis和InitiatingHeapOccupancyPercent。比如-XX:MaxGCPauseMillis=200,根据应用需求调整。 还需要注意避免显式GC调用,使用-XX:+DisableExplicitGC,防止代码中的System.gc()影响性能。另外,OOM时的处理策略,比如生成Heap Dump,方便后续分析,可以设置-XX:+HeapDumpOnOutOfMemoryError和指定路径。 监控诊断参数,比如开启GC日志,记录详细日志以便分析。参数如-Xlog:gc*:file=/path/to/gc.log:time:filecount=5,filesize=10M。同时,JMX远程监控需要配置端口和认证,但要注意安全风险。 关于线程栈大小,默认1MB,对于多线程应用可能需要调整,但宜过小,避免栈溢出。使用-Xss256k等参数。 系统环境方面,引用[3]提到JAVA_HOME必须正确,否则Tomcat无法启动。同时,操作系统权限,确保Tomcat用户有足够的权限访问相关目录和文件。 最佳实践中,参数优先级方面,引用[1]指出命令行参数优先级最高,其次是环境变量,最后是配置文件。所以推荐在启动脚本中明确设置参数,而是依赖其他配置。同时,分阶段调整,测试环境先设置基本参数,生产环境逐步优化,避免频繁Full GC。 还要考虑Tomcat版本和JDK版本的兼容性,比如较新的JDK可能默认使用G1,而旧版本可能需要手动开启。另外,避免过度优化,根据监控数据进行调整,而是盲目套用参数。 需要生成相关问题,比如如何选择GC算法、如何分析GC日志、参数优先级等,帮助用户进一步学习。</think>在Tomcat中配置JVM参数时需注意以下核心要点和最佳实践: --- ### 一、基础参数配置 1. **内存分配** - 初始堆内存(`-Xms`)和最大堆内存(`-Xmx`)应设置为相同值,避免动态调整开销。 示例:`-Xms2G -Xmx2G` - 新生代大小(`-Xmn`)建议为堆的25%-50%,例如:`-Xmn1G` 2. **垃圾回收器选择** - 对于低延迟场景,推荐G1垃圾回收器(Garbage-First)[^2]: ```bash -XX:+UseG1GC -XX:MaxGCPauseMillis=200 ``` - 避免使用`-XX:+DisableExplicitGC`,某些框架可能依赖显式GC调用。 --- ### 二、性能优化参数 1. **元空间配置** - 限制元空间大小防止内存泄漏: `-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M` 2. **线程堆栈大小** - 默认1MB,可适当减少(如`-Xss256k`)以支持更多线程,但需避免栈溢出。 3. **OOM处理策略** - 内存溢出时生成堆转储: ```bash -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof ``` --- ### 三、监控日志 1. **GC日志记录** ```bash -Xlog:gc*:file=/var/log/tomcat/gc.log:time:filecount=5,filesize=10M ``` 2. **JMX远程监控** ```bash -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false ``` --- ### 四、配置生效位置 1. **参数优先级** 命令行参数 > `CATALINA_OPTS` > `JAVA_OPTS` > 系统环境变量[^1]。 - 推荐在`$TOMCAT_HOME/bin/setenv.sh`中设置`CATALINA_OPTS`: ```bash export CATALINA_OPTS="-Xms2G -Xmx2G -XX:+UseG1GC" ``` 2. **避免的常见错误** - 要将参数同时写入`setenv.sh`和`catalina.sh`,防止冲突。 --- ### 五、环境检查验证 1. **Java环境验证** - 确保`JAVA_HOME`正确指向JDK路径(非JRE)[^3]: ```bash echo $JAVA_HOME ``` 2. **参数生效检查** - 使用`jcmd <PID> VM.flags``jinfo -flags <PID>`查看实际生效参数。 --- ### 最佳实践总结 1. **分阶段调整** - 开发环境:启用GC日志和堆转储。 - 生产环境:根据监控数据优化GC策略和堆大小。 2. **版本兼容性** - JDK 11+默认使用G1GC,旧版本需手动启用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值