并发粗略测算
流量角度测算并发:
网络带宽: 单位时间内能传输的数据量。单位是bps(即bit/s,位/秒)。
码流/码率:视频文件在单位时间内使用的数据流量。单位是kbps(即kbit/s,千位/秒)。
b 代表 bit(比特),B 代表 byte(字节),1B=8b。
视频大小 = 时间×码率/8
在线人数 = 带宽/码流
文件大小 = 时间×带宽/8
例如:1,10M带宽能支撑的同时在线人数(一个视频文件的大小为6M,播放时长为3分钟):
10* 1024 * 1024 / (6 * 1024 * 1024 * 8 / (3 * 60)) =37.5(人)
例如:2,100M带宽能支撑的同时下载人数(文件的大小为100M,每个人1分钟内下载完成):
(100/8) / (100/60) = 7.5(人)
并发人数 = ( 带宽 * 平均单页等待时间 )/ 平均单页大小
UTF-8使用1~4字节为每个字符编码:
1、一个US-ASCIl字符只需1字节编码(Unicode范围由U+0000~U+007F)。
2、带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文等字母则需要2字节编码(Unicode范围由U+0080~U+07FF)。
3、其他语言的字符(包括中日韩文字、东南亚文字、中东文字等)包含了大部分常用字,使用3字节编码。
4、其他极少使用的语言字符使用4字节编码
例如:3,20M带宽能支撑多少人同时访问(平均单页100KB,平均单页等待时间5s)
20 * 1024 / 8 * (100 / 5 ) = 128(人)
服务器角度测算并发:
Windows Tomcat允许每个进程maxThreads(最大线程数)2000
Linux Tomcat允许每个进程maxThreads(最大线程数)1000
一个线程默认需要1M堆栈(最少128K)
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="500"
minSpareThreads="100"
maxSpareThreads="200"
acceptCount="200"
maxIdleTime="30000"
enableLookups="false"
/>
Tomcat的并发请求处理数量=maxThreads + acceptCount
protocol:启用APR连接模式,提高异步IO处理性能。
maxThreads:最大能接受的请求数,默认为200
minSpareThreads:最少备用线程数,默认初始化,默认为25
maxSpareThreads:最多备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程
acceptCount:等待处理的请求队列,默认为100,超过队列长度,服务器则拒绝客户端请求,直接返回403
maxIdleTime:如果一个线程在30秒以内没有活跃,则终止运行并从线程池中移除。除非线程池数量小于或等于minSpareThreads数量。默认值是1分钟
enableLookups:如果为true,调用request.getRemoteHost会执行DNS反查,反向解析IP对应的域名或主机,效率较低,建议设为false。