tomcat 性能调优以及监控(学习笔记)

 

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配置的相关角色用户密码进行登录,例:

tomcat 性能调优以及监控(学习笔记)_第1张图片

登录效果:

tomcat 性能调优以及监控(学习笔记)_第2张图片

tomcat 性能调优以及监控(学习笔记)_第3张图片

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

protocol="org.apache.coyote.http11.Http11NioProtocol"

启动后,就可以生效。

利用 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或以上的系统中启动默认使用这种方式。

tomcat 性能调优以及监控(学习笔记)_第4张图片

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统一编码

开通线程池

tomcat 性能调优以及监控(学习笔记)_第5张图片

Connector使用线程池,executor参数对应Executor的name名,协议参数protocol修改为对应nio协议

tomcat 性能调优以及监控(学习笔记)_第6张图片

4、缓存优化

tomcat 性能调优以及监控(学习笔记)_第7张图片

compression 打开压缩功能
compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB
compressableMimeType 压缩类型
connectionTimeout 定义建立客户连接超时的时间. 如果为 -1, 表示不限制建立客户连接的时间
5、内存泄漏优化

另一个影响Tomcat 性能的因素是内存泄露。Server标签中可以配置多个Listener,其中 JreMemoryLeakPreventionListener是用来预防JRE内存泄漏。此Listener只需在Server标签中配置即可,默认情况下无需配置,已经添加在 Server中。

6、tomcat性能监控

i、使用tomcat自带工具:/manager ,可以查看系统以及jvm、连接器Connector使用情况等:

访问需要输入账号和密码,上面第1点已说明,在此不赘述。

tomcat 性能调优以及监控(学习笔记)_第8张图片

tomcat 性能调优以及监控(学习笔记)_第9张图片

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 性能调优以及监控(学习笔记)_第10张图片

 

注:在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的数据源、内存等
 

 

 

你可能感兴趣的:(tomcat 性能调优以及监控(学习笔记))