You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Locust压测大文件PUT上传时出现SSLEOFError问题求助

大文件上传压测时出现SSLEOFError问题

测试环境为MacOS,基于Locust的HttpUser执行性能测试。上传约10MB文件,当并发用户数超过40(RPS与用户数相等)时,部分PUT请求出现以下错误:

PUT doc_upload_bigSize_PUT_method: SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:2396)') 

已尝试升级所有OpenSSL相关包、安装httpsclient组件,但问题仍存在,仍有2-3个请求返回该错误。多数请求能正常执行,怀疑是脚本或配置问题。

相关代码

文件上传工具方法

@staticmethod
def file_upl_pdf(dirname, file_name):
    upload = open(f"{dirname}/{file_name}", "rb")
    return upload

测试脚本核心逻辑

def upload_big_size_doc(self):
    file_name = "test_file_big_size.pdf"
    res = self.client.post("/documents", data=json.dumps(data), name='doc_upload_bigSize_POST_method')
    json_response = json.loads(res.text)
    document_id = jsonpath.jsonpath(json_response, "documentId")[0]
    url_upload = jsonpath.jsonpath(json_response, "url")[0]
    self.client.put(url=url_upload, data=ResourceUtils.file_upl_pdf(dirname="../test_files/big_size", file_name=file_name),
                    headers={'Content-Type': 'application/pdf'},
                    name='doc_upload_bigSize_PUT_method')

任务执行逻辑

@task
def perf_test(self):
    self.upload_big_size_doc()

排查方向与解决方案

  • 修复文件句柄泄漏问题
    原工具方法打开文件后未关闭,高并发下会引发资源泄漏,间接导致SSL连接异常。修改代码自动管理文件句柄:

    @staticmethod
    def file_upl_pdf(dirname, file_name):
        with open(f"{dirname}/{file_name}", "rb") as f:
            return f.read()
    

    直接返回文件内容而非文件对象,既避免资源泄漏,也能让requests自动计算正确的Content-Length,减少服务器端异常断开的概率。

  • 配置连接超时与重试机制
    高并发下连接复用可能出现异常,给Locust客户端添加超时设置和重试:

    class MyUser(HttpUser):
        wait_time = between(1, 2)
        def __init__(self, parent):
            super().__init__(parent)
            self.client.timeout = 30  # 延长请求超时时间
            self.client.mount('https://', HTTPAdapter(max_retries=2))  # 添加重试逻辑
    
  • 检查服务器端SSL限制
    高并发下服务器可能因连接数超限、超时设置等主动断开SSL连接,建议查看服务器的SSL相关日志(如Nginx的error.log),确认是否存在主动断开的记录。

  • 调整MacOS系统SSL参数
    MacOS自带OpenSSL可能有默认限制,可通过环境变量调整:

    export SSL_CIPHER_SUITE='HIGH:!aNULL:!MD5'
    export OPENSSL_CONF=/usr/local/etc/openssl/openssl.cnf
    locust -f your_test_script.py
    

内容的提问来源于stack exchange,提问作者Matelko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:10:19