egg 运行一两天之后突然就停止了

Created on 17 Jan 2018  ·  55Comments  ·  Source: eggjs/egg

egg 版本 2.1.0

启动之后,一直运行良好,一天之后,端口就停了,log 也查不到原因,请问如何排查

Inactive

Most helpful comment

title 可以像端口一样写在配置文件里么

不行,配置文件是针对 worker 和 agent 的,title 这个是 master 启动前就要确定的。

npm stop 这个,你可以在里面加一个 shell 来动态拿到你的名字,如

stop: "egg-script stop --title=`basename ${pwd}`"

All 55 comments

是用 egg-scripts 启动的么?看下它的日志,注意是在 home 那边的

egg-script 的默认日志在哪呢

启动时控制台有输出

[egg-scripts] Save log file to /root/logs

疑似日志有这三个

-rw-r--r-- 1 root root  39036 Jan 17 08:12 master-stdout.log.20180116.101824
-rw-r--r-- 1 root root  15596 Jan 17 08:12 master-stderr.log.20180116.101824
-rw-r--r-- 1 root root   1338 Jan 17 09:01 master-stderr.log.20180117.093316

@atian25 哪个能看到退出原因呢

[2018-01-17 08:12:12.621] [cfork:master:12447] master uncaughtException: Error [ERR_IPC_CHANNEL_CLOSED]: channel closed
    at process.target.send (internal/child_process.js:588:16)
    at Messenger.sendToParent (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:130:29)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:96:12)
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:395:22)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
Error [ERR_IPC_CHANNEL_CLOSED]: channel closed
    at process.target.send (internal/child_process.js:588:16)
    at Messenger.sendToParent (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:130:29)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:96:12)
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:395:22)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
(total 4 disconnect, 0 unexpected exit)
2018-01-17 08:12:37,593 ERROR 12447 nodejs.ClusterWorkerExceptionError: [master] 1 agent and 0 worker(s) alive, exit to avoid unknown state
    at Manager.Master.workerManager.on (<project dir>/node_modules/egg-cluster/lib/master.js:130:19)
    at emitOne (events.js:116:13)
    at Manager.emit (events.js:211:7)
    at Timeout.timer.setInterval [as _onTimeout] (<project dir>/node_modules/egg-cluster/lib/utils/manager.js:67:14)
    at ontimeout (timers.js:475:11)
    at tryOnTimeout (timers.js:310:5)
    at Timer.listOnTimeout (timers.js:270:5)
name: 'ClusterWorkerExceptionError'
count: { agent: 1, worker: 0 }
pid: 12447
hostname: xxx

2018-01-17 08:12:37,594 ERROR 12447 [master] exit with code:1
2018-01-17 08:12:37,597 ERROR 12453 [agent_worker] receive disconnect event on child_process fork mode, exiting with code:110
2018-01-17 08:12:37,598 ERROR 12453 [agent_worker] exit with code:110

看着像是这个,这个问题很严重啊

再贴一段

<project dir>/node_modules/egg/lib/application.js:89
        if (err.message) {
                ^

TypeError: Cannot read property 'message' of null
    at error (<project dir>/node_modules/egg/lib/application.js:89:17)
    at process.<anonymous> (<project dir>/node_modules/graceful/index.js:32:5)
    at emitOne (events.js:116:13)
    at process.emit (events.js:211:7)
    at process._fatalException (bootstrap_node.js:374:26)
[2018-01-17 09:57:23.743] [cfork:master:30500] worker:30536 disconnect (exitedAfterDisconnect: false, state: disconnected, isDead: false, worker.disableRefork: false)
[2018-01-17 09:57:23.743] [cfork:master:30500] don't fork new work (refork: false)
[2018-01-17 09:57:23.744] [cfork:master:30500] worker:30536 exit (code: 7, exitedAfterDisconnect: false, state: dead, isDead: true, isExpected: true, worker.disableRefork: false)
2018-01-17 09:57:23,746 ERROR 30500 nodejs.AppWorkerDiedError: [master] app_worker#3:30536 died (code: 7, signal: null, suicide: false, state: dead), current workers: ["1","2","4"]
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:381:21)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
    at EventEmitter.emit (events.js:217:7)
    at ChildProcess.worker.process.once (internal/cluster/master.js:185:13)
    at Object.onceWrapper (events.js:317:30)
name: 'AppWorkerDiedError'
pid: 30500
hostname: xxx

[2018-01-17 09:57:23.747] [cfork:master:30500] master uncaughtException: Error [ERR_IPC_CHANNEL_CLOSED]: channel closed
    at process.target.send (internal/child_process.js:588:16)
    at Messenger.sendToParent (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:130:29)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:96:12)
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:395:22)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
Error [ERR_IPC_CHANNEL_CLOSED]: channel closed
    at process.target.send (internal/child_process.js:588:16)
    at Messenger.sendToParent (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:130:29)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:96:12)
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:395:22)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
(total 1 disconnect, 0 unexpected exit)

refork 为 false? 查一下你的 env 是什么

egg-scripts start --env=local --daemon

这样启动会有问题么

为什么 local...

原因是这样,我有两个 egg,共用一套代码。

我想通过配置文件区分各种环境,首先每个 egg 都要区分线上和本地环境,于是 --env 是要写到配置文件里的。

其次,我还希望配置文件能设置 --title,这样 package.json 就不用改来改去了。

请问有啥最佳实践么

npm stop 会干掉所有 egg 非常坑爹,我感觉大部分人都会踩着个坑。。

egg的配置文件本身就能区分线上和本地环境

@duncup --title 可以么,这个也很重要,不然 npm stop 就悲剧了。。

你所说的两个egg共用一套代码具体是什么场景呢?

同一个应用似乎没有必要启动两次

就是一个 egg 为主,另一个 egg 要复用前一个的大部分代码,只是新增几个新接口,我不想 copy 一份再搞,这样会导致代码差异越来越大

但是我的 router 层有轻微差异,比如首页就不一样,但是接口都一样

即使如此,你也可以在机器上部署两份?而且你可以用diff patch来保持两个分支的同步。
最后的最后,我在egg-scripts项目的源码里确实看到了--title但是不确定和你想要的是不是一个东西,你可以试一下

我确实部署了两份,我先去看看 egg-scripts 的源码,谢谢

这么搞是给自己埋坑,最好一次就升级完成了~ 都有升级指南了,问题不大~

@okoala 似乎这个issues里并没有提到升级?是否点错了?

const pkgInfo = require(path.join(baseDir, 'package.json'));
argv.title = argv.title || `egg-server-${pkgInfo.name}`;

egg-scripts 要么读 package.json,要么手动传参,实质都是通过 package.json,但这个 package.json 在我的场景里无法共享...

就是一个 egg 为主,另一个 egg 要复用前一个的大部分代码,只是新增几个新接口,我不想 copy 一份再搞,这样会导致代码差异越来越大

为什么不干脆一份代码,在里面做下判断,来开启部分功能。

有点晕,没太看明白场景和问题是什么

感觉他的场景类似与一套源码部署了两个不同网站。。。。。。

两个域名,a.com 和 b.com,每个域名都有自己的首页和登录页

我希望在路由注册时,一开始就分离了,这样代码各自演化,不会互相侵入

if (a) {
   require('a')(app)
}
else {
   require('b')(app)
}

如果两者区别不大,那就只部署一份,根据来源的 hostname 来做 router 的分配咯。

如果两者差异较大,那就把可共用的部分(Service 等)抽离为一个 plugin,然后 2 个 egg 项目去引入它。

再加上我考虑既然是两个项目,就要做到互不影响,比如一个挂了不影响另一个,所以最好部署两份代码,但是万恶的 npm stop,会同归于尽...

@atian25 路由注册不是 egg 启动时执行好的么,还能运行时再分配么

在启动期就注册好的。可以考虑下 koa-host 之类的插件,根据 host 去自动加 prefix 啥的。

title 可以像端口一样写在配置文件里么,如果可以,就能解决我的问题了。。

title 可以像端口一样写在配置文件里么

不行,配置文件是针对 worker 和 agent 的,title 这个是 master 启动前就要确定的。

npm stop 这个,你可以在里面加一个 shell 来动态拿到你的名字,如

stop: "egg-script stop --title=`basename ${pwd}`"

@atian25 那启动也可以是这个思路吧

意思就是,你完全可以写一段 shell 来自动拼出启动/停止脚本。

或者你写一个 my-egg-script 来继承 egg-scripts,提供你的默认值

谢谢,我不会 shell,没想到有这个思路,经你提醒,这确实是最方便的方式

如果你决定分开部署的话,单纯改掉package.json里的name似乎就可以了

改掉 package.json 不行,因为仓库是同一个

那就按 atian25说的改吧,我也就是这么一说。不过如果你还有可能从两个变成三个站甚至更多的话,还是建议你考虑提取公用部分,然后分开项目。不然以后可能闹出十个网站一荣俱荣一损俱损的悲剧。

谢谢 @duncup

但会突然停的原因是啥?

上文我了解的信息是 env 不是 prod 导致的,是这样么

不是 prod 只是会导致进程挂掉后不会自动重启。
你这里还是要查查代码哪里导致 uncaughtException 了。

@gxcsoccer ClusterWorkerExceptionError 这个是啥情况?

希望能有帮助

<project dir>/node_modules/egg/lib/application.js:89
        if (err.message) {
                ^

TypeError: Cannot read property 'message' of null
    at error (<project dir>/node_modules/egg/lib/application.js:89:17)
    at process.<anonymous> (<project dir>/node_modules/graceful/index.js:32:5)
    at emitOne (events.js:116:13)
    at process.emit (events.js:211:7)
    at process._fatalException (bootstrap_node.js:374:26)
[2018-01-16 23:13:50.552] [cfork:master:12447] worker:12476 disconnect (exitedAfterDisconnect: false, state: disconnected, isDead: false, worker.disableRefork: false)
[2018-01-16 23:13:50.552] [cfork:master:12447] don't fork new work (refork: false)
[2018-01-16 23:13:50.553] [cfork:master:12447] worker:12476 exit (code: 7, exitedAfterDisconnect: false, state: dead, isDead: true, isExpected: true, worker.disableRefork: false)
2018-01-16 23:13:50,555 ERROR 12447 nodejs.AppWorkerDiedError: [master] app_worker#3:12476 died (code: 7, signal: null, suicide: false, state: dead), current workers: ["1","2","4"]
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:381:21)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
    at EventEmitter.emit (events.js:217:7)
    at ChildProcess.worker.process.once (internal/cluster/master.js:185:13)
    at Object.onceWrapper (events.js:317:30)
name: 'AppWorkerDiedError'
pid: 12447
hostname: xxx

[2018-01-16 23:13:50.555] [cfork:master:12447] master uncaughtException: Error [ERR_IPC_CHANNEL_CLOSED]: channel closed
    at process.target.send (internal/child_process.js:588:16)
    at Messenger.sendToParent (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:130:29)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:96:12)
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:395:22)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
Error [ERR_IPC_CHANNEL_CLOSED]: channel closed
    at process.target.send (internal/child_process.js:588:16)
    at Messenger.sendToParent (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:130:29)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:96:12)
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:395:22)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
(total 1 disconnect, 0 unexpected exit)
<project dir>/node_modules/egg/lib/application.js:89
        if (err.message) {
                ^

TypeError: Cannot read property 'message' of null
    at error (<project dir>/node_modules/egg/lib/application.js:89:17)
    at process.<anonymous> (<project dir>/node_modules/graceful/index.js:32:5)
    at emitOne (events.js:116:13)
    at process.emit (events.js:211:7)
    at process._fatalException (bootstrap_node.js:374:26)
[2018-01-16 23:25:21.579] [cfork:master:12447] worker:12470 disconnect (exitedAfterDisconnect: false, state: disconnected, isDead: false, worker.disableRefork: false)
[2018-01-16 23:25:21.579] [cfork:master:12447] don't fork new work (refork: false)
[2018-01-16 23:25:21.580] [cfork:master:12447] worker:12470 exit (code: 7, exitedAfterDisconnect: false, state: dead, isDead: true, isExpected: true, worker.disableRefork: false)
2018-01-16 23:25:21,580 ERROR 12447 nodejs.AppWorkerDiedError: [master] app_worker#1:12470 died (code: 7, signal: null, suicide: false, state: dead), current workers: ["2","4"]
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:381:21)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
    at EventEmitter.emit (events.js:217:7)
    at ChildProcess.worker.process.once (internal/cluster/master.js:185:13)
    at Object.onceWrapper (events.js:317:30)
name: 'AppWorkerDiedError'
pid: 12447
hostname: xxx

[2018-01-16 23:25:21.580] [cfork:master:12447] master uncaughtException: Error [ERR_IPC_CHANNEL_CLOSED]: channel closed
    at process.target.send (internal/child_process.js:588:16)
    at Messenger.sendToParent (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:130:29)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:96:12)
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:395:22)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
Error [ERR_IPC_CHANNEL_CLOSED]: channel closed
    at process.target.send (internal/child_process.js:588:16)
    at Messenger.sendToParent (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:130:29)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:96:12)
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:395:22)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
(total 2 disconnect, 0 unexpected exit)
<project dir>/node_modules/egg/lib/application.js:89
        if (err.message) {
                ^

TypeError: Cannot read property 'message' of null
    at error (<project dir>/node_modules/egg/lib/application.js:89:17)
    at process.<anonymous> (<project dir>/node_modules/graceful/index.js:32:5)
    at emitOne (events.js:116:13)
    at process.emit (events.js:211:7)
    at process._fatalException (bootstrap_node.js:374:26)
[2018-01-16 23:52:53.423] [cfork:master:12447] worker:12487 disconnect (exitedAfterDisconnect: false, state: disconnected, isDead: false, worker.disableRefork: false)
[2018-01-16 23:52:53.423] [cfork:master:12447] don't fork new work (refork: false)
[2018-01-16 23:52:53.423] [cfork:master:12447] worker:12487 exit (code: 7, exitedAfterDisconnect: false, state: dead, isDead: true, isExpected: true, worker.disableRefork: false)
2018-01-16 23:52:53,423 ERROR 12447 nodejs.AppWorkerDiedError: [master] app_worker#4:12487 died (code: 7, signal: null, suicide: false, state: dead), current workers: ["2"]
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:381:21)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
    at EventEmitter.emit (events.js:217:7)
    at ChildProcess.worker.process.once (internal/cluster/master.js:185:13)
    at Object.onceWrapper (events.js:317:30)
name: 'AppWorkerDiedError'
pid: 12447
hostname: xxx

[2018-01-16 23:52:53.424] [cfork:master:12447] master uncaughtException: Error [ERR_IPC_CHANNEL_CLOSED]: channel closed
    at process.target.send (internal/child_process.js:588:16)
    at Messenger.sendToParent (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:130:29)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:96:12)
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:395:22)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
Error [ERR_IPC_CHANNEL_CLOSED]: channel closed
    at process.target.send (internal/child_process.js:588:16)
    at Messenger.sendToParent (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:130:29)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:96:12)
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:395:22)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
(total 3 disconnect, 0 unexpected exit)
<project dir>/node_modules/egg/lib/application.js:89
        if (err.message) {
                ^

TypeError: Cannot read property 'message' of null
    at error (<project dir>/node_modules/egg/lib/application.js:89:17)
    at process.<anonymous> (<project dir>/node_modules/graceful/index.js:32:5)
    at emitOne (events.js:116:13)
    at process.emit (events.js:211:7)
    at process._fatalException (bootstrap_node.js:374:26)
[2018-01-17 08:12:12.620] [cfork:master:12447] worker:12471 disconnect (exitedAfterDisconnect: false, state: disconnected, isDead: false, worker.disableRefork: false)
[2018-01-17 08:12:12.620] [cfork:master:12447] don't fork new work (refork: false)
[2018-01-17 08:12:12.621] [cfork:master:12447] worker:12471 exit (code: 7, exitedAfterDisconnect: false, state: dead, isDead: true, isExpected: true, worker.disableRefork: false)
2018-01-17 08:12:12,621 ERROR 12447 nodejs.AppWorkerDiedError: [master] app_worker#2:12471 died (code: 7, signal: null, suicide: false, state: dead), current workers: []
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:381:21)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
    at EventEmitter.emit (events.js:217:7)
    at ChildProcess.worker.process.once (internal/cluster/master.js:185:13)
    at Object.onceWrapper (events.js:317:30)
name: 'AppWorkerDiedError'
pid: 12447
hostname: xxx

[2018-01-17 08:12:12.621] [cfork:master:12447] master uncaughtException: Error [ERR_IPC_CHANNEL_CLOSED]: channel closed
    at process.target.send (internal/child_process.js:588:16)
    at Messenger.sendToParent (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:130:29)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:96:12)
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:395:22)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
Error [ERR_IPC_CHANNEL_CLOSED]: channel closed
    at process.target.send (internal/child_process.js:588:16)
    at Messenger.sendToParent (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:130:29)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:96:12)
    at Master.onAppExit (<project dir>/node_modules/egg-cluster/lib/master.js:395:22)
    at emitOne (events.js:116:13)
    at Master.emit (events.js:211:7)
    at Messenger.sendToMaster (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:122:17)
    at Messenger.send (<project dir>/node_modules/egg-cluster/lib/utils/messenger.js:87:12)
    at EventEmitter.cluster.on (<project dir>/node_modules/egg-cluster/lib/master.js:260:22)
    at emitThree (events.js:141:20)
(total 4 disconnect, 0 unexpected exit)
2018-01-17 08:12:37,593 ERROR 12447 nodejs.ClusterWorkerExceptionError: [master] 1 agent and 0 worker(s) alive, exit to avoid unknown state
    at Manager.Master.workerManager.on (<project dir>/node_modules/egg-cluster/lib/master.js:130:19)
    at emitOne (events.js:116:13)
    at Manager.emit (events.js:211:7)
    at Timeout.timer.setInterval [as _onTimeout] (<project dir>/node_modules/egg-cluster/lib/utils/manager.js:67:14)
    at ontimeout (timers.js:475:11)
    at tryOnTimeout (timers.js:310:5)
    at Timer.listOnTimeout (timers.js:270:5)
name: 'ClusterWorkerExceptionError'
count: { agent: 1, worker: 0 }
pid: 12447
hostname: xxx

2018-01-17 08:12:37,594 ERROR 12447 [master] exit with code:1
2018-01-17 08:12:37,597 ERROR 12453 [agent_worker] receive disconnect event on child_process fork mode, exiting with code:110
2018-01-17 08:12:37,598 ERROR 12453 [agent_worker] exit with code:110

process.on('uncaughtException', err => 这个 err 理论上不可能为 null 的才对。
你可以调试下看看 egg/lib/application.js:89:17 这里的 err 是啥

但根本原因还是因为你代码里面的某个地方导致了 uncaughtException,要检查业务代码。

之前我调试过这里,应该就是个 null,我再看看怎么定位业务代码问题吧

升级到最新版,err 为空的问题还存在

@atian25 这个为空的问题还打算改么?

process.on('uncaughtException', err => 这个 err 理论上不可能为 null 的才对。

@atian25 这里还是可能为 null 的。比如说:

process.on('uncaughtException', err => {
  console.log('err: ', err);
});

process.nextTick(() => {
  throw null;
});

https://github.com/eggjs/egg/pull/1978 这个 PR 为啥关了。

@musicode 可以检查一下哪里是不是抛了空异常并且没有捕获的。

hey, we need more information to follow up this issue, recommend to use egg-init --type=simple to provide a mini project and upload to your github.

for now it will close due to lack of activity, feel free to reopen this issue if provided more information.

还真有人和我用同样的部署方式,我是把 CPU 密集型的操作在同一个文件夹再开进程,监听队列,通过 自定义的 env 区分。也遇到了一段时间后

worker_1_acb16bbe9a03 | 2019-10-17 19:46:40,611 ERROR 47 nodejs.AppWorkerDiedError: [master] app_worker#2:76 died (code: null, signal: SIGABRT, suicide: false, state: dead), current workers: ["3","4"]
worker_1_acb16bbe9a03 |     at Master.onAppExit (/usr/src/app/node_modules/egg-cluster/lib/master.js:411:21)

估计是我自己代码中出现异常导致的。

Was this page helpful?
0 / 5 - 0 ratings