服务器问答

如何测试服务器的最大承载用户量
0
2021-05-17 11:41:14
idczone

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

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

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

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

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

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

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


2w用户,http有多少长连接(这个一般问题不大)?正常浏览每分钟有多少请求?有多少资源消耗大的?(搜索、登录)有多少小的?(静态文件)
然后你就按照这个数字去压
你可以自己试着浏览一下,然后分析浏览记录,乘2w再加上冗余度

先动脑计算下,再构造性能测试
测试前要能先自己推算出大概的数量级
另外2w用户同时在线是什么概念,你去你们生产服务器上瞅瞅在线人数和机器负载就知道了。 另外v2同时在线最高不过1000多

负载测试服务
https://loadimpact.com/

去 Hostloc 发一下自己的网站地址, 各种吹嘘自己的网站多NB, 然后大波的 CC DD 流量就会来了.

快够233

2w同时在线和2w qps 和 2w并发量不是一个概念

这黑的好啊wwwwwww

啊哈哈哈哈哈哈(感觉服务器多少台都不够抗)

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次。做统计。

loadrunner肘起

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服