tomcat并发可支持多大_Tomcat调优

16fd1f46e6c835357a48d94acc80ae3f.png

一、Tomcat 运行模式介绍

Tomcat Connector(Tomcat连接器)有 bio、nio、apr 三种运行模式,那么这三种运行模式有什么区别呢,我们又如何选择Tomcat Connector的运行模式来提高Tomcat的运行性能呢?

1.1 bio模式

bio(blocking I/O),顾名思义,即阻塞式 I/O 操作,表示 Tomcat 使用的是传统的 Java I/O 操作 (即 java.io 包及其子包)。Tomcat 在默认情况下,就是以 bio 模式运行的。遗憾的是,就一般而言,bio 模式是三种运行模式中性能最低的一种。

1.2 nio模式 nio(new I/O),是 Java SE 1.4 及后续版本提供的一种新的 I/O 操作方式 (即 java.nio 包及其子包)。Java nio 是一个基于缓冲区、并能提供非阻塞 I/O 操作的 Java API,因此 nio 也被看成是 non-blocking I/O 的缩写。它拥有比传统 I/O 操作 (bio) 更好的并发运行 性能。 1.3 apr模式     apr(Apache Portable Runtime/Apache可移植运行时),是 Apache HTTP 服务器的支持库。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP 服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。Tomcat apr也是在Tomcat上运行高并发应用的首选模式。 1.4 怎么查看Tomcat运行模式

Tomcat 启动完成后,在底部会看到运行模式字样。如下图:http-apr-9090

b5c026be5557518ca451d3865c12b2fd.png

总结:

1、性能排序:bio

2、Tomcat从7.30版本开始,默认都是apr模式,所以不用去学习如何修改模式

二、内存优化

1、JVM相关的参数含义

-server:表示启用 JDK的 server 版本;

-Xms:堆的最小内存(一般与Xmx配置为相同值,这样的好处是GC不必再为扩展内存空间而消耗性能);

-Xmx:堆的最大内存;

-Xmn:堆的新生代大小;

-XX:PermSize:永久代大小;

-XX:MaxPermSize:永久代大小最大值;

2、Tomcat指定JVM参数

Linux下修改 TOMCAT_HOME/bin/catalina.sh,在其中加入,可以放在 CLASSPATH = 下面(有的时候图方便,直接放在文件的第二行):

JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xmn512m -XX:PermSize=512M -XX:MaxPermSize=1024m " 

windows 下修改 TOMCAT_HOME/bin/catalina.bat,在其中加入,可以放在 set CLASSPATH = 下面(有的时候图方便,直接放在文件的第二行):

set JAVA_OPTS=-server -Xms2048m -Xmx2048m -Xmn512m  -XX:PermSize=512M -XX:MaxPermSize=1024m  

3、xmx到底要设置多大合适?

这里需要测量出Java年老代存活对象大小!!!

JVM 内存大小设置公式:

1、首先用工具测量出FullGC后,年老代活存对象的大小(多次取平均)。

2、年老代内存=年老代存活对象的2-3倍

3、年轻代内存=年老代存活对象的1-1.5倍

4、堆内存xmx=xms=年老代+年轻代

5、永久代=年老代存活对象的1.2-1.5倍

6、总内存设置不能超过物理内存的80%

4、Java年老代存活对象的测量

JVM参数中添加GC日志,GC日志中会记录每次FullGC之后各代的内存大小,观察老年代GC之后的空间大小。可观察一段时间内的FullGC之后的内存情况,根据多次的FullGC之后的老年代的空间大小数据来预估FullGC之后老年代的存活对象大小(取平均值)

5、如何触发FullGC ?使用jmap工具可触发FullGC。(一)jmap -dump:live,format=b,file=heap.bin 将当前的存活对象dump到文件,此时会触发FullGC(二)jmap -histo:live 打印每个class的实例数目,内存占用,类全名信息.live子参数加上后,只统计活的对象数量。此时会触发FullGC

总结:

1、参数设置时,注意linux下是有单/双引号的,windows下没有

2、参数的设置和顺序没关系

3、有的同学可能会把参数加在:startup.sh/bat文件中,也没关系

4、堆内存不足,会报:java.lang.OutOfMemoryError: Java heap space 错误

5、永久代内存不足,会报:java.lang.OutOfMemoryError: PermGen space 错误

6、堆内存xmx=年轻代大小xmn+年老代大小

总结:

在内存相对紧张的情况下,可以按照上述的方式来进行内存的调优。内存相对宽裕的时候,可以相对给服务多增加一点内存,可以减少GC的频率,GC的耗时相应会增加一些。一般要求低延时的可以考虑多设置一点内存,对延时要求不高的,可以按照上述方式设置较小内存。

------------END--------------

更多学习资料+工具+视频

请添加小唐老师微信领取

9d8dc9f0a582f4965a37b8699e2c28f5.png

你可能还想看 软件测试到底在学什么(职业发展概览) 面试中的工具问题 看这一篇就够了 面试官: 请你说说微信发红包,有哪些测试点 MySQL学习笔记1-关系数据库概述

30186bb7118b346db2b8e00d658ccad6.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值