读书笔记:Tomcat优化
Posted 长怀千岁忧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读书笔记: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/
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
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
以上是关于读书笔记:Tomcat优化的主要内容,如果未能解决你的问题,请参考以下文章