linux下jvm优化、tomcat调优
系统环境:jdk1.8,apache-tomcat-8.5.35
一、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"
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。 各参数含义: (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。二、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" />
2.关闭shutdown端口
shown端口是写在Server参数里的,直接去掉是不管用,也是会默认启动的,一般在安全设置时候建议把端口修改为其他端口,shutdown修改为其他复杂字串。实际上这个端口是可以直接屏蔽不监听的。设置时候将其port值修改为-1即可: <Server port="-1" shutdown="SHUTDOWN">
3、禁用tomcat Manager管理入口
为防止从tomcat web管理界面上传文件,破坏运行环境,可以手动删除tomcat自带的管理界面。 进入tomcat默认页面时有“server status”、“manager app”、“Host manager”。

访问tomcat web页面,用上面配置的用户名密码登录将会出现如下界面,一旦用户名密码泄露或被攻击,服务器很容易被破坏。
Server Status
Manager App
Host Manager
避免如上界面入口引发问题,操作如下: 1、进入tomcat/webapps目录 2、只保留manager,ROOT,以及项目相关文件,删除其他包含docs、examples、host-manager文件(rm -rf 目录名称), 如果怕出错,请先备份要删除的文件。
重新启动tomcat后,Tomcat Manager Web将如下:
Server Status
Manager App
Host Manager
恭喜!优化设置到此结束,赶紧尝试一下吧!

更多精彩