gpt4 book ai didi

node.js - 使用 cradle 和 CouchDB 对 Node.js 进行压力测试时,会出现错误 : EADDRINUSE, 地址已在使用中,这是怎么回事?

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:33 24 4
gpt4 key购买 nike

我正在尝试使用 cradle 作为数据库驱动程序来测量具有 CouchDB 后端的简单 Node.js 程序的吞吐量。当我对程序施加负载时,我在 30 秒内收到以下错误:

EADDRINUSE,地址已在使用

这是我的程序:

var http = require ('http'),
url = require('url'),
cradle = require('cradle'),
c = new(cradle.Connection)('127.0.0.1',5984,{cache: false, raw: false}),
db = c.database('testdb'),
port=8081;

http.createServer(function(req,res) {
var id = url.parse(req.url).pathname.substring(1);
db.get(id,function(err, doc) {
res.writeHead(200,{'Content-Type': 'application/json'});
res.write(JSON.stringify(doc));
res.end();
});
}).listen(port);

console.log("Server listening on port "+port);

我正在使用具有 50 个并发用户的 JMeter 脚本。平均响应时间120ms,返回文档平均大小3KB。

如您所见,我将 Cradle 的缓存设置为 false。为了进行调查,我查看了等待套接字的数量:它增加到大约 4000,此时它崩溃了 (netstat | grep WAIT | wc -l)

为了测试其他选项,我将缓存设置为 true。在这种情况下,程序不会崩溃,但随着时间的推移,等待套接字的数量会增加到几乎 10000 个。

我还编写了与 Java Servlet 相同的程序(没有异步部分),并且它运行良好,等待套接字的数量没有增加太多超过 20。

我的问题是:为什么会收到“EADDRINUSE,地址已在使用中”错误?为什么等待套接字的数量如此之多?

P.S.:这是 netstat|grep WAIT 输出的片段:

tcp4       0      0  localhost.5984         localhost.58926        TIME_WAIT
tcp4 0 0 localhost.5984 localhost.58925 TIME_WAIT
tcp4 0 0 localhost.58924 localhost.5984 TIME_WAIT
tcp4 0 0 localhost.58922 localhost.5984 TIME_WAIT
tcp4 0 0 localhost.5984 localhost.58923 TIME_WAIT

最佳答案

您确定 8001 上没有僵尸进程吗?

    ps aux | grep node

可能有帮助

还写了一篇文章帮助大家入门node和couchdb,有兴趣可以看看http://writings.nunojob.com/2011/09/getting-started-with-nodejs-and-couchdb.html

关于node.js - 使用 cradle 和 CouchDB 对 Node.js 进行压力测试时,会出现错误 : EADDRINUSE, 地址已在使用中,这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382044/

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