系统环境:jdk1.8,apache-tomcat-8.5.35javascript
1、jvm优化
进入 bin/catalina.sh,修改JAVA_OPTS配置:
JAVA_OPTS="-server -Xms8192M -Xmx8192M -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=8 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/javamemorylogs/dump -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/usr/local/javamemorylogs/gclog -XX:+DisableExplicitGC"css

各参数含义:
(1)-server:表示这是应用于服务器的配置,JVM 内部会有特殊处理的 。
(2)-Xms8192m:设置JVM最小内存。此值能够设置与-Xmx相同,以免每次垃圾回收完成后JVM从新分配内存。
(3)-Xmx8192m:设置JVM最大可用内存。
(4):-XX:NewRatio=4:设置年轻代(包括 Eden 和两个 Survivor 区)与终身代的比值(除去永久代)。设置为 4,则年轻代与终身代所占比值为 1:4,年轻代占整个堆栈的 1/5 。
(4)-XX:SurvivorRatio=8:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:8,表示Eden:Survivor=8:2,一个Survivor区占整个年轻代的1/10。
(5)-XX:+UseConcMarkSweepGC:CMS收集,设置年老代为并发收集。它的主要适合场景是对响应时间的重要性需求大于对吞吐量的需求,可以承受垃圾回收线程和应用线程共享CPU资源,而且应用中存在比较多的长生命周期对象。CMS收集的目标是尽可能减小应用的暂停时间,减小Full GC发生的概率,利用和应用程序线程并发的垃圾回收线程来标记清除年老代内存。
(6)-XX:ParallelGCThreads=8:表示JVM在进行并行GC的时候,用于GC的线程数。
(7)-XX:+HeapDumpOnOutOfMemoryError:可让JVM在出现内存溢出时候Dump出当前的内存转储快照。
(8)XX:HeapDumpPath:生成DUMP文件的路径,如不设置,默认存储在jvm 运行环境目录。
(9)-XX:+PrintGCDetails:打印GC详细信息。
(10)-XX:+PrintGCDateStamps:记录GC日志并不会特别地影响Java程序性能,推荐你尽量记录日志。
(11)-Xloggc:指定GC log的位置,以文件输出。帮助开发人员分析问题。
(12)-XX:+DisableExplicitGC:这个将会忽略手动调用 GC 的代码使得 System.gc() 的调用就会变成一个空调用,彻底不会触发任何 GC。
2、tomcat优化
1.修改conf/server.xml以下两段配置:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="700" minSpareThreads="100" maxSpareThreads="400" prestartminSpareThreads = "true" maxQueueSize = "300"/>
<Connector executor="tomcatThreadPool"
port="80"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
acceptCount="500"
connectionTimeout="20000"
redirectPort="8443"
compression="on"
disableUploadTimeout="true"
compressionMinSize="2048"
acceptorThreadCount="2" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
URIEncoding="utf-8"
enableLookups="false"
useURIValidationHack="false"
maxConnections="1000"
tcpNoDelay="true"
/>
重点参数解释:
(1)maxThreads:最大并发数,默认设置 200,通常建议在 500 ~ 800,根据硬件设施和业务来判断
(2)minSpareThreads:Tomcat 初始化时建立的线程数,默认设置 25
(3)prestartminSpareThreads:在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,若是不等于 true,minSpareThreads 的值就没啥效果了
(4)maxQueueSize:最大的等待队列数,超过则拒绝请求
(5)acceptCount:指定当全部可使用的处理请求的线程数都被使用时,能够放处处理队列中的请求数,超过这个数的请求将不予处理,默认设置 100
(6)maxConnections:服务器在任何给定时间将接受和处理的最大链接数。当达到这个数字时,服务器将接受,但不处理另外一个链接。这个额外的链接将被阻塞,直到正在处理的链接数量低于maxConnections,此时服务器将开始接受并再次处理新的链接。请注意,一旦达到限制,操做系统仍然能够接受基于acceptCount设置的链接。默认值因链接器类型而异。对于BIO,默认值是maxThreads的值,除非使用Executor,在这种状况下,默认值将是执行者的maxThreads的值。对于NIO和NIO2,默认值为10000.对于APR/native,默认值为8192。简单来讲就是nio使用maxConnections代替maxThreads。
(7)enableLookups:禁用DNS查询
2.关闭shutdown端口
shown端口是写在Server参数里的,直接去掉是无论用,也是会默认启动的,通常在安全设置时候建议把端口修改成其余端口,shutdown修改成其余复杂字串。实际上这个端口是能够直接屏蔽不监听的。设置时候将其port值修改成-1便可:
<Server port="-1" shutdown="SHUTDOWN">
三、禁用tomcat Manager管理入口
为防止从tomcat web管理界面上传文件,破坏运行环境,能够手动删除tomcat自带的管理界面。
进入tomcat默认页面时有“server status”、“manager app”、“Host manager”。
若是修改conf/tomcat-users.xml,配置后:
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<user username="user" password="password" roles="admin,manager,manager-gui"/>
访问tomcat web页面,用上面配置的用户名密码登陆将会出现以下界面,一旦用户名密码泄露或被攻击,服务器很容易被破坏。html
Server Statusjava

Manager Appweb

Host Managerapache

避免如上界面入口引起问题,操做以下:
一、进入tomcat/webapps目录
二、只保留manager,ROOT,以及项目相关文件,删除其余包含docs、examples、host-manager文件(rm -rf 目录名称),
若是怕出错,请先备份要删除的文件。
从新启动tomcat后,Tomcat Manager Web将以下:tomcat
Server Status安全

Manager App服务器

Host Manager并发

恭喜!优化设置到此结束,赶忙尝试一下吧!