由于http超时连接失败,Django jMeter Api测试失败

时间:2017-05-26 10:50:27

标签: django jmeter

Jmeter配置:

网络服务器:

服务器名称:120.0.0.1

端口号:9000

超时

连接:空白

回复:空白

方法:GET

线程用户:500

加速:1

循环次数:1(未选中复选框)

500用户70用户失败

这是代码

@api_view(['GET'])
def country_list(request):
    #country = cache.get('country')

    try: 
        countryData = Country.objects.values('country_id','country_name').all().order_by('country_name')
        #countryData = Country.objects.extra(select={'name': 'country_name','id':'country_id'}).values('id','name').all().order_by('country_name')[:5] 
        serializer = CountrySerializer(countryData,many=True)
        #cache.set('country', serializer.data, 30)
        return JsonResponse({'data': serializer.data, 'error': 0 })
    except (KeyError, Country.DoesNotExist):
        return JsonResponse({ 'error': 1 })

并且响应在这里

Thread Name: country 1-169
Sample Start: 2017-05-26 15:43:44 IST
Load time: 21014
Connect Time: 0
Latency: 0
Size in bytes: 2015
Sent bytes:0
Headers size in bytes: 0
Body size in bytes: 2015
Sample Count: 1
Error Count: 1
Data type ("text"|"bin"|""): text
Response code: Non HTTP response code: java.net.ConnectException
Response message: Non HTTP response message: Connection timed out: connect
HTTPSampleResult fields:
ContentType: 
DataEncoding: null

1 个答案:

答案 0 :(得分:0)

所以看起来您在应用程序中发现了瓶颈。但是,很难说在提供合理响应时间和错误开始发生时可以提供的最大用户数是多少。

我建议修改如下:

  1. 确保在不同的主机上运行JMeter和Django应用程序(JMeter是非常耗费资源的,这样可以避免相互干扰)
  2. Ramp-up更改为1秒以上(即让它为500秒,以便JMeter每秒添加一个用户)。我们的想法是逐渐增加 的负载,这样您就可以将增加的响应时间与增加的负载相关联,并且能够准确地确定饱和度和故障点。有关详细信息,请参阅JMeter Ramp-Up - The Ultimate Guide
  3. Loop Count更改为-1,以便您的请求永远循环
  4. Thread Group
  5. 的“计划程序”部分设置所需的测试持续时间
  6. 使用ie JMeter PerfMon Plugin监控Django服务器级别的OS资源消耗。
  7. 因此,当发生故障时,您至少应该知道以下内容:

    • 发生事件时有多少并发用户(您可以使用Active Threads Over Time监听器或HTML Reporting Dashboard查看)
    • 是否由于缺少CPU或RAM而导致故障。如果没有 - 进一步的步骤将检查您的后端配置(即Web /数据库服务器配置是否适合那么多连接,检查任何可疑条目的日志,使用Python Profiling Tools来获取缓慢或失败的原因等)