以前一直简单的认为多线程=高效率。其实多线程本身并不能提高 cpu 效率,线程过多反而会降低 cpu 效率。当 cpu 核心数<线程数时,cpu 就需要在多个线程直接来回切换,以保证每个线程都会获得 cpu 时间,即通常我们说的并发执行。所以 max-threads 的配置绝对不是越大越好。
4cpu 32G 内存,目前测试: 700合适.
tomcat 配置内存分配: JAVA_OPTS="-server -Xmx2g -Xms2g -Xmn512m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -Duser.timezone=GMT+8"
里我们分别测试五分钟持续压测情况下200、400、600、800、1000的并发情况
这里我们分别测试1分钟持续压测情况下100、150、200、400、600、800、1000的并发情况
按50用户同时的点击率相当于200用户的在线率计算 :
600并发 为稳定值,即76点击*4 = 304人在线为佳, 最高并发1000,支持300点击*4= 1200人左右,
800并发开始出现错误,3.8%左右,为服务器返回不稳定。
300-1200人同时在线会卡顿,但系统不崩溃,因为后台用了apr模式 + 线程池技术。
100并发: 吞吐量每秒 9.4 , 页面正常
150:并发: 吞吐量每秒 37-42 , 页面正常
200:并发: 吞吐量每秒 41-51 , 页面正常
300:并发: 吞吐量每秒 41-51 , 页面加载有慢
400:并发: 吞吐量每秒 63 , 页面加载5秒才加载完成。
600:并发: 吞吐量每秒 76 , 页面加载5秒才加载完成,系统正常。
700:并发: 吞吐量每秒 345 ,出错率 1.8% 页面第一次加载5秒加载完成,系统正常。
800:并发: 吞吐量每秒 340 , ,出错率 3.3% 页面第一次加载5秒加载完成,系统正常。
1000:并发: 吞吐量每秒 225 , 页面第一次加载5秒加载完成,系统正常。
在性能稳定的情况下,才可以套用公式去计算出最大并发数
1:稳定状态下,最大 RPS= 793/S
2:稳定情况下,响应时间大约长期保持在160 ms
3:稳定情况下,峰值并发数大约是 793*160(并发数 = RPS * 响应时间)=126
4:稳定情况下,峰值并发=平均并发 + 3*√平均并发,所以得出平均并发大约是 96
---------------------------------------------------------------------------------------------------------------------------------------------------------------
并发数 = RPS * 响应时间