今天来总结一下 tomcat 的一些优化的方案,由于本人才疏学浅,写的不好,勿喷!
tomcat 对于大多数从事开发工作的童鞋应该不会很陌生,通常做为默认的开发环境来为大家服务,不过 tomcat 默认的一些配置对于生产环境来说是相当不够滴,特别对于内存以及线程的配置方面都很有可能成为日后性能的瓶颈。
接下来咱们就聊聊 tomcat 的优化,从内存以及线程两个方面来谈:
1. 内存方面
tomcat 的内存优化操作起来就比较简单了
如果是 linux 环境的话设置如下:
修改 TOMCAT_HOME/bin/catalina.sh,在前面加入
- JAVA_OPTS = "-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"
如果是 windows 环境的话设置如下:
修改 TOMCAT_HOME/bin/catalina.bat,在前面加入
- set JAVA_OPTS = -XX: PermSize = 64M - XX: MaxPermSize = 128m - Xms512m - Xmx1024m
2. 线程方面
在 server.xml 中 有以下配置:
- <Connector
- port="8080" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100"
- maxSpareThreads="500" acceptCount="700"connectionTimeout="20000" />
先来了解一下各属性内容:
maxThreads="X" 表示最多同时处理 X 个连接
minSpareThreads="X" 初始化 X 个连接
maxSpareThreads="X" 表示如果最多可以有 X 个线程,一旦超过 X 个, 则会关闭不在需要的线程
acceptCount="X" 当同时连接的人数达到 maxThreads 时, 还可以排队, 队列大小为 X. 超过 X 就不处理
这里是 http connector 的优化,如果使用 apache 和 tomcat 做集群的负载均衡,并且使用 ajp 协议做 apache 和 tomcat 的协议转发,那么还需要优化 ajp connector。
- <Connector
- port="8009" protocol="AJP/1.3" maxThreads="600" minSpareThreads="100"
- maxSpareThreads="500" acceptCount="700"connectionTimeout="20000"
- redirectPort="8443" />
由于 tomcat 有多个 connector,所以 tomcat 线程的配置,又支持多个 connector 共享一个线程池。
首先。打开 / conf/server.xml,增加
- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="20" maxIdleTime="60000" />
最大线程 500(一般服务器足以),最小空闲线程数 20,线程最大空闲时间 60 秒。
然后,修改 <Connector ...> 节点,增加 executor 属性,executor 设置为线程池的名字:
- <Connector
- executor="tomcatThreadPool" port="80" protocol="HTTP/1.1"
- connectionTimeout="60000" keepAliveTimeout="15000"
- maxKeepAliveRequests="1" redirectPort="443" />
可以多个 connector 公用 1 个线程池,所以 ajp connector 也同样可以设置使用 tomcatThreadPool 线程池。转自
浅谈 tomcat 中间件的优化
https://www.toutiao.com/i6499659893543272974/
来源: http://www.bubuko.com/infodetail-2432856.html