Frank的学习之路

10.1_Tomcat线程配置

ab -n 20000 -c 500 http://ip:8081/
-n表示请求数,-c表示并发数

ab -n 50000 -c 300 http://ip:8081/

JAVA_OPTS="-server -Xms4096m -Xmx4096m -Xss256K -XX:PermSize=512m -XX:MaxPermSize=2048m"

JAVA_OPTS="-server -Xms4096m -Xmx4096m -Xss256K -XX:PermSize=512m -XX:MaxPermSize=512m"

JAVA_OPTS="-server -Xms4096m -Xmx4096m -Xss256K -XX:PermSize=512m -XX:MaxPermSize=512m
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=12346
-Djava.rmi.server.hostname=ip"

-server:一定要作为第一个参数,在多个CPU时性能佳
-Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些,
-Xmx:Java heap最大值,使用的最大内存 ,最大空间(-Xmx)是物理内存的1/4,-Xmx不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM不是Throwable的,无法用try...catch捕捉,
-Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k. -Xss:每个线程的Stack大小
PermSize和MaxPermSize指明虚拟机为java永久生成对象(Permanate generation)如,class对象、方法对象这些可反射(reflective)对象分配内存限制,这些内存不包括在Heap(堆内存)区之中。
-XX:PermSize=64MB 最小尺寸,初始分配,-XX:MaxPermSize=256MB 最大允许分配尺寸,按需分配,过小会导致:java.lang.OutOfMemoryError: PermGen space

Tomcat普通线程配置:
<Connector port="8083" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8446"
maxThreads="400"
minSpareThreads="50"
maxSpareThreads="200"
acceptCount="400"
enableLookups="false"
disableUploadTimeout="true"
URIEncoding="UTF-8" />

tomcat并发参数:
maxThreads:最大的并发请求数,当cpu利用率高的时候,不宜增加线程的个数,当cpu利用率不高,大部分是io阻塞类的操作时,可以适当增加该值。
maxSpareThreads:Tomcat连接器的最大空闲 socket 线程数
acceptCount:当处理任务的线程数达到最大时,接受排队的请求个数
connectionTimeout:网络连接超时,单位毫秒
enableLookups:若为false则不进行DNS查询,提高业务能力应设置为false
disableUploadTimeout:若为true则禁用上传超时

https://tomcat.apache.org/tomcat-9.0-doc/config/http.html
友情链接:https://blog.csdn.net/u010133338/article/details/81142902


Tomcat线程池配置:

Tomcat 配置一个线程池:

<Executor name="tomcatThreadPool"
namePrefix="catalina-8081-exec-"
maxThreads="500"
maxSpareThreads="300"
minSpareThreads="100"
maxIdleTime="60000"
prestartminSpareThreads="false"
maxQueueSize="100"/>

name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:None;
namePrefix:在JVM上,每个运行线程都可以有一个name 字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;
maxThreads: 启动的用来接收请求的线程的最大数。即最大线程响应数目。最大并发数,默认值:200;
maxSpareThreads: 线程池中最大的不活动线程数
minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:100
maxIdleTime:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)。
prestartminSpareThreads:启动线程池时是否启动 minSpareThreads部分线程。默认值为false,即不启动。
maxQueueSize:在被执行前最大线程排队数目,默认为Int的最大值,也就是广义的无限。除非特殊情况,这个值不需要更改,否则会有请求不会被处理的情况发生。

配置Connector:
<Connector executor="tomcatThreadPool"
port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444"
acceptCount="300"
URIEncoding="UTF-8"
enableLookups="false"
/>

重要参数说明:
executor:表示使用该参数值对应的线程池;
minProcessors:服务器启动时创建的处理请求的线程数;
maxProcessors:最大可以创建的处理请求的线程数;
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
URIEncoding:指定tomcat的url编码格式
enableLookups:调用request、getRemoteHost()执行DNS查询,以返回远程主机的主机名,如果设置为false,则直接返回IP地址
protocol="org.apache.coyote.http11.Http11Protocol" 这句指定当前的访问协议,必须要写全










返回顶部