如何优化Tomcat——基础篇

发布时间:2023-05-21

一、打开Tomcat的线程池

默认情况下Tomcat的线程池是关闭的,需要手动打开来提高性能。

<Connector ...>
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
              maxThreads="500" minSpareThreads="6"/>
    <!-- 原本的 Executor 配置全部删除 -->
</Connector>

配置线程池之后,自然需要指定Executor的引用,如下:

<Connector executor="tomcatThreadPool" ...>
    ...
</Connector>

这里将maxThreadsminSpareThreads的值指定为了500和6,根据需求可以调整。

二、提高线程数和协议

在高并发情况下,Tomcat的默认线程数可能会导致系统崩溃。可以通过如下的配置来加大线程池,提高性能:

<Connector executor="tomcatThreadPool" port="8080" 
           protocol="org.apache.coyote.http11.Http11AprProtocol"
           connectionTimeout="20000"
           redirectPort="8443" />

这里协议使用了org.apache.coyote.http11.Http11AprProtocol,这是Tomcat专门针对高并发的一种协议。同时,也可以将线程数增加到1000或更多。

三、使用 Nginx 或 Apache 来作为反向代理

在高并发情况下,Tomcat自身处理不过来的时候,可以使用Nginx或Apache作为反向代理,将一部分请求转移到其他服务器上来处理,减轻Tomcat的负担:

upstream tomcats {
    server 127.0.0.1:8080;
}
server {
    listen 80;
    location / {
        proxy_pass http://tomcats;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto http;
    }
}

这里的server地址就是Tomcat的地址,在高并发的情况下,还可以使用多个服务器来负载均衡。

四、启用 GZIP 压缩

启用GZIP压缩可以减少网络传输的时间,提高网站的访问速度:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           compression="on"
           compressionMinSize="2048"
           noCompressionUserAgents="gozilla, traviata"
           compressableMimeType="text/html,text/xml,text/plain,application/json,application/xml,application/javascript" />

这里的compression指定为on,compressableMimeType是支持压缩的格式,可以根据需要添加。

五、优化JVM参数

JVM参数的优化可以提高Tomcat的性能:

JAVA_OPTS="-server -Xms1024m -Xmx4096m -XX:PermSize=64m 
           -XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC 
           -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
           -XX:+UseCodeCacheFlushing -Dfile.encoding=UTF-8"

其中-Xms-Xmx指定了JVM初始内存和最大内存,根据实际情况可以调整,其他各参数也可以根据需要进行适当调整。

六、调整session过期时间

如果有一些session非常占用内存,可以在web.xml中指定session的过期时间:

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

这里的session时间为30分钟,可以根据实际情况适当调整。

七、尽量使用静态资源

因为动态资源需要计算和生成,因此会消耗更多的资源。使用静态资源可以减少Tomcat的负担。 以上是Tomcat优化的几个方面,通过这些优化,可以让Tomcat更加高效地处理请求,提高系统的性能。同时,根据具体项目的情况,还需要综合考虑各种优化技术,以达到更好的优化效果。