【问题标题】:JMeter and Python bottle - not closing socketsJMeter 和 Python 瓶 - 不关闭套接字
【发布时间】:2018-10-11 08:47:03
【问题描述】:

我们有一个用 Python 编写并使用 Bottle 和 Cherrypy 的 API,我们需要对其进行压力测试。我们创建了一个 JMeter 脚本来执行此操作,但在执行几分钟后,调用开始失败,并出现以下异常:-

java.net.BindException: Address already in use: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)

我似乎不知道如何告诉 JMeter 不要挂在插座上,或者如何告诉 Bottle 放下它们。我们已经尝试过打开和关闭 JMeter 的 KeepAlive 等选项,但没有成功。

我们已经从 API 中提取了几乎所有内容,但这个脚本仍然存在问题(没有我们的任何功能包袱)。

"""
This script provides a dummy API, which responds to every GET as if it found something.
"""

import bottle
import os
import sys
import datetime
import routes

if __name__ == '__main__':
    HOST = 'localhost'
    PORT = 5555

    @bottle.route('/thing/:id', builtin_function_or_method='GET')
    def get_thing(id):
        response_json = {
            'data': {
                'type': 'thing',
                'id': id,
                'meta': {
                    'date_retrieved': datetime.datetime.now().isoformat()
                }
            }
        }
        bottle.response.headers['Cache-Control'] = 'public,max-age=0'
        return response_json

    bottle.run(server='cherrypy', host=HOST, port=PORT)

这是在 Windows 上运行的 Python 3.6.5、Cherrypy 8.9.1 和 JMeter 3.3。

【问题讨论】:

  • 一个非常高的超时(JMeter HTTP 请求高级选项卡)和“KeepAlive”的组合似乎已经完成了这项工作,尽管我现在怀疑性能测试是否具有与连接相同的值被重用。吞吐量(在笔记本电脑上)为每秒 1000 秒。
  • 你是windows系统吗?如果是这样,这就是您的解决方案 - support.microsoft.com/en-us/help/196271/…

标签: python python-3.x jmeter bottle cherrypy


【解决方案1】:

我在 Windows 机器上运行 JMeter 压力测试时也遇到过类似情况。这应该是由于 Windows 作为标准设置的端口限制。根据他们的文档,有 5000 个默认端口。您可以尝试使用此guide 增加此值

【讨论】:

  • 非常感谢。我已按照建议将 MaxUserPorts 设置为 65534,这无疑提高了性能。不过,我仍然收到很多“正在使用的地址”错误。到目前为止,我一直在笔记本电脑上设置测试(Windows 7)。当我们真正做到这一点时,它将在 Windows 2012 R2 上。
  • 对不起,我还想补充一点,我也将 TcpTimedWaitDelay 更改为 30。在错误开始出现之前,测试运行的时间更长,并且总体上更少(但在五分钟的运行中仍然有 9%)。
  • @JeremyGooch 不确定您现在面临的问题。你确定你正在关闭连接吗?我的意思是有机会有一个由测试用例引起的连接挂起?
  • 我现在有机会在我们将要使用的实际服务器(Windows 2012 R2)上进行测试。我没有遇到任何问题(我们对服务进行了 2300tps 的基准测试),所以我假设它是 Windows 7 的一个功能。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2011-08-08
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
相关资源
最近更新 更多