2

播放并尝试查看 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);
4

1 回答 1

1

理想情况下,您的应用程序将在给定的限制内运行;它应该干净地处理accept(2)返回错误条件,errno(3)设置为EMFILEENFILE不尝试接受另一个连接,直到现有连接终止。

但是,修复应用程序以优雅地处理这种情况可能很困难。如果您只是想进一步提高限制以进行更多测试,则有两种可能性。

  • 编辑/etc/security/limits.conf以将您的用户帐户的硬限制提高nofile到更高的限制,然后再次登录您的用户帐户。

  • 在 root shell 中进行测试;您可以root直接登录或使用sudo -ssu启动 shell,然后ulimit -n从那里运行命令。

困难在于提高限制需要管理权限。(当您同时在系统上有几百个用户时,您想让他们玩得很好......)

但是,我猜测您的应用程序也会遇到系统范围的最大打开文件数限制;这是通过配置的/proc/sys/fs/file-max。如果应用程序抱怨,也提高该限制。

于 2012-05-05T00:20:23.347 回答