播放并尝试查看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 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);
答案 0 :(得分:1)
理想情况下,您的应用程序将在给定的限制范围内运行;它应该干净地处理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
配置的。如果申请人抱怨,也要提高这个限制。