tomcat整理架构(对应conf/server.xml文件节点)
1、内存优化
内存优化JVM相关配置位置:
Linux下修改TOMCAT_HOME/bin/catalina.sh
JAVA_OPTS="-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m
windows下修改TOMCAT_HOME/bin/catalina.bat
set JAVA_OPTS=-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m
参数说明:
-server:启用 JDK的 server 版本;
-Xms:Java虚拟机初始化时堆的最小内存,一般与 Xmx配置为相同值,这样的好处是GC不必再为扩展内存空间而消耗性能;
-Xmx:Java虚拟机可使用堆的最大内存;
-XX:PermSize:Java虚拟机永久代大小;
-XX:MaxPermSize:Java虚拟机永久代大小最大值;
验证:
通过tomcat管理员功能进行验证,http://localhost:端口号/manager
输入在conf/tomcat-users.xml配置的相关角色用户密码进行登录,例:
登录效果:
2、运行模式优化
tomcat的运行模式有3种
i、bio(blocking I/O)
即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。是基于JAVA的HTTP/1.1连接器,Tomcat7以下版本在默认情况下是以bio模式运行的。一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。(Tomcat7 或以下,在 Linux 系统中默认使用这种方式)
ii、nio(new I/O)
是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。
想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为
1 |
|
启动后,就可以生效。
利用 Java 的异步请求 IO 处理,可以通过少量的线程处理大量的请求
iii、apr
安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.
必须要安装apr和native,直接启动就支持apr。下面的修改纯属多余,仅供大家扩充知识,但仍然需要安装apr和native
如nio修改模式,修改protocol为org.apache.coyote.http11.Http11AprProtocol
这三种模式的不同之处如下:
BIO:
【一个线程处理一个请求】。
缺点:【并发量高时,线程数较多,浪费资源】。
Tomcat7或以下,在Linux系统中默认使用这种方式。
NIO:
【利用Java的异步IO处理】,可以通过【少量的线程处理大量的请求】。
Tomcat8在Linux系统中默认使用这种方式。
APR:
即Apache Portable Runtime,从操作系统层面解决io阻塞问题。
Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式。
3、并发优化
Connector 优化
Connector是连接器,负责接收客户的请求,以及向客户端回送响应的消息。所以 Connector的优化是重要部分。默认情况下 Tomcat只支持200线程访问,超过这个数量的连接将被等待甚至超时放弃,所以我们需要提高这方面的处理能力。
maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码
开通线程池
Connector使用线程池,executor参数对应Executor的name名,协议参数protocol修改为对应nio协议
4、缓存优化
compression 打开压缩功能
compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB
compressableMimeType 压缩类型
connectionTimeout 定义建立客户连接超时的时间. 如果为 -1, 表示不限制建立客户连接的时间
5、内存泄漏优化
另一个影响Tomcat 性能的因素是内存泄露。Server标签中可以配置多个Listener,其中 JreMemoryLeakPreventionListener是用来预防JRE内存泄漏。此Listener只需在Server标签中配置即可,默认情况下无需配置,已经添加在 Server中。
6、tomcat性能监控
i、使用tomcat自带工具:/manager ,可以查看系统以及jvm、连接器Connector使用情况等:
访问需要输入账号和密码,上面第1点已说明,在此不赘述。
ii、使用psi-probe工具(针对window系统)
下载:https://github.com/psi-probe/psi-probe,从github拉取源码本地编译即可,(进入该工程,用maven编译命令编译mvn install -Dmaven.test.skip=true)
安装:把编译好的probe.war包丢到tomcat的webapps下即可
访问时需要使用账号和密码,同使用tomcat自带的监控项目manager一样的账号和密码
注:在TOMCAT_HOME/bin/catalina.bat 加上 -Dcom.sun.management.jmxremote ,意思是开启JMX远程监控
各选项说明:
Applecations:tomcat上面正在跑的应用,可以看到每个应用的状态、请求数、session数等,点进去可以查看详细信息
Data Sources:tomcat的数据源
Deployment:代码部署,选择一个war并部署。
Logs:tomcat日志
Threads:tomcat线程,可以查看线程的状态等信息,还可以杀死线程
Cluster:tomcat集群
System Information:系统信息
Connectors:connector信息,可以看到每秒的请求数、响应时间等
Quick check:快速检测tomcat的数据源、内存等