JVM内存配置不合理是Tomcat启动慢的常见原因。需根据服务器内存大小调整堆内存(-Xms、-Xmx)和元空间(-XX:MetaspaceSize、-XX:MaxMetaspaceSize),避免频繁GC。建议将初始堆(-Xms)与最大堆(-Xmx)设置为相同值(如-Xms2048m -Xmx2048m),减少启动时堆扩容的开销;同时使用G1垃圾回收器(-XX:+UseG1GC),并通过-XX:MaxGCPauseMillis设置最大GC暂停时间(如200ms),平衡吞吐量与延迟。
此外,需在$CATALINA_HOME/bin/catalina.sh文件中添加上述参数,确保启动时生效。
连接器是Tomcat处理请求的核心组件,优化其参数可提升启动和运行效率:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol">,显著提高网络I/O性能。maxThreads(最大线程数,如200)、minSpareThreads(最小空闲线程数,如50)参数调整线程池大小,避免线程过多导致上下文切换开销,或过少导致请求排队。compression="on"参数,对响应内容进行GZIP压缩,减少网络传输数据量(尤其适合文本类响应)。$CATALINA_HOME/conf/server.xml文件的Connector元素中修改。rng-tools服务(yum install rng-tools),并启动/启用服务(systemctl start rngd; systemctl enable rngd),填充熵池。$JAVA_HOME/jre/lib/security/java.security文件,将securerandom.source从file:/dev/random改为file:/dev/./urandom(或直接在catalina.sh中添加-Djava.security.egd=file:/dev/./urandom),使用非阻塞的urandom生成随机数,加快启动速度。/etc/security/limits.conf文件,增加Tomcat用户的文件描述符限制(如* soft nofile 65536; * hard nofile 65536),避免启动时因文件句柄不足而延迟。server.xml中的AJP连接器(<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> -->),减少启动时的端口绑定开销。$CATALINA_HOME/conf/server.xml的Host元素中,设置autoDeploy="false"和deployOnStartup="false",避免Tomcat启动时自动扫描并部署webapps目录下的应用,缩短启动时间。webapps目录下未使用的WAR包或解压后的应用目录,减少应用初始化的负担。优化内核参数可提升网络和文件系统性能:
编辑/etc/sysctl.conf文件,添加或修改以下参数:
net.core.somaxconn=65535:增加TCP监听队列的最大长度,避免连接请求被拒绝;net.ipv4.tcp_tw_reuse=1:允许复用TIME-WAIT状态的连接,减少TCP连接建立的开销;fs.file-max=65536:增加系统最大文件描述符数量,支持更多并发文件操作。sysctl -p使配置生效。SELinux和防火墙会拦截Tomcat的网络请求,增加启动时的安全检查开销。测试环境中可临时关闭:
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config并重启服务器;systemctl stop firewalld; systemctl disable firewalld。webapps、logs、temp)放在SSD上,提升文件读写速度(尤其是大量小文件的操作),显著缩短启动时间。$CATALINA_HOME/temp和$CATALINA_HOME/work目录下的临时文件(如编译后的JSP文件),释放磁盘空间;jstat(查看GC情况)、jstack(查看线程状态)等工具监控启动时的性能瓶颈(如GC频繁、线程阻塞),针对性调整参数。