JMeter 和 Python bottle - 不关闭套接字

JMeter and Python bottle - not closing sockets

我们有一个 API,用 Python 编写并使用 Bottle 和 Cherrypy,我们需要对其进行压力测试。我们已经创建了一个 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)

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

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

增加此值