首页 > 编程知识 正文

tomcat如何调优,tomcat高可用配置

时间:2023-05-06 03:25:07 阅读:25036 作者:4551

1 .更改内存/jvm配置之前

jva _ opts='-xms 1024 m-xmx 4096 m-XSS 1024k-xx : permsize=512 m-xx 3360 maxperm size=2048 m '调整后

Java _ opts='-xms 2048 m-xmx 2048 m-XSS 1024k-xx : permsize=512 m-xx 3360 maxperm size=2048 m '参数的含义:

server :启用JDK的服务器版本; - xms :初始化Java虚拟机时堆的最小内存; -Xmx:Java虚拟机可以使用的堆的最大内存; -Xss :每个线程的堆栈大小; -XX:PermSize:Java虚拟机的永久大小; -XX:MaxPermSize:Java虚拟机的最大持久大小; Xms通常配置为与Xmx相同的值。 这具有以下优点: JVM在运行时不需要消耗性能来扩展内存空间。 显示jmap-heap端口堆的使用情况

2 .对于每个2.server.xml接收请求,请求中都需要线程。 如果接收到的并发请求数超过当前可用的请求处理线程所能处理的数量,则会创建附加线程,直到达到设定的最大值(maxThreads属性的值)。 如果收到更多并发请求,请将它们堆栈在由Connector创建的服务器套接字中,直至达到所设置的最大值(acceptCount属性的值)。 在有足够的资源来处理它们之前,更多的并发请求会收到“连接被拒绝”错误。

协调连接器连接器是一个连接器,负责接受客户请求和向客户回复响应消息。 所以优化连接器是很重要的一部分。 默认情况下,Tomcat只支持200个线程的访问,超过此数量的连接会因等待或超时而被丢弃,因此需要提高这方面的处理能力。

其中port表示服务接口,protocol表示协议类型,connectionTimeout表示连接超时时间(以毫秒为单位)。 redirectPort表示安全通信(https )传输端口,通常配置为8443。

可见,除了这些基本结构以外,没有其他特别的功能。 因此,必须扩展连接器。

其中,Connector支持参数的属性位于Tomcat官方网站(https://Tomcat.Apache.org/Tomcat-8.0-doc/config/http.html ) 这里只添加一般的东西。

调整前

连接器端口=' 8082 ' protocol=' http/1.1 '连接时间out=' 20000 ' redirect port=' 8443 ' max connections=' 8000

连接器执行程序=' Tomcat thread pool ' port=' 8082 ' protocol=' http/1.1 '连接时间输出=' 30000 '重定向端口=' 8443 ' max threads=' 340 ' max连接=' 1000 ' accept count=' 100000 ' 8192 ' TCP nodelay=' true ' enable lookups=' false ' uri encoding=' utf-8 '/8 '

执行程序:对执行程序元素中名称的引用。 如果设置了此属性,并且存在命名的执行程序,则连接器将使用此执行程序,而忽略所有其他线程属性。 请注意,如果连接器未指定共享执行程序,则连接器将使用内部专用执行器提供线程池。 maxConnections服务在任意时间点接受和处理的最大连接数。 达到此数量后,服务接受另一个连接,但不处理。 在处理的连接数低于或等于maxConnections之前,如果其他连接被阻止且低于或等于maxConnections,服务器将重新开始接受和处理新连接。 即使连接达到限制,操作系统也可以根据接受计数设置接受新连接。 默认值因连接器类型而异。 对于BIO,默认值为maxThreads的值,除非配置了执行程序。 在这种情况下,将使用默认值,即执行程序的最大阈值。 最大线程数:用于处理Tomcat创建的请求的最大线程数。 默认值为200。 如果在连接器上配置了Executor,则忽略此属性,并使其成为排队超过该属性的minSpareThreads:tomcat初始线程数,即最小空闲线程数。 默认值为10。 如果设置了Executor,则忽略此属性。 maxSpareThreads:tomcat最大空闲线程数,超出时acceptCount :最大排队等待数,如果服务器收到的请求数达到maxConnections,后续请求将进入任务队列此参数是排队的请求数,不会处理超过此数的请求。 默认值为100。 交流电源

ceptorThreadCount:用于接收连接的线程数,在多cpu环境可以增加此值。默认值1(官方文档中说实际上并不需要增加此值:Increase this value on a multi CPU machine, although you would never really need more than 2)。connectionTimeout:接受连接后,此连接将等待呈现请求URI行的毫秒数。使用值-1表示没有(即无限)超时。默认值为60000(即60秒),但请注意,Tomcat附带的标准server.xml将此值设置为20000(即20秒)。除非disableUploadTimeout设置为false,否则在读取请求正文(如果有)时也会使用此超时时间。keepAliveTimeout:该连接器在关闭连接之前等待另一个HTTP请求的毫秒数。默认值是使用为connectionTimeout属性设置的值 。使用值-1表示没有(即无限)超时。一台tomcat的最大请求处理数=maxConnections+acceptCount。 2.调整Executor

Executor 代表了一个线程池,可以在 Tomcat 组件之间共享。使用线程池的好处在于减少了创建销毁线程的相关消耗,而且可以提高线程的使用效率。

Executor 的配置需要在Connector之前配置,否则Connector无法读取。

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="100" maxIdleTime="60000" maxQueueSize="Integer.MAX_VALUE" prestartminSpareThreads="false" threadPriority="5" className="org.apache.catalina.core.StandardThreadExecutor"/>

参数含义:

name:线程池名称,用于 Connector中指定。namePrefix:所创建的每个线程的名称前缀,一个单独的线程名称为 namePrefix+threadNumber。maxThreads:池中最大线程数,默认200。minSpareThreads:最小空闲线程(活跃线程数),也就是核心池线程数,默认25,这些线程不会被销毁,会一直存在。maxIdleTime:线程空闲时间,超过该时间后,空闲线程会被销毁,默认值为60000(1分钟),单位毫秒。maxQueueSize:在被执行前最大请求排队数目,默认为Int的最大值。除非特殊情况,这个值不需要更改,否则会有请求不会被处理的情况发生。prestartminSpareThreads:启动线程池时是否启动 minSpareThreads部分线程。默认值为false,即不启动。threadPriority:线程池中线程优先级,默认值为5,值从1到10。className:线程池实现类,未指定情况下,默认实现类为org.apache.catalina.core.StandardThreadExecutor。如果想使用自定义线程池首先需要实现 org.apache.catalina.Executor接口。

线程池配置完成后需要在 Connector 中指定:

<Connector executor="tomcatThreadPool" ...

3.添加jconsle监控

1.修改catalina.sh

在JAVA_OPTS的配置后,追加以下信息:

-Djava.rmi.server.hostname=192.168.10.94 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="18081" -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false"

hostname:服务器ip

port:自定义

然后使用本地的jconsole连接

参考: https://tomcat.apache.org/tomcat-8.5-doc/config/executor.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。