场景一:
环境:web服务器2核2.5G一台;数据库mysql:600最大连接数,2400M内存。 压测的应用:普通门户网站,lamp软件环境。
压测工具:loadrunner模拟真实用户访问行为
模拟动作: 进入首页- 进入”立即使用”页面- 查看掌柜活动页面思考时间总共15秒
即完成3个页面的访问;
测试方法: 模拟100个用户每5秒登录2个,(2分钟加载完毕)
持续1小时, 总时间1小时13分钟重复完成模拟动作;
测试结果: 平均响应时间各页面均<2秒;
其中83%的用户响应时间在3秒内; 90%的用户响应时间在3.8秒内;
总共完成21304个用户的模拟动作, 访问页面数总次数 21304*3= 63912次
服务器端基本正常, 负载值 2.5左右;
压力测试过程中不断加压相关参数调整:
apache优化调整:
serverlimit 5500 默认maxclient最大线程256个,可设置更高。
maxclients 5000 限制同一时间客户端最大接入请求的数量。
MaxRequestPerChild 100 每个子进程在其生存期内允许同的最大请求量,也即一个连接进程中可以有多少个线程同时工作。
最终结果:
网易邮箱理论单日收发邮件是 1000 封,
在模拟100用户并发状态下 15分钟内成功收取近980封邮件,
其他近1000封邮件在后续的1.5小时内陆续收取完成;
当日总共完成3000封左右的邮件收发.
调优后的网站每小时支持2万左右的用户访问数, 6万左右的单页面访问次数 (服务端无压力)。此压测行为基本不涉及至数据库。
场景二:
web服务器4核4G两台;数据库mysql:600最大连接数,2400M内存。 压测的应用:saas软件云平台.
apache+tomcat+memcached+mysql环境。
压测工具:loadrunner模拟真实用户访问行为。
压力测试过程中不断加压相关参数优化调整:
1)tomcat配置优化调整:
maxthreads 最多同时处理N个连接(启动的最大线程数,设置800)
acceptcount 当同时连接的人数达到maxthreads时,还可以接收排队的连接,设置10000
maxprocessors 最大连接线程数,即并发处理的最大请求数,设置1000
2)jvm优化调整:
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -server -Xmx2500m -Xms2500m -Xmn1200m -XX:SurvivorRatio=8 -XX:PermSize=128m -XX:MaxPermSize=256m -Xss128k -XX:
MaxTenuringThreshold=7 -XX:ParallelGCThreads=2 -XX:GCTimeRatio=19 -Xnoclassgc -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+Us
eCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintTenuringDistribution -Xloggc:/home/saas/apache-tomcat-6.0.36/logs/tomcat_gc.log -Doracle.jdbc.V8Compatible=true"
最终结果:每秒承受最大并发6个用户,主要压力瓶颈在数据库上。