当前位置: 首页 > 后端技术 > Java

java开发技术之Tomcat参数调优

时间:2023-04-01 18:26:48 Java

java培训最常见的改动就是修改服务器的端口,也就是server.xml中的Connector部分。一个典型的例子如下图所示:其实大部分的优化也在Connector选项卡里面,从端口、并发到线程,都可以在这里配置。1.3个参数获取并发配置作为可以承载高并发互联网请求的web容器,海量请求的冲击当然首当其冲。好在Tomcat支持NIO,我们可以通过调整线程数和并发配置使其发挥最佳性能。?maxThreads——tomcat接收客户端请求的最大线程数,即同时处理任务的数量,其默认大小为200;一般来说,在高并发I/O密集型应用中,这个值设置为1000左右比较合理?maxConnections这个参数是指tomcat同时可以接受的最大连接数。对于Java的blockingBIO,默认值为maxthreads的值;如果在BIO模式下使用自定义Executor,则默认值为执行器中maxThreads的值。对于新的JavaNIO模式,maxConnections的默认值是10000,所以我们一般保持这个参数不变?acceptCount--当线程数达到上面设置的值时,可以接受的最大队列数。如果超过这个值,请求将被拒绝。我一般设置成和maxThreads一样大,简单说明一下上面三个参数的关系:系统可以维护的连接数maxConnections+acceptCount,不同的是maxConnections中的连接可以被调度处理;acceptCount中的连接只能等待排队系统能处理的请求数maxThreads的大小,实际能工作的线程数。幸福指数:maxThreads>maxConnections>acceptCount。有些文章现在满是maxProcessors和minProcessors。但是这两个参数从Tomcat5开始就被deprecated了,从Tomcat6开始就完全没有了。2.线程配置在并发配置方面,我们可以看到只有minSpareThreads,没有maxSpareThreads。这是因为,从Tomcat6开始,添加Executor节点,这个参数就没有用了。由于线程是一个池,它的配置符合池的所有特性。?namePrefix--每个新开线程的名称前缀?maxThreads--线程池中的最大线程数?minSpareThreads--始终处于活动状态的线程数?maxIdleTime--线程的空闲时间,这些线程当空闲时间超过会被销毁?threadPriority--线程池中线程的优先级,默认为53.获取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。表示Eden区与Survivor区的比例。?-XX:MaxTenuringThreshold该值在CMS下默认为6,在G1下默认为15。这个值和我们前面提到的对象提升有关,变化的效果会更明显。可以使用-XX:+PrintTenuringDistribution打印对象的年龄分布。如果后代的大小始终相同,则证明一定年龄之后的对象总能晋升到老年代,晋升门槛可以设小一些。?PretenureSizeThreshold超过一定大小的对象将直接分配到老年代。不过这个参数用的不多。2.3.垃圾收集器优化G1垃圾收集器?-XX:MaxGCPauseMillis设置目标暂停时间,G1将尽力实现它。?-XX:G1HeapRegionSize设置小堆区域大小。这个值是2的幂,既不太大也不太小。如果您不知道如何设置它,请保留默认值。?-XX:InitiatingHeapOccupancyPercent当整个堆内存使用率达到一定百分比(默认为45%)时,将开始并发标记阶段。?-XX:ConcGCThreads并发垃圾收集器使用的线程数。默认值因运行JVM的平台而异。不建议修改。4.其他重要配置下面我们来看一下Connector中配置的几个重要参数。?enableLookups--调用request,getRemoteHost()执行DNS查询返回远程主机的主机名,如果设置为false,直接返回IP地址。这取决于要求?URIEncoding--用于解码URL的字符编码,默认值为ISO-8859-1未指定?connectionTimeout--连接的超时时间(以毫秒为单位)?redirectPort--指定服务器正在处理http请求时收到SSL传输请求后重定向的端口号