vlambda博客
学习文章列表

读书笔记:Tomcat优化

Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机。


Tomcat具体架构说明

推荐这篇文章
https://blog.csdn.net/xlgen157387/article/details/79006434



优化配置(可视化)


优化配置之前需要配置一个tomcat管理员账户,来登录查看Tomcat控制台提高的各种参数。在conf/ tomcat-users.xml下添加用户:

 <role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="admin"/> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>


Tomcat 本身优化


Connector 连接器的配置


Tomcat 连接器的三种方式:bio、nio 和 apr,三种方式性能差别很大,apr 的性能最优, bio 的性能最差。

BIO:默认的模式,同步阻塞模式,性能非常低下,没有经过任何优化处理和支持.

NIO: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)更好的并发运行性能。

APR:安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.建议关闭,注释就行。


启动NIO模式 修改server.xml里的Connector节点,修改protocol为org.apache.coyote.http11.Http11NioProtocol

 <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />br

启动Tomcat,登录查看信息:http://127.0.0.1:8080/


读书笔记:Tomcat优化


Connector重要参数说明:


executor:表示使用该参数值对应的线程池;

minProcessors:服务器启动时创建的处理请求的线程数;(接客的线程数)

maxProcessors:最大可以创建的处理请求的线程数;(接客的线程数)

maxThreads:Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值150。(客人数)


acceptCount: 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10。

minSpareThreads:Tomcat初始化时创建的线程数。默认值25。

maxSpareThreads: 一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值75。

enableLookups: 是否反查域名,默认值为true。为了提高处理能力,应设置为false

connnectionTimeout: 网络连接超时,默认值60000,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。

maxKeepAliveRequests: 保持请求数量,默认值100。bufferSize: 输入流缓冲大小,默认值2048 bytes。

compression: 压缩传输,取值on/off/force,默认值off。 其中和最大连接数相关的参数为maxThreads和acceptCount。如果要加大并发连接数,应同时加大这两个参数。

执行器优化(使用线程池)


配置连接器使用线程池执行器


<Connector executor="tomcatThreadPool"               port="8080" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="8443" /><Executor name="tomcatThreadPool" namePrefix="catalina-exec-"        maxThreads="500" minSpareThreads="4"/>br


Executor标签重要参数说明:


name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:None;

namePrefix:在JVM上,每个运行线程都可以有一个name 字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;

maxThreads:该线程池可以容纳的最大线程数。默认值:200;

maxIdleTime:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)。

minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:25。

threadPriority:线程的等级。默认是Thread.NORM_PRIORITY



读书笔记:Tomcat优化


JVM的参数的优化


根据服务器物理内容情况配置相关参数优化tomcat性能。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大.


Tomcat默认可以使用的内存为128MB,Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下设置:JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】 -XX:PermSize=64M -XX:MaxPermSize=128m' 需要把几个参数值调大。例如:JAVA_OPTS='-Xms256m -Xmx512m' 表示初始化内存为256MB,可以使用的最大内存为512MB。调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。



   -server 启用jdk 的 server 版;-Xms java虚拟机初始化时的最小内存;-Xmx java虚拟机可使用的最大内存;-XX: PermSize 内存永久保留区域 -XX: MaxPermSize 内存最大永久保留区域 -Xmn jvm最小内存br


更加详细的jvm参数详解与设置
https://www.huaweicloud.com/articles/3b16febb6afd70a72db92c63397d8c5f.html

使用visualvm性能监控


visualvm是jdk自带的一款监控工具。它提供了一个可视界面,用于查看 Java 虚拟机上运行的基于 Java 技术的程序的详细信息。在jkd bin目录下有一个jvisualvm.exe文件 双击就可以使用。


如何使用jvisualvm

不同系统下的配置参考
https://www.cnblogs.com/daxin/p/5014203.html


1、配置JMX管理tomcat(Windows为例)


打开%TOMCAT_HOME%\bin\catalina.bat文件

添加参数行 ,在第一行


set JAVA_OPTS=%JAVA_OPTS% 

-Dcom.sun.management.jmxremote 

-Dcom.sun.management.jmxremote.port=9008(JMX端口)

-Dcom.sun.management.jmxremote.authenticate=false 

-Dcom.sun.management.jmxremote.ssl=false


2、重启tomcat








参考文献:

https://developer.aliyun.com/article/319115

https://juejin.cn/post/6844903586111963144

https://zhuanlan.zhihu.com/p/83864443