对nextjs应用程序耗尽端口进行jmeter压力测试

问题描述 投票:0回答:1

我在压力测试方面完全是新手,只是提一下。

一些了解项目的信息,而不是问题本身: 我在 nextjs14 中有 webapp。客户要求能够支持 400-500 个并发用户连接并使用它。 该应用程序还设计为实时的。每个用户同一页面上的所有数据都必须自动更新。我在这部分使用 websockets,向连接的客户端发送信号以获取新数据。因此,在最坏的情况下,如果所有用户连接到同一页面,服务器必须同时完成 500 个请求。

因此,我设置了一个jmeter测试来模拟用户首次登录,获取必要的数据。

测试如下:

我将测试设置为 400 个用户,启动时间为 10 秒。并以两种方式进行测试。一次循环,然后 50 次循环。

  1. 加载登录页面并获取csrf令牌。
  2. POST 凭证(我有 http cookie 管理器)
  3. 加载带有一些数据的页面
  4. 从api获取数据(模拟JS“加载”并获取该页面上所有必需的数据)

问题即将结束:

如果我运行测试一次,一切正常。如果我运行循环 50 次,那么无论我在 JMeter 中选中还是取消选中“保持活动”复选框,我都会遇到端口耗尽的问题。在几秒钟的测试中,我最终达到了 65535 个端口的限制。 Netstat显示大部分都处于TIME_WAIT状态。在我达到限制后,服务器开始返回错误。

更多描述:

首先我尝试在本地电脑上的 win10 上执行此操作。

我的性能非常差,nextjs 服务器无法处理这么多的请求。所以我设置了 nginx 并为 5 个 nextjs 服务器设置了循环。这解决了性能问题,但在 1000 个样本之后我得到了错误响应。

发现win10的可用端口限制较低。所以我在虚拟机上设置了linux并做了同样的测试。现在性能好多了,但我达到了端口 65535 的限制。

从来没有做过可以承受重负载的应用程序,所以我有点迷失。我很确定我可以修复代码性能不佳的问题,但由于系统本身的限制,我需要提示。

我可能做错了什么以及我可以做些什么来绕过这个问题。

我什至不能说这个 jmeter 测试是否代表了真实的东西,或者浏览器中的行为会有所不同。我想用selenium插件进行测试,但是400-500个浏览器对我来说几乎不可能运行测试。

非常感谢任何有助于阅读的信息和链接!预先感谢。

next.js jmeter stress-testing
1个回答
0
投票

我不明白如何才能达到 65535 个端口和 500 个虚拟用户的限制。

因此,要么您没有在 JMeter 端或服务器端正确终止连接。

  1. 尝试在线程组级别上勾选“每次迭代中的同一用户”框

    这样现有的 TCP/SSL 会话将被重新使用,而不是创建新的会话

  2. 尝试取消选中

    HTTP 请求
    采样器级别上的 Use KeepAlive

    这样 JMeter 将发送

    Connection: close
    标头,从 JMeter 端终止会话

  3. 如果您使用 WebSocket Samplers 插件,请使用

    WebSocket Open Connection
    WebSocket Close
    采样器来设置和终止连接,并使用带有“现有连接”选项的相关采样器

  4. 确保 JMeter 与真实浏览器具有相同的网络占用空间,使用第三方嗅探器工具(如 FiddlerWireshark)检查从两者发送的请求,并修改 JMeter 的配置,使其行为与真实浏览器完全相同

© www.soinside.com 2019 - 2024. All rights reserved.