一、修改 conf/context.xml 配置
这个主要是修改 Connector
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
1、protocol:
org.apache.coyote.http11.Http11NioProtocol (NIO模型,从6.0.x开始)、
org.apache.coyote.http11.Http11Nio2Protocol (AIO模型,从8.0.x开始)
org.apache.coyote.http11.Http11AprProtocol (APR模型 )
2、enableLookups:
设置为true,如果你想调用request.getRemoteHost(),以便返回远程客户的实际主机名执行DNS查找。
设置为false跳过DNS查找并改为以字符串形式返回IP地址(从而提高性能)。默认情况下,DNS查找被禁用。
3、maxThreads
此Connector将创建的请求处理线程的最大数量,从而确定可以处理的同时请求的最大数量。如果未指定,则此属性设置为200。
如果执行程序与此连接器相关联,则此属性将被忽略,因为连接器将使用执行程序而不是内部线程池执行任务。请注意,如果配置了执行程序,
则将正确记录为此属性设置的任何值,但是会报告该值(例如,通过JMX), -1以明确未使用它。
4、minSpareThreads
始终保持运行状态的最小线程数。这包括活动线程和空闲线程。如果未指定,10 则使用默认值。如果执行程序与此连接器相关联,则此属性将被忽略,因为连接器将使用执行程序而不是内部线程池执行任务。
请注意,如果配置了执行程序,则将正确记录为此属性设置的任何值,但是会报告该值(例如,通过JMX),-1以明确未使用它。
5、acceptCount
使用所有可能的请求处理线程时,传入连接请求的最大队列长度。队列已满时收到的任何请求都将被拒绝。默认值为100。
6、URIEncoding
在%xx解码URL之后,这指定用于解码URI字节的字符编码。默认值为UTF-8。
7、compression
所述连接器可在试图节省服务器的带宽使用HTTP / 1.1 GZIP压缩。该参数的可接受值为“ off”(禁用压缩),“ on”
允许压缩,这将导致压缩文本数据),“ force”(在所有情况下均强制压缩)或数字整数值(即等效于“ on”,
但指定压缩输出之前的最小数据量。如果内容长度未知,并且压缩设置为“ on”或更激进,则输出也将被压缩。如果未指定,
则此属性设置为“ off”。
注意:在使用压缩(节省带宽)和使用sendfile功能(节省CPU周期)之间需要权衡。如果连接器支持sendfile功能(例如NIO连接器)
,则使用sendfile将优先于压缩。症状是大于48 Kb的静态文件将以未压缩的形式发送。
您可以通过设置useSendfile连接器的属性来关闭sendfile,
如下所述,或者在DefaultServlet的配置中(默认值 conf/web.xml或web.xmlWeb应用程序的)更改sendfile的使用阈值 。
8、compressionMinSize
如果压缩设置为“ on”,则此属性可用于指定压缩输出之前的最小数据量。如果未指定,则此属性默认为“ 2048”。
9、compressibleMimeType
该值为逗号分隔的MIME类型列表,可以对其使用HTTP压缩。默认值为
text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml 。
-->
<Connector
port="8080"
connectionTimeout="20000"
redirectPort="8443"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
enableLookups="false"
maxThreads="1000"
minSpareThreads="100"
acceptCount="1500"
URIEncoding="UTF-8"
compression="on"
compressionMinSize="1024"
compressibleMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/json"
/>
二、修改JVM配置
修改配置 bin\catalina.sh 文件
# -Xms4G 初始分配的堆内存
# -Xmx4G 最大允许分配的堆内存,这两个配成一样。
# -Xmn1024m 最小允许分配的堆内存
# -XX:MetaspaceSize=1024M 初始元空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:
# 如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
# -XX:MaxMetaspaceSize=1024M
# -XX:+UseConcMarkSweepGC 并发标记清除(CMS)收集器
# -XX:+CMSClassUnloadingEnabled CMS垃圾回收会清理持久代,移除不再使用的classes。这个参数只有在 UseConcMarkSweepGC 也启用的情况下才有用
# -XX:+HeapDumpOnOutOfMemoryError 表示当JVM发生OOM时,自动生成DUMP文件。
# -XX:HeapDumpPath=${目录}参数表示生成DUMP文件的路径,也可以指定文件名称,
# 例如:-XX:HeapDumpPath=${目录}/java_heapdump.hprof。如果不指定文件名,
# 默认为:java_<pid>_<date>_<time>_heapDump.hprof。
# -verbose:gc 输出GC日志,-XX:+PrintGC 与 -verbose:gc 是一样的,可以认为-verbose:gc 是 -XX:+PrintGC的别名.
# -XX:+PrintGCDetails 打印GC详细信息
# -XX:+PrintGCTimeStamps 打印gc时间戳
# -XX:+PrintGCDateStamps 带日期和时间格式的详细GC日志
# -Xloggc:/appl/gc.log 定义gc日志目录
# -XX:CMSInitiatingOccupancyFraction=75 是指设定CMS在对内存占用率达到75%的时候开始GC(因为CMS会有浮动垃圾,所以一般都较早启动GC);
# -XX:+UseCMSInitiatingOccupancyOnly 只是用设定的回收阈值(上面指定的 75%),如果不指定,JVM仅在第一次使用设定值,后续则自动调整
# -XX:+AlwaysPreTouch 指定了 -Xms4G -Xmx4G 只是虚拟内存,在启动的时候,并不会初始化这么多的内存,所以指定 AlwaysPreTouch参数会在启动的时候,初始化指定的所有内存,在使用的时候,不会再次去初始化内存的情况,提高运行效率
JAVA_OPTS="-Xms4G -Xmx4G -Xmn1024m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=1024M
-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
-Xloggc:./gc/gc.log -XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly -XX:+PrintGCApplicationStoppedTime"
服务器:apache-tomcat-9.0.41
电脑硬件 8G内存
优化前吞吐量
2512.3523992965415
优化后吞吐量
6269.592476489028
更多的优化可借鉴
https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/Java%20%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E6%88%98-%E5%AE%8C/19%20%20%E9%AB%98%E7%BA%A7%E8%BF%9B%E9%98%B6%EF%BC%9AJVM%20%E5%B8%B8%E8%A7%81%E4%BC%98%E5%8C%96%E5%8F%82%E6%95%B0.md
最后修改于 2020-12-17 16:31:51
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

