nodejs 内存泄漏

监控nodejs的土方法

console.log("Server PID", process.pid)
sudo node --inspect app.js

while true; do curl "http://localhost:1337/"; done

cb -n 1000 -c 100 http://127:0:0:1:8999/
top -pid 2322

几种nodejs内存泄漏原因

无限制增长的数组

无限制设置属性和值

任何模块内的私有变量和方法均是永驻内存的

大循环,无GC机会

function LeakingClass() {
    
}

var leaks = []

var http = require('http')

http.createServer((req, res) => {
    leaks.push(new LeakingClass());
    res.writeHead(200);
    res.end('Hello world');
}).listen(9000)

console.log('Server Pid', process.pid)
_.memoize = function(func, hasher) {
    var memo = {}
    hasher || (hasher = _.identity)
    return function() {
        var key = hasher.apply(this, arguments);
        return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
    }
}
((exports, require, module, __filename, __dirname) => {
    var circle = require('./circle.js')
    console.log('The area of a ' + circle.area(4))
    exports.get = () => circle()
})


for (var i = 0; i < 10000000; i++) {
    var user = {}
    user.name = 'outman'
}

for (var i = 0; i < 1000000; i ++) {
    setTimeout(() => {
        var user = {}
        user.name = 'outman'
    }, 1)
}
var http = require('http');
var crypto = require('crypto');
http.createServer((req, res) => {
    var password = 'ear';
    var salt = crypto.randomBytes(128).toString('base64');
    var hash = crypto.pbkdf2Sync(password, salt, 10000, 512);
    res.writeHead(200);
    res.end('wrwer')
}).listen(1337)

console.log('Server Pid', process.pid)
var http = require('http');
var crypto = require('crypto');
http.createServer((req, res) => {
    var password = 'ear';
    var salt = crypto.randomBytes(128).toString('base64');
    crypto.pbkdf2(password, salt, 10000, 512, () => {
        res.writeHead(200);
        res.end('wrwer')
    })
}).listen(1327)

console.log('Server Pid', process.pid)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值