V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
richardevs
V2EX  ›  服务器

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

  •  
  •   richardevs · 2015-04-20 00:38:17 +08:00 · 6132 次点击
    这是一个创建于 3506 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先我知道最真实可靠的测试方法肯定是实际上线之后...但我们公司现在算是在评定新服务器配置应该做到哪个地步,所以在此之前我们一直在用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 条回复    2015-04-21 10:05:41 +08:00
    ryd994
        1
    ryd994  
       2015-04-20 01:09:58 +08:00   ❤️ 1
    2w用户,http有多少长连接(这个一般问题不大)?正常浏览每分钟有多少请求?有多少资源消耗大的?(搜索、登录)有多少小的?(静态文件)
    然后你就按照这个数字去压
    你可以自己试着浏览一下,然后分析浏览记录,乘2w再加上冗余度
    9hills
        2
    9hills  
       2015-04-20 01:23:40 +08:00 via iPhone   ❤️ 1
    先动脑计算下,再构造性能测试

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

    另外2w用户同时在线是什么概念,你去你们生产服务器上瞅瞅在线人数和机器负载就知道了。 另外v2同时在线最高不过1000多
    Puteulanus
        3
    Puteulanus  
       2015-04-20 01:36:45 +08:00   ❤️ 2
    负载测试服务
    https://loadimpact.com/
    cst4you
        4
    cst4you  
       2015-04-20 03:24:53 +08:00   ❤️ 1
    去 Hostloc 发一下自己的网站地址, 各种吹嘘自己的网站多NB, 然后大波的 CC DD 流量就会来了.
    KexyBiscuit
        5
    KexyBiscuit  
       2015-04-20 04:37:34 +08:00 via Android
    @cst4you 快够233
    wy315700
        6
    wy315700  
       2015-04-20 08:28:38 +08:00
    2w同时在线和2w qps 和 2w并发量不是一个概念
    Love4Taylor
        7
    Love4Taylor  
       2015-04-20 09:16:10 +08:00
    @cst4you 这黑的好啊wwwwwww
    richardevs
        8
    richardevs  
    OP
       2015-04-20 09:49:10 +08:00
    @cst4you 啊哈哈哈哈哈哈(感觉服务器多少台都不够抗)
    lecher
        9
    lecher  
       2015-04-20 14:13:03 +08:00
    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  
       2015-04-21 10:05:41 +08:00
    loadrunner肘起
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2737 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:23 · PVG 19:23 · LAX 03:23 · JFK 06:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.