Articles of pm2

PM2数据采集代理占用太多的networking带宽

最近我们发现PM2 km代理不断上传数据,这个过程需要的networking带宽太大。 有没有人有任何想法呢? 如果我们手动杀死“KM代理”进程,让PM2运行没有这个过程,会有什么影响吗? 有关PM2的networking状态: 相应的过程信息: 我们在/xxx/.pm2目录下的agent.log部分: 2017-07-26 13:25:20: [WARN] Time to send data over TCP took 10.737seconds! 2017-07-26 13:25:20: [WARN] Time to send data over TCP took 9.737seconds! 2017-07-26 13:25:20: [WARN] Time to send data over TCP took 8.737seconds! 2017-07-26 13:25:20: [WARN] Time to send data over TCP took 7.733seconds! 2017-07-26 13:25:20: [WARN] Time […]

-bash:pm2:找不到命令

我曾尝试以各种方式安装它。 我仍然无法开始。 whereis pm2 pm2: /usr/bin/pm2 我在我的VPS上第一次使用CentOS6。 我真的很感谢一些帮助。 我的nodejs已经启动并正在运行。

MongoDB群集中的并发问题

我到了一个需要扩展应用程序的地步,不幸的是,当我编写应用程序时,我从来没有想过集群。 现在我遇到了一些问题,我不确定为了避免这样的问题会做些什么。 我将展示两个相当简单的代码示例: 例1: 如果我在8个实例上运行这个函数,它可能会重复select相同的configuration文件(因为它们是有序的)。 更新那些很长时间没有更新的configuration文件是有道理的,但是有没有某种“locking”可以防止其他实例在完全相同的文件上工作? // Select 100 least updated profiles and update them PlayerProfile.find().sort({ updated_at: 1 }).limit(100).then((playerProfiles) => { // Code which would update these 100 selected profiles }) 例2: 我在我的MongoDB中有1000个账号的集合,每个实例应该有100个账号。 没有实例被允许使用完全相同的帐户凭证。 如何确保运行多个实例时的情况? Account.find({}, 'player_id token').limit(this.clientQuantity).then((accounts) => { logger.info(`Using ${accounts.length} accounts from the database`) for (let i = 0; i < accounts.length; i++) […]

如何防止pm2在启动过程中出现错误时重新启动应用程序

上下文 我已经将configurationvalidation添加到组成我的Node.js应用程序的一些模块中。 当他们开始时,每个人检查它是否正确configuration,并有权访问它需要的资源(例如可以写入一个目录)。 如果它检测到有什么错误,它会向自己发送一个SIGINT(process.pid),这样应用程序就会正常closures(closureshttp服务器,closures与Redis的连接等等)。 我希望操作员在启动应用程序之前,意识到存在configuration和/或环境问题并对其进行修复。 我使用pm2开始/停止/重新加载应用程序,我喜欢事实pm2会自动重新启动它的情况下,以后崩溃,但我不希望它重新启动我的应用程序在上面的情况下,因为根本原因不会只需重新启动应用程序即可消除,所以pm2将继续重新启动max_restarts (默认为max_restarts中的10)。 题 如何防止pm2在启动过程中中止重新启动应用程序? 我知道–wait-ready有–wait-ready选项,但是由于我们正在讨论多个模块和asynchronous启动逻辑,所以我很难确定何时/何时process.send('ready') 。 可能的scheme 我正在考虑让我的所有模块发出一个内部的“准备好”事件,并把所有连接“准备好”事件的事情连接起来,最终能够将“准备好”发送给pm2,但是我想先问一下,有点过于工程。 谢谢, 罗杰

传递–node-args – 用进程文件检查pm2

我目前正在使用pm2和一个进程文件: pm2 start ecosystem.config.js 我想传入–inspect标志来启动节点检查器。 但是,这样做不起作用: pm2 start ecosystem.config.js –node-args="–inspect" 此页面http://pm2.keymetrics.io/docs/usage/application-declaration/#considerations提及 所有使用JSON应用程序声明时传递的命令行选项将被删除,即 这是这不起作用的原因。 有谁知道为什么? 有没有办法传入–inspect标志而不将其添加到进程文件? 我知道,将node_args属性添加到进程文件工作。 我想弄清楚是否有办法让CLI选项工作。

PM2端口号表示应用程序

ecosystem.config.js module.exports = { /** * Application configuration section * http://pm2.keymetrics.io/docs/usage/application-declaration/ */ apps : [ // First application { name : 'cms_stage', script : 'www', env: { COMMON_VARIABLE: 'true', PORT: 3001, NODE_ENV: 'staging' } } ] } 我有一个快速的应用程序,当我开始与PORT=3001 node www ,它的工作原理。 但是与pm2上面的configuration它不。 pm2节目开始,但它不听3001 我尝试运行PORT=3001 pm2 start cms_stage , pm2 start cms_stage和PORT=3001 pm2 start cms_stage pm2 […]

PM2 Heroku部署无法启动应用程序

我按照这里的方向: http : //pm2.keymetrics.io/docs/usage/use-pm2-with-cloud-providers/ 尝试将testing应用推送到heroku并获取错误消息: [PM2] Spawning PM2 daemon with pm2_home=/app/.pm2 2017-12-04T22:35:51.928946+00:00 app[web.1]: [PM2] PM2 Successfully daemonized 2017-12-04T22:35:51.955730+00:00 app[web.1]: [PM2][ERROR] script not found : /app/dist/server.js 2017-12-04T22:35:51.955882+00:00 app[web.1]: script not found : /app/dist/server.js 在我的package.json中: "scripts": { "preinstall": "npm install pm2 -g", "start": "pm2 start ./dist/server.js -i 1 –attach" } 这是文件夹结构: 我可以通过npm start在本地npm start 。 任何想法或线索为什么发生这种情况?

pm2中AWESOME_SERVICE_API_TOKEN的含义是什么?

pm2 json应用程序声明有一个env条目如下 "env": { "NODE_ENV": "production", "AWESOME_SERVICE_API_TOKEN": "xxx" } AWESOME_SERVICE_API_TOKEN是什么意思?

使用PM2运行一个完整的开发环境

我正在使用PM2来运行我的Node微服务,而且在开发中我也想启动MongoDB,这样我就可以用一个命令启动并运行开发。 我有一个像这样的开发ecos.js文件: apps: [ { name: 'API', script: 'index.js', out_file: './logs/api.stdout.log', error_file: './logs/api.stderr.log' }, { name: 'Emailer', script: 'services/emailer/index.js', out_file: './logs/emailer.stdout.log', error_file: './logs/emailer.stderr.log' }, { name: 'MongoDB', script: 'services/development/mongodb.sh' } ] 和mongodb.sh看起来像这样: #!/bin/bash mongod 当我启动PM2时,一切都运行良好。 当我打电话pm2 stop all ,它杀死节点进程,但不杀死MongoDB。 我猜这是因为它附加到bash实例,而不是mongod实例。 有没有办法使PM2启动并附加到可执行文件,而不是脚本文件?

节点在重新启动之前如何删除pid文件?

我使用PM2pipe理节点进程,我试图在重启之前删除每个节点的pid文件,但似乎每次都不行。 这是我的代码: process.on('SIGTERM', function() { fs.unlink('./log/' + process.pid); }); 有时候它可以正常工作,有时候一些旧的pid文件仍然存在。