egg.js 在服务器启动慢的原因是什么?
发布于 9 个月前 作者 thomas0836 1238 次浏览 来自 问答

情况是这样的,在本地开发的时候使用npm run dev (npx sequelize db:migrate && egg-bin dev) 启动都是1到3秒左右,在本地使用npm start (egg-scripts start --daemon --title=test --env prod)也是这个时间。 但是在服务器上却跑到 89+ ([egg-scripts] Wait Start: 89…)才启动到……

本地是 node/9.11.2, npm 5.6.0 服务器 node/11.2.0, npm 6.4.1

除了 node的版本问题,还会有什么问题影响

24 回复

那先换成同样版本试试?

服务器怎么不用LTS版本的呢?

@Ander456 版本越高,不应该是跑得越快吗?我还特意的 autod 一下,都把依赖全部升级了……

@Delete540 新部署的机子,都是用 n latest 来安装的 哈哈哈

和机器配置有关系吧,我在2核4G的机器上启动一般就是wait 2 ,在1核1G的机器上就是wait 12。

@CaanDoll 刚都换成9.11.2,一样非常慢,刚开始的时候是wait3 左右的。就是部署了10个项目左右后,突然就这样了。 全部项目都停掉还是这样,只剩下没有重启服务器而已,无解……

好像还跟磁盘有关系吧,服务端通常要加载很多库的,小文件很多,如果磁盘读写不够的话,会比较慢的。还有就是 cpu 的性能也比较影响。

刚刚重启了,稳定在 17 到 19之间,还不能恢复到之前的 3左右。

查了一下 服务器的cpu 历史,在 22号前一直是占用率在 3%左右,然后突然就到了85%,然后跌下来后就一直维持到10%…… 记得当时应该是部署了一个每30秒跑一次的egg 的 定时任务,但是这个项目之后就挂掉了,启动不起来。之后就出现了其他项目启动都非常慢的问题了。然后更新了node的版本,把项目的依赖也更新,但是问题依然。 感觉应该是这个导致的,但是不知道怎么破,求指导! https://cnodejs.org/topic/5bf67536be1b120abac5bee0

'use strict';

module.exports = {
  schedule: {
    interval: '30s', // 1 分钟间隔
    type: 'all', // 指定所有的 worker 都需要执行
  },
  async task(ctx) {
    const { logger, service } = ctx;
    const { email } = service;
    await email.sendTask();

    logger.debug('email.sendTask working');
  },
};

@CaanDoll 阿里云的CentOS 7.4 64位 1核2G,2M。 刚开始的时候都是跑Wait 3左右而已

恢复到 Wait 5了,但是那个定时任务的项目 不敢启动……

你的服务器是不是突发性能实例,基线15%或者10%的那种?

  1. 用 Alinode 看 CPU 数据
  2. 看 run 目录下的 timing 数据,看看是不是某些插件的 beforeStart 初始化较长,如数据库连接啥的

@thomas0836 11 这种不是 LTS 版本,会包含一些实验性的代码,反而可能会导致性能下降。

@atian25 好的,了解,我再去看看

@CaanDoll 不知道呢,是新用户免费半年的那种。就是当成测试机,用来玩的

@atian25 大大,弱弱的问问,定时任务这样写OK吗?type: 'all', // 指定所有的 worker 都需要执行 这里,我不知道理解有没有错。如果是双核的话,就是两个worker,那是两个worker都会独立去执行,就是说他们都有一个独立的每30s执行一次的定时任务?

'use strict';

module.exports = {
  schedule: {
    interval: '30s', // 1 分钟间隔
    type: 'all', // 指定所有的 worker 都需要执行
  },
  async task(ctx) {
    const { logger, service } = ctx;
    const { email } = service;
    await email.sendTask();

    logger.debug('email.sendTask working');
  },
};

@atian25 还有 Alinode 也有点问题想了解一下,他是一个appid 就只能部署到一个项目吗? 我看到里面好似可以多个实例的样子,这个实例是指多核的时候的多个worker? 还是说可以多个项目都公用一个appid,然后在实例这里就分别可以看到不同项目?

@atian25 就是部署了这个定时任务的项目后,就引发了以上的血案。这个定时任务的项目刚刚部署的时候好好的,Wait 10左右就启动了。因为这个项目还需要更新一些代码,所以几天内重启了几次,突然就启动不了。然后其他的项目也跟着启动不了。这个项目除了加了定时任务,其他都和别的项目一样的数据库操作而已,没有其他东西。

@thomas0836 定时任务是在启动成功后才会开始调度的,跟启动速度无关。

alinode 的一个 appid 是一个监控项目,你代码都不同肯定不能同个 ID

回到顶部