一、修改 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
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇