微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

nodejs 应用程序中的内存泄漏,关于全局变量的建议

如何解决nodejs 应用程序中的内存泄漏,关于全局变量的建议

我需要在 Nodejs/JS 上调试第一次内存泄漏,所以这里有一些新手问题。我想得到一些关于代码设计的建议......特别是:

我有一个MysqL数据库的连接,我把它作为全局变量打开,这样我就不必建立连接和拆卸了。我有频繁的访问请求。 我已经连接到谷歌服务,同样,在全局级别建立一个连接对象,这样我就不必每次都重新连接并延迟用户。 对于上面的 1 和 2,我应该对内存泄漏有任何负面担忧吗? (相对于在函数范围内调用和拆除它们)

片段:

import  MysqL from 'MysqL';
const connection = MysqL.createConnection({
    host: 'localhost',user: 'xxxx',password: 'xxx',database: 'xxx',charset: 'utf8mb4'
});

 connection.connect((err) => {
    if (err) throw err;
    console.log('Connected!');
});
...
export {connection as default};

这是另一个

import config from './config.json';
import discord from 'discord.js';

//discord bot
const bot = new discord.Client();

// We also need to make sure we're attaching the config to the CLIENT so it's accessible everywhere!
bot.config = config;
bot.commands = new discord.Collection();
bot.aliases = new  discord.Collection();
bot.help = new discord.Collection();

bot.login(config.token);

export default bot;

和谷歌连接

// Imports the Google Cloud client library
import { TranslationServiceClient } from '@google-cloud/translate';

// instantiate an instance of a connection to google translate API
const translationClient = new TranslationServiceClient();

想知道是否有不同/更好的方法解决这个问题?

解决方法

IMO 最好像这样初始化连接,因为在您导出连接时,它并没有建立,这可能会导致不同的问题。

const createMsqlConnection = () => {
  return new Promise((resolve,reject) => {
  const connection = mysql.createConnection({
      host: 'localhost',user: 'xxxx',password: 'xxx',database: 'xxx',charset: 'utf8mb4'
  });

   connection.connect((err) => {
      if (err) reject(err);
      console.log('connected')
      resolve(connection);
  });
  })
}

const start = async () => {
   const connection = await createMsqlConnection()
   // use connection here...
}

start.then()

所以换句话说,与其导出连接,不如导出创建它的 Promise

,

事实证明我没有内存泄漏。在执行了大量跟踪后,我确定 GC 确实在收集并且我没有任何增长的块。

我在谷歌搜索其他问题后了解到,我只是同时获得了更多流量,这超出了我在峰值线程并发命中时可用的内存。

我增加了 VM 的内存,但最初并没有帮助,这让我明白这是一个设置问题。我需要增加可用节点内存的大小,这解决了问题。已经运行了好几天没有增长。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。