我当前的设置是nginx->反向代理-> nextjs。我正在将pm2与集群模式一起用于nextjs。问题是nextjs正常运行约10分钟后,它停止响应而没有出现任何错误,但是当我使用pm2重新启动nextjs应用程序时,此问题得以解决。 nextjs应用程序只能运行10分钟,之后我必须重新启动。因此,我必须运行cron作业才能执行此操作。
pm2日志输出
2020-01-14T09:40:02: PM2 log: App [npm:0] starting in -cluster mode-
2020-01-14T09:40:02: PM2 log: App [npm:0] online
2020-01-14T09:40:02: PM2 log: App [npm:1] starting in -cluster mode-
2020-01-14T09:40:02: PM2 log: App [npm:1] online
2020-01-14T09:40:02: PM2 log: App [npm:2] starting in -cluster mode-
2020-01-14T09:40:03: PM2 log: App [npm:2] online
2020-01-14T09:40:03: PM2 log: App [npm:3] starting in -cluster mode-
2020-01-14T09:40:03: PM2 log: App [npm:3] online
2020-01-14T09:40:03: PM2 log: App [npm:4] starting in -cluster mode-
2020-01-14T09:40:03: PM2 log: App [npm:4] online
2020-01-14T09:40:03: PM2 log: App [npm:5] starting in -cluster mode-
2020-01-14T09:40:03: PM2 log: App [npm:5] online
2020-01-14T09:40:03: PM2 log: App [npm:6] starting in -cluster mode-
2020-01-14T09:40:03: PM2 log: App [npm:6] online
2020-01-14T09:40:03: PM2 log: App [npm:7] starting in -cluster mode-
2020-01-14T09:40:03: PM2 log: App [npm:7] online
> Server started at http://localhost:3000 with development ? false
events.js:187
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (net.js:1306:14)
at listenInCluster (net.js:1354:12)
at Server.listen (net.js:1442:7)
at /Users/username/Data/Projects/reactjs/ssr/server.js:90:8
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1333:8)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
code: 'EADDRINUSE',
errno: -48,
syscall: 'listen',
address: '::',
port: 3000
}
events.js:187
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (net.js:1306:14)
at listenInCluster (net.js:1354:12)
at Server.listen (net.js:1442:7)
at /Users/username/Data/Projects/reactjs/ssr/server.js:90:8
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1333:8)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
code: 'EADDRINUSE',
errno: -48,
syscall: 'listen',
address: '::',
port: 3000
}
events.js:187
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (net.js:1306:14)
at listenInCluster (net.js:1354:12)
at Server.listen (net.js:1442:7)
at /Users/username/Data/Projects/reactjs/ssr/server.js:90:8
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1333:8)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
code: 'EADDRINUSE',
errno: -48,
syscall: 'listen',
address: '::',
port: 3000
}
events.js:187
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (net.js:1306:14)
at listenInCluster (net.js:1354:12)
at Server.listen (net.js:1442:7)
at /Users/username/Data/Projects/reactjs/ssr/server.js:90:8
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1333:8)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
code: 'EADDRINUSE',
errno: -48,
syscall: 'listen',
address: '::',
port: 3000
}
events.js:187
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (net.js:1306:14)
at listenInCluster (net.js:1354:12)
at Server.listen (net.js:1442:7)
at /Users/username/Data/Projects/reactjs/ssr/server.js:90:8
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1333:8)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
code: 'EADDRINUSE',
errno: -48,
syscall: 'listen',
address: '::',
port: 3000
}
events.js:187
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (net.js:1306:14)
at listenInCluster (net.js:1354:12)
at Server.listen (net.js:1442:7)
at /Users/username/Data/Projects/reactjs/ssr/server.js:90:8
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1333:8)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
code: 'EADDRINUSE',
errno: -48,
syscall: 'listen',
address: '::',
port: 3000
}
尽管您没有提到使用npm,但我通过从ecosystem.config.json
文件中删除npm的使用来解决了类似的问题。
之前(不起作用):
{
"apps": [
{
...
"script": "/usr/bin/npm",
"args" : "start",
...
}
]
}
工作后:
{
"apps": [
{
...
"script": "./node_modules/.bin/next",
"args" : "start -p 3000",
...
}
]
}
我没有花时间去研究npm的问题。
我在这里找到了解决方案:express server port configuration issue with pm2 cluster mode