亲测好用的 Liunx对tomcat加内存、并优化jvm

系统环境: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"

各参数含义:

(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如下两段配置:

maxThreads="700" minSpareThreads="100" maxSpareThreads="400" prestartminSpareThreads = "true" maxQueueSize = "300"/>

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即可:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值