如何测试服务器的最大承载用户量 - V2EX
richardevs

如何测试服务器的最大承载用户量

  •  
  •   richardevs Apr 20, 2015 6802 views
    This topic created in 4041 days ago, the information mentioned may be changed or developed.

    首先我知道最真实可靠的测试方法肯定是实际上线之后...但我们公司现在算是在评定新服务器配置应该做到哪个地步,所以在此之前我们一直在用ab做测试对比。

    我们的目标平台有两个,LEMP(Linux+Nginx+MySQL+PHP),以及WIMP(Windows+IIS+MySQL+PHP)

    用ab测试的时候两个平台都返回了很多非2xx结果,PHP日志显示资源不足,MySQL显示中止了链接。

    也就是说,比如我想要测试2W个用户同时在线,看来用

    ab -n 10000 -c 5000 http://...

    这个是毫无疑问不行的。(当然了,这里的模拟数量我后来查了下,知道这个数字太夸张了,但具体夸张在哪里,希望有人能给我个链接补补课...)

    So...问题来了,怎么办呢现在,咨询Linode的团队他们说建议找一些测试服务,那么有哪些这类的负载测试服务能用?

    10 replies    2015-04-21 10:05:41 +08:00
    ryd994
        1
    ryd994  
       Apr 20, 2015   1
    2w用户,http有多少长连接(这个一般问题不大)?正常浏览每分钟有多少请求?有多少资源消耗大的?(搜索、登录)有多少小的?(静态文件)
    然后你就按照这个数字去压
    你可以自己试着浏览一下,然分析浏览记录,乘2w再加上冗余度
    9hills
        2
    9hills  
       Apr 20, 2015 via iPhone   1
    先动脑计算下,再构造性能测试

    测试前要能先自己推算出大概的数量级

    另外2w用户同时在线是什么概念,你去你们生产服务器上瞅瞅在线人数和机器负载就知道了。 另外v2同时在线最高不过1000多
    Puteulanus
        3
    Puteulanus  
       Apr 20, 2015   2
    负载测试服务
    https://loadimpact.com/
    cst4you
        4
    cst4you  
       Apr 20, 2015   1
    去 Hostloc 发一下自己的网站地址, 各种吹嘘自己的网站多NB, 然后大波的 CC DD 流量就会来了.
    KexyBiscuit
        5
    KexyBiscuit  
       Apr 20, 2015 via Android
    @cst4you 快够233
    wy315700
        6
    wy315700  
       Apr 20, 2015
    2w同时在线和2w qps 和 2w并发量不是一个概念
    love4taylor
        7
    love4taylor  
    PRO
       Apr 20, 2015
    @cst4you 这黑的好啊wwwwwww
    richardevs
        8
    richardevs  
    OP
       Apr 20, 2015
    @cst4you 啊哈哈哈哈哈哈(感觉服务器多少台都不够抗)
    lecher
        9
    lecher  
       Apr 20, 2015
    ab只是简单的测qps,如果想要模拟真实的用户访问,建议还是使用一些专门的压力测试工具。
    HP的LoadRunner、IBM的Rational Performance Tester、Apache的Jmeter(免费开源)、还有Borland的SilkPerformer
    通过模拟正常业务执行的方式去测试服务器负载的量。
    最不济,自己写一些爬虫脚步去抓取自己的网站页面,检测页面返回时间。比如用tornado异步去执行httpclient生成大量的请求。

    如果没有长链接或者ajax轮询这类的业务。实时用户在线是算不出来的。只能去估算,用户正常的业务几秒钟发一次web请求到后端,然后乘以2w的基数。去统计一个时间段的总数,再回来压qps。

    要是我没钱没时间去用专业的压力测试工具。我会用tornado这么写。
    import tornado
    import tornado.gen
    import tornado.httpclient
    import time
    class GenAsyncHandler(RequestHandler):
    @gen.coroutine
    def get(self):
    http_client = AsyncHTTPClient()
    respOnse= yield http_client.fetch("http://example.com/step_1")
    sleep(5)
    respOnse= yield http_client.fetch("http://example.com/step_2")
    sleep(5)
    respOnse= yield http_client.fetch("http://example.com/step_3")
    sleep(5)


    这样的形式,一个handler就是一个完整的业务请求。然后调用2w次。做统计。
    warmcolor
        10
    warmcolor  
       Apr 21, 2015
    loadrunner肘起
    About     Help     Advertise     Blog     API     FAQ     Solana     5585 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 57ms UTC 03:41 PVG 11:41 LAX 20:41 JFK 23:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86