Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js应用程序突然将CPU加载到100%并挂起大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_944_4@ 我在 linux虚拟机上运行的node.js上有简单的应用.它监听tcp消息,并使用socket.io库将它们发送到客户端.在cpu使用率低的一段时间后,突然开始加载cpu越来越高,直到应用程序挂起.脚本很简单,我不明白它有什么问题.

var net = require('net');
var io = require('socket.io').listen(socketPort);

net.createServer(function (socket) {
    socket.setEncoding("utf8");
    socket.on('data',function (dataStr) {
        console.log("TCP dataStr " + dataStr);
        var data = JSON.parse(dataStr);
        io@L_772_3@ckets.in(data.room).emit('publish',data);
    });
}).listen(tcpPort);

io@L_772_3@ckets.on('connection',function (socket) {

    socket.on('subscribe',function (room) {
        console.log('subscribe room ' + room);
        if (Array.isArray(room)) {
            var i;
            for (i = 0; i < room.length; i++) {
                console.log('subscribe join room ' + room[i]);
                socket.join(room[i]);
            }
        } else if (typeof room === 'String') {
            console.log('subscribe join room ' + room);
            socket.join(room);
        }
    });

    socket.on('unsubscribe',function (room) {
        console.log('unsubscribe room ' + room);

        if (Array.isArray(room)) {
            var i;
            for (i = 0; i < room.length; i++) {
                console.log('unsubscribe leave room ' + room[i]);
                socket.leave(room[i]);
            }
        } else if (typeof room === 'String') {
            console.log('unsubscribe leave room ' + room);
            socket.leave(room);
        }

    });

});

同样的集群模块我试图运行多个与客户端通信的工作人员.每个工作人员经过一段时间后,都会以100%的时间将自己的cpu内核挂起,时间差不多一分钟.

UPD:客户端代码(在浏览器中运行):

socketObj = new function() {
        var that = this;
        that@L_772_3@cket;

        that.init = function(nodeServerUrl,rooms,onPublishFunC) {
            that@L_772_3@cket = io.connect(nodeServerUrl);
            that@L_772_3@cket.emit('subscribe',rooms);

            that@L_772_3@cket.on('publish',function(data) {
                        onPublishFunc(data);
            });
        };
        that.subscribe = function(room) {
            that@L_772_3@cket.emit('subscribe',room);
        };
        that.unsubscribe = function(room) {
            that@L_772_3@cket.emit('unsubscribe',room);
        };
    }

    ...

    try {
        socketObj.init('application url',["room1","room2"],nodeJsCallBACk);
    } catch(err) {
    }

    ...

    nodeJsCallBACk = function(jsonData) {
        //Only updates data on UI,no subscribing,unsubscribing,emitTing etc.
        ...
    }

UPD2:我试图在生产机器和我的本地Windows机器上重现合成测试的问题.我做了一些压力测试:

>多个客户端套接字连接
>多个静态数据下载(用于浏览器的socket.io脚本)
> tcp更新的频率增加.

经过几个小时的测试,我没有复制.但是当它与真正的用户在生产中运行时,它在早期或之后挂起.

我开始认为这是环境或特定的消息问题.大概下面我会尝试的事情是:

>将Node.js更新为当前版本
>尝试记录所有的数据传输,然后重播,希望挂起会重现

解决方法

将版本v0.10.4(稳定)更改为v0.11.2(不稳定)的Nodej.所有的功能都很好,耗时1-2%的cpu.现在我们在v0.10.8(稳定)上进行测试.

UPD在v0.10.8应用程序也是稳定的.

即使这个问题在v0.10.4(StablE)上被解除了,它仍然是非常奇怪和沮丧的.

大佬总结

以上是大佬教程为你收集整理的node.js应用程序突然将CPU加载到100%并挂起全部内容,希望文章能够帮你解决node.js应用程序突然将CPU加载到100%并挂起所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。