移动测试基础 关于使用 Jmeter 进行多并发测试遇到的问题

低调的麦麦 · 2016年05月04日 · 最后由 区曼 回复于 2016年05月06日 · 3716 次阅读

昨天使用 Jmeter 对一个单接口进行了简单的测试(Http 请求),测试情况如下:
我分单台机器测试和分布式 2 台机器测试,①单台机器设置 1 秒启动 600 个线程执行 1 次②分布式 2 台机器,每台分 300 个线程也是 1 秒启动执行 1 次,总数也是 600(这两种情况都没设置集合点,接口都一样,其他条件也一样)
遇到的问题:单机测试情况是服务器正常返回没有任何报错;分布式测试的时候大概有 5.8% 的报错(报错信息是:Response code: 500 和 Non HTTP response code: java.net.SocketException),应该是服务器内部报错和请求超时一类的!
我想问的问题是:Jmeter 中有没有线程请求并行,串行的概念(也是一个群友说的)?我 1 秒启动 600 个,可以理解成 1ms 启动 0.6 个,一个挨着一个启动,也就是串行;那么在进行多台分布式测试的时候,2 台机器应该是同时发送请求,也就是说这个时候 1ms 启动的不是 0.6 个,应该是 N 个(感觉这个 N 应该死大于 0.6 的,所以服务器才会报错)。在这里也想问的数是:分布式测试中,多台机器的线程请求是怎么启动的?————————我能不能这样认为:单台机器 1 秒启动 600 个线程执行 1 次并不能理解成并发,而是分布式测试的时候才是真正意义上的并发。
另外,还想问下有经验的前辈们,你们在使用 Jmeter 测试多并发具体是怎么操作的?感谢!(我们老大的需求是:服务器支持 5000 并发,所以这段时间一直在学习)

共收到 9 条回复 时间 点赞

多线程就可以实现并发,误差率可以忽略不计

#1 楼 @lose 谢谢你的留言!虽然我不是很理解,但是误差率很大也可以忽略不计?

分布式启动形成应该也是串行,分布式主要是为了分散压力机的负担。

#3 楼 @sunkuan2007 谢谢!如果按照你这样说的,单机和分布式测试应该没什么差别才对,但是为什么使用分布式的时候服务器就会报错?感觉这里面肯定不是这么简单理解的。

#4 楼 @roy_zhang 既然有 500 错误,可以让开发定位下是不是并发导致的程序问题。

#5 楼 @sunkuan2007 嗯 谢谢 这个会的!但还是要弄清楚 这两种方式的实质区别在哪里 - -

#1 楼 @lose 任何报错都不能忽略

#7 楼 @dongdong 感谢东哥的到来!蓬荜生辉!

  1. 这样 “1 秒启动 600 个” 测试没有任何意义。因为它是不是能够 1 秒启动 600 要取决于你的压力机本身的环境。如果你是想进行冲击测试,可以使用Synchronizing Timer定时器集合到 600 个用户后同时发起请求 (类似于 LR 的集合点)。
  2. 服务器报 500 那就是服务器出了问题应该有 log,看一下是不是服务端线程数、最大连接数、数据库连接数触顶。SocketException 就是你的机器与服务器连接不上了,有可能是服务器的文件句柄数触顶。而且我猜测当你用集合点的方式请求下去,错误率会更高,在你不改变环境的情况下。
  3. 我是在局域网内的 Linux 机器上用 JMeter 在 NON_GUI 模式下执行测试,执行完成后处理成结果和图表,不添加任何监听器或者将调试用的树型结果关闭掉 (Toggle)。至于测试策略,就要根据测试目的(负载、容量、压力、冲击、稳定、可恢复性等)来说。而你最后贴的图上的需求,我看了有点蒙,可能大家的叫法不一样。比如第 1 点,又是 10000 用户又是并发 500,是指 10K 用户 500TPS/QPS 吗?第 5 点,是指 5K 用户 2K TPS?然而一个系统的 TPS/QPS 是一个确定的值,跟用户数是弱相关的。除非用户数太少、处理能力过剩不能探出这个 TPS,或者用户数太大导致系统过载响应时间变长 TPS 下降。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册