PhoneGap中文网

 找回密码
 立即注册

node 异步执行阻塞,strace发现堵在epoll_wait,求指点

node 异步执行阻塞,strace发现堵在epoll_wait,求指点 请大牛帮忙,万分感谢


node新手,编译安装 ./configure --prefix=/path, 版本:v0.10.26

代码如下:

var http = require('http');
//http.globalAgent.maxSockets = 100;
for (var i = 0; i <= 500; i++)
{
    http.get("http://www.baidu.com", function(res){
            console.log('ok--\n');
    }).on('error', function(e){
            console.log(e);
    });
 }

执行效果:默认maxSockets是5,执行5个get后就会卡住。

strace 效果如下:

strace -p 25817 Process 25817 attached - interrupt to quit clock_gettime(CLOCK_MONOTONIC, {20601802, 628068955}) = 0 epoll_wait(5,

然后就阻塞在这里。 如果把maxSockets调大,执行指定数值后也会卡住。

请问是什么原因,是安装的不正确?


回复:node 异步执行阻塞,strace发现堵在epoll_wait,求指点
  • 看到@yorkie 回复,又删除了。提示:agent:false

    今早在地铁上仔细看了 深入浅出node.js:

    如同服务器端的实现一般,http提供的ClientRequest对象也是基于TCP层实现的,在keepalive的情况下,一个底层会话连接可以多次用于请求。为了重用TCP连接,http模块包含一个默认的客户端代理对象http.globalAgent。它对每个服务器端(host + port)创建的连接进行了管理,默认情况下,通过ClientRequest对象对同一个服务器端发起的HTTP请求最多可以创建5个连接。

    调用HTTP客户端同时对一个服务器发起10次HTTP请求时,其实质只有5个请求处于并发状态,后续的请求需要等待某个请求完成服务后才真正发出。这与浏览器对同一个域名有下载连接数的限制是相同的行为。 如果你在服务器端通过ClientRequest调用网络中的其他HTTP服务,记得关注代理对象对网络请求的限制。一旦请求量过大,连接限制将会限制服务性能。如需要改变,可以在options中传递agent选项。默认情况下,请求会采用全局的代理对象,默认连接数限制的为5。 我们既可以自行构造代理对象,代码如下: var agent = new http.Agent({ maxSockets: 10 }); var options = { hostname: '127.0.0.1’, port: 1334, path: '/’, method: 'GET’, agent: agent }; 也可以设置agent选项为false值,以脱离连接池的管理,使得请求不受并发的限制。 Agent对象的sockets和requests属性分别表示当前连接池中使用中的连接数和处于等待状态的请求数,在业务中监视这两个值有助于发现业务状态的繁忙程度。

  • var http = require('http');
    //http.globalAgent.maxSockets = 100;
    for (var i = 0; i <= 500; i++) {
      http.get("http://www.baidu.com", function(res) {
        res.on('data', function(chunk) {
          console.log('OK--\n');
        });
      }).on('error', function(e) {
        console.log(e);
      });
    }
    

    这样是ok的,http应该是开5个socket去做http请求而不是指的只发5个http请求

  • 额 被你监视了 应该是 agent: null可以禁用agent

  • 试了,ok。对其中的原理有点晕了。 为什么绑定on('data’, fun)就正常了呢?

  • 很需要,谢谢!

Archiver|手机版|小黑屋| PhoneGap中文网 ( 京ICP备13027796号-1 )

GMT+8, 2024-5-14 03:12 , Processed in 0.066998 second(s), 11 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部