小业务,流量不大,主要是接口高峰期会出现请求数比较多,使用Tomcat8.5 默认配置稳定运行了一段时间,后续业务增长巡查中发现出现内存不足,于是百度了一下优化方案。
有效优化地方:
1、增加JVM堆内存
相关说明如下:
可以给Java虚拟机设置使用的内存,但是如果选择不对的话,虚拟机不会补偿。可通过命令行的方式改变虚拟机使用内存的大小。
-Xms<size> 表示JVM初始化堆的大小,-Xmx<size>表示JVM堆的最大值。一般建议堆的最大值设置为可用内存的最大值的80%,并将-Xms和-Xmx选项设置为相同。
具体操作方式:
Windows系统
bin目录下增加文件:setenv.bat
内容为:
SET JAVA_OPTS=-server -Xms1g -Xmx1g
可以通过Java VisualVM监控
路径:\bin\jvisualvm.exe
2、调整线程数目
第一步,打开共享的线程池
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="4000" minSpareThreads="1000" maxSpareThreads="2000" maxIdleTime="60000"
prestartminSpareThreads = "true"
maxQueueSize = "100"/>
第二步 在Connector里指定使用共享线程池
<Connector executor="tomcatThreadPool" port="8080" maxHttpHeaderSize="8192"
maxThreads="4000" minSpareThreads="1000" maxSpareThreads="2000"
enableLookups="false" redirectPort="8443" acceptCount="2000"
connectionTimeout="20000" disableUploadTimeout="true" />
百度到还有其他优化,感觉影响不大,没有一一测试,服务器4核8g的,上面也没跑啥业务,并发大点就挂了感觉不科学,用了以上配置之后暂时稳定。
第二处优化参考了多个,参数没有具体测试会不会重复或是否生效之类的,高手请帮忙指点。