java 培训个别最常做的更改,就是批改服务器的端口,也就是 server.xml 里的 Connector 局部。典型如下图所示:
其实,大部分优化,也是在 Connector 标签之内,从端口、并发到线程,都能够在这里配置。
一. 3 个参数搞定并发配置
作为一个能承接高并发互联网申请的 Web 容器,首当其冲的当然是海量申请的冲击。侥幸的是 Tomcat 反对 NIO,咱们能够通过调整线程数和并发配置,让它体现出最佳的性能。
• maxThreads — tomcat 接管客户端申请的最大线程数,也就是同时解决工作的个数,它的默认大小为 200;一般来说,在高并发的 I / O 密集型利用中,这个值设置为 1000 左右比拟正当
• maxConnections 这个参数是指在同一时间,tomcat 可能承受的最大连接数。对于 Java 的阻塞式 BIO,默认值是 maxthreads 的值;如果在 BIO 模式应用定制的 Executor 执行器,默认值将是执行器中 maxThreads 的值。对于 Java 新的 NIO 模式,maxConnections 默认值是 10000,所以这个参数咱们个别放弃不动即可
• acceptCount — 当线程数量达到下面设置的值,所能承受的最大排队数量。超过了这个值,申请就会被回绝。我个别会设置成和 maxThreads 设置成一样大的
简略阐明一下下面三个参数的关系:
零碎可能放弃的连接数
maxConnections+acceptCount,区别是 maxConnections 中的连贯能够被调度解决;acceptCount 中的连贯只能期待排队
零碎能解决的申请数
maxThreads 的大小,理论可能工作的线程数量。
幸福指数:maxThreads > maxConnections > acceptCount。
当初有些文章还充斥着 maxProcessors 和 minProcessors。但这两个参数,从 Tomcat5 开始被 deprecated,从 6 开始就彻底没了。
二、线程配置
在并发配置方面,能够看到咱们只有 minSpareThreads,然而却没有 maxSpareThreads。这是因为,从 Tomcat 6 开始减少 Executor 节点,这个参数曾经没用了。
因为线程是一个池子,所以它的配置,满足池的所有特点。
• namePrefix — 每个新开线程的名称前缀
• maxThreads — 线程池中的最大线程数
• minSpareThreads — 始终处于沉闷状态的线程数
• maxIdleTime — 线程的闲暇工夫,在超过闲暇工夫时这些线程则会被销毁
• threadPriority — 线程池中线程的优先级,默认为 5
三、搞定 JVM 配置
tomcat 是 Java 利用,所以 JVM 的配置同样会影响它的性能。比拟重要的配置参数如下。
2.1、内存区域大小
首先要调整的,就是各个分区的大小,不过这也要分垃圾回收器,咱们仅看一下一些全局的参数。
• -XX:+UseG1GC 首先,要指定 JVM 应用的垃圾回收器。尽量不要靠默认值去保障,要显式的指定一个。
• -Xmx 设置堆的最大值,个别为操作系统的 2 / 3 大小。
• -Xms 设置堆的初始值,个别设置成和 Xmx 一样的大小来防止动静扩容。
• -Xmn 年老代大小,默认新生代占堆大小的 1 /3。高并发快沦亡场景可适当加大这个区域。对半,或者更多,都是能够的。然而在 G1 下,就不必再设置这个值了,它会主动调整。
• -XX:MaxMetaspaceSize 限度元空间的大小,个别 256M 足够。这个别和初始大小 -XX:MetaspaceSize 设置成一样的。
• -XX:MaxDirectMemorySize 设置间接内存的最大值,限度通过 DirectByteBuffer 申请的内存。
• -XX:ReservedCodeCacheSize 设置 JIT 编译后的代码寄存区大小,如果察看到这个值有限度,能够适当调大,个别够用。
• -Xss 设置栈的大小,默认为 1M,曾经足够用了。
2.2、内存调优
• -XX:+AlwaysPreTouch 启动时就把参数里说好了的内存全副初始化,启动工夫会慢一些,但运行速度会减少。
• -XX:SurvivorRatio 默认值为 8。示意伊甸区和幸存区的比例。
• -XX:MaxTenuringThreshold 这个值在 CMS 下默认为 6,G1 下默认为 15。这个值和咱们后面提到的对象晋升无关,改变成果会比拟显著。对象的年龄散布能够应用-XX:+PrintTenuringDistribution 打印,如果前面几代的大小总是差不多,证实过了某个年龄后的对象总能降职到老生代,就能够把降职阈值设小。
• PretenureSizeThreshold 超过肯定大小的对象,将间接在老年代调配。不过这个参数用的不是很多。
2.3、垃圾回收器优化
G1 垃圾回收器
• -XX:MaxGCPauseMillis 设置指标进展工夫,G1 会尽力达成。
• -XX:G1HeapRegionSize 设置小堆区大小。这个值为 2 的次幂,不要太大,也不要太小。如果是在不晓得如何设置,放弃默认。
• -XX:InitiatingHeapOccupancyPercent 当整个堆内存应用达到肯定比例(默认是 45%),并发标记阶段就会被启动。
• -XX:ConcGCThreads 并发垃圾收集器应用的线程数量。默认值随 JVM 运行的平台不同而不同。不倡议批改。
四、其余重要配置
再看几个在 Connector 中配置的重要参数。
• enableLookups — 调用 request、getRemoteHost()执行 DNS 查问,以返回近程主机的主机名,如果设置为 false,则间接返回 IP 地址。这个要依据需要来
• URIEncoding — 用于解码 URL 的字符编码,没有指定默认值为 ISO-8859-1
• connectionTimeout — 连贯的超时工夫(以毫秒为单位)
• redirectPort — 指定服务器正在解决 http 申请时收到了一个 SSL 传输申请后重定向的端口号