pm2管理的node进程名被截断

问题

topps 命令中,显示的路径不完全,如应该显示:

node /nodejs/script/path

却显示:

node /nodejs/script/pa

原因

  1. 首先明确这不是 topps 显示的问题
  2. node在v0.8以前支持通过uv_set_process_title()方法覆盖系统的environ变量来生成进程名称
  3. 由于系统原因,这种方式不安全也不一定有效,在之后的node版本中便不再支持这种方式
  4. 现在,进程名称长度被限制为 二进制名称长度 + 参数长度

现象

如一个js脚本绝对路径为:/tmp/server.js

$ cd /tmp
$ pm2 start ./server.js --name myapp1 -- arg1 arg2

进程名长度被限制为:len("/tmp/server.js") + len(" arg1 arg2") = 24
在ps中会显示为:

root      5370     1  0 Apr06 ?        00:00:28 node /tmp/server.js

如果不添加参数:

$ cd /tmp
$ pm2 start ./server.js --name myapp2

进程名长度被限制为:len("/tmp/server.js") + len("") = 14
在ps中会显示为:

root      5370     1  0 Apr06 ?        00:00:28 node /tmp/serv

因为 len("node /tmp/serv") = 14

注意,如果使用ecosystem.config.js来启动,里面配置的参数貌似不会增加参数长度,而如果用pm2直接启动js脚本,所传递的参数是生效的(如上所示)

解决

如果不想使用pm2默认返回的进程名称,可以通过设置PROCESS_TITLE来自定义较短的进程名称

设置方法有两种:

1. $ export PROCESS_TITLE="xxxxx" && pm2 start myscript.js --env production
2. 在ecosystem.config.js里的env_production字段里添加`PROCESS_TITLE: "xxxxxxx"`

参考链接:

https://github.com/Unitech/pm2/issues/3749
https://nodejs.cn/api/process/process_title.html
https://github.com/nodejs/node-v0.x-archive/issues/5006

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值