gpt4 book ai didi

node.js - 使用 siege 测试 node.js 服务器时出现问题

转载 作者:搜寻专家 更新时间:2023-10-31 23:43:36 27 4
gpt4 key购买 nike

我正在使用 siege 为我的 node.js 服务器(一个小型​​网络应用程序)做一些负载测试。我可以看到即使是像 300 这样的少量并发连接,它也会显示一些错误

siege -c 300 -n myserver.com:3000

然后我可以看到一些结果,比如

[error] socket: read error Connection reset by peer sock.c:460: Connection reset by peer
[error] socket: read error Connection reset by peer sock.c:460: Connection reset by peer
[error] socket: read error Connection reset by peer sock.c:460: Connection reset by peer
[error] socket: read error Connection reset by peer sock.c:460: Connection reset by peer
[error] socket: read error Connection reset by peer sock.c:460: Connection reset by peer
[error] socket: read error Connection reset by peer sock.c:460: Connection reset by peer
[error] socket: read error Connection reset by peer sock.c:460: Connection reset by peer
[error] socket: read error Connection reset by peer sock.c:460: Connection reset by peer

我可以看到服务器正在关闭连接。为什么会这样。我该如何调试它。我有一台在 Macbook pro 上运行的服务器,内存为 4GB。我想让你知道我使用过 websockets。即客户端访问由运行在 node.js 上的 Web 服务器返回的页面。该页面然后使用 websockets 连接到同一服务器以进行双向通信。什么会导致这样的问题?

最佳答案

当遇到您认为可能用完套接字的情况时,有两件事需要确认。

  1. 检查您是否正在显式关闭套接字。在某些语言中,垃圾收集器的终结逻辑会在您之后进行清理,但这涉及滞后且草率;在其他不这样做的语言中,您的应用程序将“泄漏”套接字(以及文件句柄)直到它终止。
  2. 让您的操作系统允许您的应用程序的用户帐户为您的测试提供足够的峰值套接字。

针对第 1 点:您要关闭套接字吗?我不是 node.js 的重度用户,但我认为:

var conn = new net.Socket();
conn.destroy(); //Are you doing this?

要解决第 2 点:将硬打开文件限制和软打开文件限制设置得足够高,以免妨碍您:

launchctl limit maxfiles 8192 8192

不带任何参数运行 sudo launchctl limit 应该会打印出您当前的限制。查看Apple documentation for launchctl更多细节。

关于node.js - 使用 siege 测试 node.js 服务器时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14447167/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com