Oracle的最大并发数由PROCESSES和SESSIONS决定,归根结底由操作系统和硬件配置决定。
根据对Tomcat、Druid、Oracle三者的与并发相关的参数进行了解,结合经验和网上的部分说法后,得出如下数据:
- Tomcat的单机并发最大线程数为500到700。
- Druid数据库连接池的推荐配置最大并发数(maxActive)为20.
- Oralce的最大进程数(PROCESSES)为300,最大SESSIONS为300 * 1.5 + 22 = 477 (这个公式对应Oracle 11g版本)
- Nginx在windows上的最大并发数为1024,在linux为8192.(受限于文件系统的最大文件打开数)。
基于以上数据,进行推测:
数据库最大并发 = 300
数据库可以支持的连接池个数 = 477 / 20 = 23
23个连接池对应23个Tomcat,可以支撑的线程数:
23 * 500 = 11500个线程
也就是,数据库按照PROCESSES=300的配置来的话,可以压榨的极限是11500并发。这里补充一点,对于Spring框架的Web应用来说,Spring会用一个线程来处理一次用户请求(注意是一次请求,不是一次会话),处理完一次请求后,线程即回到等待状态,等待下一次请求调用。
所以11500个并发并不代变11500个用户,具体要看实际场景中一个用户的单位时间访问量。
下面来验证以上推测。
环境准备:
-
服务器:
-
4核8G5M带宽阿里云服务器 * 3
-
4核4G5M带宽阿里云服务器 * 2
-
-
测试客户端:
- 4核8G笔记本
-
Tomcat线程池配置