PostgreSQL,eris(-sharder):池和内存问题

时间:2019-03-17 19:32:08

标签: node.js postgresql eris

我有一个Discord机器人,今天从discord.js升级到了eris。但是,有一个问题:

  • 当我在每个引导的分片中创建一个池(new Pool()时(在launch()函数中,我有大约80个分片),到PostgreSQL服务器的连接创建过多。这会导致error: sorry, too many clients already错误,并且机器人无法执行任何操作。

  • 当我在membercount.js中创建一个池(请参见下文),然后将其导出时,由于某种原因,内存不再可用-它增加得太多,以至于机器人崩溃。

// bot.js
const pool = require('./membercount.js').pool;

const Base = require('eris-sharder').Base;
class Class extends Base {
    constructor(bot2) {
        super(bot2);
    }

    launch() {

        const bot = this.bot;
        bot.pool = pool;

        // ... code
    }
}

// membercount.js
const config = require('./config.json'),
    Sharder = require('eris-sharder'),
    sharder = new Sharder.Master(config.token, '/bot.js', {
            clusters: 32,
            // ... config
        }
    });

const { Pool } = require('pg');
const pool = new Pool({
    host: 'localhost',
    port: 5432,
    user: 'membercount',
    database: 'membercount',
    password: 'nope'
});

pool.connect();

module.exports.pool = pool;

sharder.on('stats', async stats => {
    await pool.query("UPDATE stats SET botstats=$1 WHERE index=1", [stats]);
});

我不知道该如何处理,这样它就不会与postgres数据库建立太多的连接,否则内存不会增加太多。有没有人有办法解决吗?如果您需要更多信息,请发表评论!

0 个答案:

没有答案