zoukankan      html  css  js  c++  java
  • 秒杀功能压测 jmeter--------重要!!!

    线程组里面有三个接口请求,依次为:显示商品列表、登录秒杀平台账户、进行秒杀

    对线程组用5000个线程循环10次

    设置一下默认配置,之后就不用反复填写了

    设置配置文件
    这个具体功能就是读text文件并且设置变量的作用。

    设置HTTP 请求
    我们这次直接对秒杀功能进行压测,填写的路径如图所示,这个要参见之前的代码。访问这个路径时需要两个变量,其中token是从之前的文本文件中读取的(也可以从登录接口正则获取到),注意Value的语法(如何写的)。

    结果展示

    第一次运行的结果:

     TPS:630.9/sec(不高)
    错误率:64.73%(太高了)
    错误率太高了,看一下程序,抛异常了。

    Redis异常

     很明显,这样的并发下Redis读取超时了。贴出Redis的配置:

     数据库超卖现象

     这是秒杀商品表,我们是对商品1进行秒杀的,库存成为负值,问题大了。我之前设置的秒杀商品个数给了9件,现在超卖了22件。

    第二次运行结果

    为了客观表现结果,重新再运行一次。注意把数据库信息清空的清空,恢复的恢复;把JMeter上次结果清空。

    压力报告结果:

     TPS:808.5/sec(不高)

    错误率:67.16%(太高了)

    Redis异常

    和第一次一样,就不贴图了。

    数据库超卖现象

    4. 总结

    这次实战结果就是:1. Redis读取超时抛异常导致压测的错误率太高;2. TPS不高,说明系统性能不佳;3. 数据库出现超卖现象,严重的业务逻辑错误

     

    5. 解决异常

    程序抛异常,这是不应该产生的,先将抛异常的问题解决。
    我一开始先把redis连接池重新配置:

     运行后发现程序不抛异常了,但是压测的错误率并没有下降,依然在60%以上,意识到这可能不是简单改动程序就行了。

    查看了压测的日志,也并没有报错,如果大家有遇到类似的问题,参考博文:

    https://www.cnblogs.com/111testing/p/11437815.html

    主要原因是:Windows 提供给 TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收他们。就导致我们在短时间内跑大量的请求时将端口占满了。

    这个方法我试过了,用了这个方法可以把错误率大大降低,但是如果把并发调大还是会出现错误

    所以我想是不是本身就是我单机性能有限。可以把并发线程和循环次数适当调小。

    原文链接:https://blog.csdn.net/Serena0814/article/details/89648174

  • 相关阅读:
    .Net常识 值类型和引用类型
    .net 开发人员的瓶颈和职业发展
    PPT Garbage Collection in .Net (内存管理)
    Why Sessionless Web Application ?
    一些.Net面试题 (BS 方向)
    开源一个小类库, 用于对象间灵活的拷贝属性,还有IDataReader到实体类的转换
    在 Visual Studio 单元测试中使用CallContext 导致的 Unit Test Adapter threw exception: Type is not resolved for member... 异常
    【设计原则和建议】 类
    轻量级 Lock Free 线程安全的 Queue<T> 的C#2.0实现
    实验一 命令解释程序的编写
  • 原文地址:https://www.cnblogs.com/111testing/p/11437796.html
Copyright © 2011-2022 走看看