CNode

nodejs的fork进程执行mysql操作,内存不断增加

问答
LLishaojun发布于12 年前最后回复12 年前10 回复6197 浏览0 收藏

nodejs的fork进程mysql内存不断增加。

代码:

var mysql = require('mysql');
var sqlForks = require('fork-list');
var db_options = {
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: '123',
    database: '123'
};
var client = mysql.createConnection(db_options);
var moment = require('moment');
var date = new moment().format("YYYYMMDD");
var datetime = '';

sqlForks.proc(function(sqlString){
	client = mysql.createConnection(db_options);
	client.connect(function(err) {
			if(err)
			{
				debug_log('connect db error: ' + err);
			}
		});
	client.query(sqlString, function(err, results, fields) {  
		if(err)
		{
			datetime = new moment().format("YYYY-MM-DD HH:mm:ss");
			debug_log(datetime + " mysql error:" + err);
		}
	});
	client.end();
});

功能: 后台forks进程一直会收到sql的query语句,其实不断开mysql连接是最好的了。

现在问题: 每个forks进程内存一直在增加。

查看回复

回复 (10)

L
Lishaojun#1·12 年前

mysql的client资源怎么释放

L
Lishaojun#2·12 年前

改成pool方式了,但是内存还是会慢慢上去,只有一个客户端在发数据测试。 代码: sqlForks.proc(function(sqlString){ client.getConnection(function(err, connection){ connection.query(sqlString, function(err, results, fields) {
if(err) { datetime = new moment().format("YYYY-MM-DD HH:mm:ss"); debug_log(datetime + " mysql error:" + err); } }); connection.release(); }); });

C
chemdemo#3·12 年前

fork-list这个模块 确认没有什么问题么 github上都没人关注过

L
Lishaojun#4·12 年前
引用 chemdemofork list这个模块 确认没有什么问题么 github上都没人关注过

@chemdemo 我不知怎么确认,我用了之后也没发现明显问题,也许刚发布没什么人关注吧。

H
hades#5·12 年前

感觉是fork-list的问题,换compute-cluster

L
Lishaojun#6·12 年前
引用 hades感觉是fork list的问题,换compute cluster

@hades 多谢提醒,马上试试,测试完后反馈结果。

A
alsotang#7·12 年前

你代码里面的函数调用有问题吧?看起来像是同步的写法

A
alsotang#9·12 年前
引用 Lishaojun@alsotang 大神,那一段?

@Lishaojun client 的那一系列调用

L
Lishaojun#10·12 年前
引用 alsotang@Lishaojun client 的那一系列调用

@alsotang client.getConnection()我测试过了,是异步的,不过到了从进程,同步异步无所谓了,只要不影响主进程执行时间。 另外我准备多模拟一些设备压力测试下,内存回收速度。

参与回复
登录后即可参与回复。登录