Tomcat 的运行模式
BIO(阻塞式的 Socket 通信)模式
Tomcat8 以下版本,默认的 HTTP 实现是采用 BIO 模式,每个请求都需要创建一个线程处理
这种模式下的并发量受到线程数的限制,不大适合高并发,但技术成熟。
每个进程中的线程数受制于操作系统的内核参数设置:
Windows 主机每个进程中的线程数不允许超过 2000
Linux 主机每个进程中的线程数不允许超过 1000
NIO模式(非阻塞式的 Socket 通信)
Tomcat8 以上版本,默认使用的就是 NIO 模式,在性能上高于阻塞式的,每个请求也不需要创建一个线程进行处理,并发能力比前者高。
APR 模式(全称 Apache Portable Runtime)
是 Tomcat 生产环境运行的首选方式。但必须要安装 APR 和 Native,直接启动就支持 APR。
APR 是从操作系统级别解决异步 IO 问题。APR 的本质就是使用 JNI 技术调用操作系统底层的 IO 接口,所以需要提前安装所需要的依赖。
如果操作系统未安装 APR 或者 APR 路径未指到 Tomcat 默认可识别的路径,则 APR 模式无法启动,自动切换启动 NIO 模式。
注:APR 模式可以提升 Tomcat 对静态文件的处理性能,当然也可以采用动静分离。
JVM 调优(tomcat 可以使用的内存)
Tomcat 是运行在 JVM 上的,所以对 JVM 的调优也是非常有必要的
在 Java 中每开启一个线程需要耗用 1MB 的 JVM 内存空间用于作为线程栈之用
tomcat 默认可以使用的内存为128MB,在并发量较大的应用项目中,这点内存是不够的,需要修改 JVM 参数调优
Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下设置:
JAVA_OPTS=‘-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】’
需要把这个两个参数值调大。例如:JAVA_OPTS=‘-Xms256m -Xmx512m’
表示初始化内存为 256MB,可以使用的最大内存为 512MB
一台主机允许的连接数、线程数、内存大小、硬件性能和 CPU 数量,都会限制实际并发数
并发能力还与应用的逻辑密切相关,如果逻辑很复杂需要大量的计算,那并发能力势必会下降。
如果每个请求都含有很多的数据库操作(或其他中间件的连接),那么对于数据库的性能要求也是非常高的。
对于单台数据库服务器来说,允许客户端的连接数量是有限制的(数据库读写的并发能力)
建议当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群