尝试并尝试看看 Node.js 使用 apache bench 从磁盘提供静态文件的速度有多快
ab -r -n 10000 -c 1000 http://server:8080/loadtestfile.txt
我在 OSX Lion 上的 Ubuntu 11.04 x64 VirtualBox VM 上遇到 ulimit 问题
(node) Hit max file limit. Increase "ulimit - n"
我无法再增加限制了。
$ ulimit -n 1000000
$ limit -n 1100000
-su: ulimit: open files: cannot modify limit: Operation not permitted
这是强制 node.js 从磁盘重新加载文件以服务每个 HTTP 请求的正确方法吗?如何将限制提高到 1000000 以上?
正常的 curl 请求有效:
curl http://server:8080/loadtestfile.txt
代码
var sys = require('sys'),
http = require('http'),
fs = require('fs'),
index;
http.createServer(function(request, response) {
fs.readFile('./loadtestfile.txt', function (err, data) {
response.writeHeader(200, {"Content-Type": "text/plain"});
response.write(data);
response.end();
});
}).listen(8080);
最佳答案
理想情况下,您的应用程序将在给定的限制内运行;它应该干净地处理 accept(2)
返回错误条件 errno(3)
设置为EMFILE
或ENFILE
在现有连接终止之前不尝试接受另一个连接。
但是,修复应用程序以优雅地处理这种情况可能很困难;如果您只是想进一步提高限制以进行更多测试,有两种可能性。
编辑
/etc/security/limits.conf
提高您的用户帐户的硬限制nofile
限制为更高的值,然后再次登录您的用户帐户。在 root shell 中进行测试;您可以使用
root
登录直接或使用sudo -s
或su
启动 shell,然后运行 ulimit -n
从那里发出命令。
困难在于提高限制需要管理访问权限。 (当您的系统上同时有数百个用户时,您希望让他们保持良好的状态...)
但是,我猜测您的应用程序也会遇到系统范围内打开文件的最大数量限制;通过 /proc/sys/fs/file-max
配置。如果应用程序提示,也提高该限制。
关于Node.js apache 基准测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10457497/