Node.js 网络爬虫无法同时处理 50 个以上的传出连接

Node.js webcrawler can't hanlde more than 50 simultaneous outgoing connections

我正在尝试处理大量 url(例如 50000)以检查某个字符串是否在页面上。我正在为列表中的每个 url 使用节点 0.10、npm request 模块和 async.eachLimit,我的目标是确保此节点应用程序将 url 的列表处理为尽可能快。

我已将超时设置为 20 秒。问题是一旦我将 eachLimit 值(例如请求并发)设置为高于 50-100 的任何值,几分钟后大多数 urls 就会超时。我已验证这些 url 确实有效。 nload 没有显示任何高网络使用率,服务器上有大量 cpu 和内存剩余(没有别的是 运行),那么为什么节点不能稳定处理 500 url一次?

即使 url 位于不同的 IP 上,我也尝试将 globalAgent.maxSockets 设置为 200k 无济于事。

所以我不确定内部工作原理,但我已经解决了问题。

之前 - 我遇到超时,网络使用率最多不超过 2 mbps。我已经尝试将进程分叉到 16 个(8 核处理器,但它不受 cpu 限制,并且增加分叉数量超过核心数量被证明是有益的)而不是我得到大约 10 倍的任务每秒网络使用率平均为 35 mbps。