PM2启动服务提示:Error: ENOENT: no such file or directory, uv_cwd 解决办法

 Nodejs, pm2  PM2启动服务提示:Error: ENOENT: no such file or directory, uv_cwd 解决办法已关闭评论
3月 232020
 

PM2中重启服务时,出现下面提示:

PM2: path.js:422
PM2: var path = (i >= 0) ? arguments[i] : process.cwd();
PM2: ^
PM2:
PM2: Error: ENOENT: no such file or directory, uv_cwd
PM2: at Error (native)
PM2: at Object.posix.resolve (path.js:422:50)
PM2: at Function.Module._resolveLookupPaths (module.js:248:17)
PM2: at Function.Module._resolveFilename (module.js:326:31)
PM2: at Function.Module._load (module.js:286:25)
PM2: at Module.require (module.js:365:17)
PM2: at require (module.js:384:17)
PM2: at Object.<anonymous> (/usr/local/bin/node_modules/pm2/lib/ProcessContainer.js:12:15)
PM2: at Module._compile (module.js:434:26)
PM2: at Object.Module._extensions..js (module.js:452:10)

 

出现这种情况原因很可能是你不经意间修改了当时启动服务时的目录,比如修改了目录名,移动了目录等, 可以通过下面的方法核实下:

原因:

  1. 通过pm2 list  中找到不能重启的服务的进程号pid
  2. 通过  ls -l /proc/pid(上面1找到的pid)/cwd, 检查下这个目录是不是被删除了?

 

最终解决方案:

  1. ps ax | grep PM2
  2. 找到pm2进程
  3.  kill pid(进程号)
  4.  pm2 list(或是其他的pm2 命令对pm2 进行重启)

 

 

 

 

 

PM2 error: Trace: { Error: spawn ENOMEM 错误处理

 Nodejs, pm2  PM2 error: Trace: { Error: spawn ENOMEM 错误处理已关闭评论
3月 132020
 

近日PM2下的nodejs应用出现下面错误:

PM2 error: Trace: { Error: spawn ENOMEM
at exports._errnoException (util.js:1020:11)
at ChildProcess.spawn (internal/child_process.js:328:11)
at exports.spawn (child_process.js:370:9)
at /usr/lib/node_modules/pm2/lib/God/ForkMode.js:112:20
at /usr/lib/node_modules/pm2/node_modules/async/internal/once.js:12:16
at next (/usr/lib/node_modules/pm2/node_modules/async/waterfall.js:21:29)
at /usr/lib/node_modules/pm2/node_modules/async/internal/onlyOnce.js:12:16
at WriteStream.<anonymous> (/usr/lib/node_modules/pm2/lib/Utility.js:181:13)
at emitOne (events.js:96:13)
at WriteStream.emit (events.js:188:7) code: ‘ENOMEM’, errno: ‘ENOMEM’, syscall: ‘spawn’ }
at Object.God.logAndGenerateError (/usr/lib/node_modules/pm2/lib/God/Methods.js:34:15)
at /usr/lib/node_modules/pm2/lib/God/ForkMode.js:114:13
at /usr/lib/node_modules/pm2/node_modules/async/internal/once.js:12:16
at next (/usr/lib/node_modules/pm2/node_modules/async/waterfall.js:21:29)
at /usr/lib/node_modules/pm2/node_modules/async/internal/onlyOnce.js:12:16
at WriteStream.<anonymous> (/usr/lib/node_modules/pm2/lib/Utility.js:181:13)
at emitOne (events.js:96:13)
at WriteStream.emit (events.js:188:7)
at WriteStream.<anonymous> (fs.js:2144:10)
at FSReqWrap.oncomplete (fs.js:123:15)

我在程序里做了process.on(“uncaughtException”)捕获处理,但碰到ENOMEM,也没有进入这个处理使用free -m, 发现这台机器no swap space enabled. 没有设置交换分区,可行方案:

设置交换分区,操作如下:

# dd if=/dev/zero of=/var/cacheswap bs=1M count=8192
# mkswap /var/cacheswap
# swapon /var/cacheswap

bs=1M count=8192 意味着它会创建8GB的Swap文件,您可以根据需要改变。 创建Swap之后,在我们的系统已通过运行“free -m”命令,看到Swap已启用。 为了使它能够在系统启动时自动加载,只需编辑/etc/fstab文件,并添加以下在文件的末尾条目。
/var/cacheswap swap swap defaults 0 0

 

问题虽然可以解决,但也有可能是应用程序代码存在着内存泄漏(memory leak),这个还需继续排查

 

[PM2] Spawning PM2 daemon with pm2_home=/home/ec2-user/.pm2问题排查

 Nodejs, pm2  [PM2] Spawning PM2 daemon with pm2_home=/home/ec2-user/.pm2问题排查已关闭评论
11月 192019
 

新aws机器部署了老nodejs项目,使用pm2 start config.js启动,提示:

[PM2] Spawning PM2 daemon with pm2_home=/home/ec2-user/.pm2

 

没有错误提示,pm2 log  / pm2 status都看不到信息, nodejs项目也没启动。

 

其实可以通过查看~/.pm2/pm2.log 文件获取真正错误信息:

SyntaxError: Unexpected identifier
at createScript (vm.js:56:10)
at Object.runInThisContext (vm.js:97:10)
at Module._compile (module.js:549:28)
at Object.Module._extensions..js (module.js:586:10)
at Module.load (module.js:494:32)
at tryModuleLoad (module.js:453:12)
at Function.Module._load (module.js:445:3)
at Module.require (module.js:504:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/usr/local/lib/nodejs/lib/node_modules/pm2/lib/Watcher.js:6:16)
/home/ec2-user/.pm2/pm2.log (END)
/usr/local/lib/nodejs/lib/node_modules/pm2/node_modules/chokidar/index.js:151
async remove(item) {
^^^^^^

 

以为是chokidar的版本太新了,切换到[email protected],再运行pm2 start config.js还是上面的错误。 由于nodejs使用的是比较老的6.15.1的版本,想到会不会是pm2的版本太新了,因此,将pm2由4.1.2降为3.2.3

npm insall -g [email protected]

 

安装完后果然OK了, 记录下希望对其他也碰到此类问题的有一些帮助。

pm2修改配置文件后,restart未重新加载问题解决

 pm2  pm2修改配置文件后,restart未重新加载问题解决已关闭评论
11月 092019
 

修改了pm2的配置文件,发现使用下面命令都无效,配置就是没更新:

无效命令(Invalid):
pm2 reload config.json
网上也有说用下面的命令,我这边也无效
pm2 startOrReload config.js –update-env

后来只能使用删除项目后再启动方式OK:
以下有效(valid):
pm2 delete all
pm2 restart config.json

pm2 status error 解决

 Nodejs, pm2  pm2 status error 解决已关闭评论
2月 202019
 

今天使用pm2  启动nodejs应用, 发现启动一会儿,pm2 中status状态就从online变成error, 日志也看没有什么记录, 后来发现可以通过下面的步骤解决:  pm2 update

如果彻底些,可以先kill 掉pm2的进程, 再执行pm2 update命令。

查看帮助

$ pm2 update -h

  Usage: update [options]

  (alias) update in-memory PM2 with local PM2

  Options:

    -h, –help  output usage information

通过上面命令查看,估计问题出在本机PM2的内存数据里