# pm2-plus **Repository Path**: gaoyuqiao/pm2-plus ## Basic Information - **Project Name**: pm2-plus - **Description**: No description available - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-05-26 - **Last Updated**: 2024-06-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README pm2 流程 启动 pm2 实例化 ./lib/api.js //pm2 实例化 实例化 ./lib/client.js // 实例化 client 调用 api.connect; -> client.start() -> client.launchDaemon(); //建立 client 和 daemon 的 rpc 链接. 同时启动 interact daemon , daemon 管理所有进程,并且依赖 God. 比如异常重启,启动新进程.delete, client 和 daemon 交互. 并且管理 删除 pm2 实例(kill) 然后执行 pm2 startOrGracefulReload ./pm2.json 首先通过 rpc 向 daemon 获取进程信息.(存在,不存在.) 获取服务入口,执行 God.prepare -> God.executeApp(env) . 开启新进程.(./lib/god.js) 区分是 cluster (cluster.fork) 还是 fork (spawn) -- 产生的一个子进程都监听消息,然后通过 God.bus 通知 God.(./lib/god/clusterMode.js) RPC 关系 rpc 通信关系1 ./lib/God/ClusterMode.js nodeApp方法 fork 出新进程,开启服务. 监听所有进程消息,通过 God.bus.emit 全部广播出去. daemon.startLogic() 方法调用 God.bus 监听所有 god 事件.处理事件后,通过 rpc 通知给 pushInteractor,并发送到远端服务器 daemon 和 pushInteractor 建立 rpc 通信. 通过DAEMON_PUB_PORT 变量建立 pub sub. (pushInteractor 通过 ./lib/interactor/pm2-interface.js 与 daemon 建立连接) rpc 通信关系2 client 和 daemon 建立 rpc 通信. 以DAEMON_RPC_PORT 为端口建立的 rpc daemon 建立 rpc server 监听. client 链接到 rpc , pingDaemon 函数内使用,检测 daemon 是否为存活状态. ./lib/interactor/pm2-interface.js 连接 rpc .,pushInteractor 的 preparePacket 方法 通过 rpc 通信 获取进程信息. (this.ipm2.rpc.getMonitorData) rpc 通信关系3 通过 INTERACTOR_RPC_PORT 建立连接的; ./lib/interactor/daemon.js start 方法. 建立 rpc server. 并且通过 activateRPC 方法, expose 出去三个方法. kill,passwordSet,getInfos.给客户端调用. ./lib/interactorDeamonizer.js 通过 ping 检测 interactor/daemon.js 是否已经存在. 日志如何通过 process stdIn 到达远端上报(默认只有进程异常才会上报,目前需要上报 node 进程 gc 信息,需要改写代码.) 1. ./lib/ProcessContainer.js => process.stdout.write() 通过 ipc通信 通知 父进程 ./lib/God/ClusterMode.js => nodeApp() . 2. 父进程 通过 God.bus.emit 通知 ./lib/daemon.js(监听了 God.bus 消息) . 3. 后者 通过 tcp 管道 通知给 ./lib/Interactor/PushInteractor.js => listenToPM2Events() . 完成上报. 所有 rpc 方法见: daemon.js -> server.expose 版本历史: #v2.4.5 实现截取 Pm2 消息 #v3.0.1 实现远端服务器与 pm2 互相通信 #3.0.2 实现获取 nodejs 进程 GC 全部信息. #3.0.3 实现获取 逆优化函数 信息收集