一、日志

1、pm2 的log怎么查看?(安装pm2后默认日志的路径为~/.pm2/),可以通过pm2 show (name)来查看某个进程下的日志地址

2、修改日志的输出路径,通过写一个程序启动的配置文件apps.yml,在里面可以设置日志的输出地址,输出文件,已经输出的格式。例如:

apps:
  - script : ./app.js
    name : 'loginServer'
    instances: 2
    cwd: /var/service/ACServer/LoginServer
    max_memory_restart: 1G     //  内存超过1G之后自动重启
    exec_mode: cluster
    #log_date_format: "YYY-MM-DD HH:mZ" // 配置日志的输出格式
    #error_file: "/var/data/loginLogs/pm2logs/loginErr.log" 配置out日志的输出文件名
    #out_file: "/var/data/loginLogs/pm2logs/loginOut.log"

3、清楚(pm2 flush)与重载日志(pm2 reloadLogs)

二、开机自启 nodejs 服务器

启动想开机启动的项目 pm2 start app.js
保存 pm2 save
开机设置 pm2 startup centos
chmod +x /etc/init.d/pm2-init.sh
chkconfig –add pm2-init.sh

三、pm2-logrotate进行日志分割

使用pm2-logrotate进行日志管理使得我们的node服务的log以及pm2的log能够得到控制,防止log过多导致把磁盘刷爆。pm2-logrotate配置看官网,需要注意的是设置retain参数,来限制日志文件数

pm2 set pm2-logrotate:retain 10

四、pm2 monit命令监控你的内存和CPU

五、异常问题

今天在跑程序的时候pm2 突然报如下错误:

C:\server\MobileServer>pm2 start apps.yml
[PM2][WARN] Applications MobileAPI, MobileMapReduce not running, starting...
C:\Users\Administrator\AppData\Roaming\npm\node_modules\pm2\lib\API.js:1031
intOut(conf.PREFIX_MSG + 'App [%s] launched (%d instances)', data[0].pm2_env.n
^
TypeError: Cannot read property 'pm2_env' of undefined
at C:\Users\Administrator\AppData\Roaming\npm\node_modules\pm2\lib\API.js:1031:86
at C:\Users\Administrator\AppData\Roaming\npm\node_modules\pm2\node_modules\pm2-axon-rpc\lib\client.js:45:10
at Parser.<anonymous> (C:\Users\Administrator\AppData\Roaming\npm\node_modules\pm2\node_modules\pm2-axon\lib\sockets\req.js:67:8)
at Parser.emit (events.js:107:17)
at Parser._write (C:\Users\Administrator\AppData\Roaming\npm\node_modules\pm2\node_modules\pm2-axon\node_modules\amp\lib\stream.js:91:16)
at doWrite (_stream_writable.js:301:12)
at writeOrBuffer (_stream_writable.js:288:5)
at Parser.Writable.write (_stream_writable.js:217:11)
at Socket.ondata (_stream_readable.js:540:20)
at Socket.emit (events.js:107:17)

按照报错信息应该是:pm2 环境设置问题。

通过pm2 在github上的issue找到了解决方案,地址如下:

https://github.com/Unitech/pm2/issues/2154

只需要运行下:pm2 update 然后重启服务就可以了。

六、log4js中关于pm2的设置

在pm2zhongoing使用log4js需要对log4js的配置文件进行设置,这里主要参见官方文档:https://log4js-node.github.io/log4js-node/api.html

具体demo配置如:

const logConfig =  appenders: {
console: {
type: 'console'
},
file: {
type: 'file',
filename: './logs/application.log',
maxLogSize: 104800,
backups: 100
},
date_file: {
type: 'dateFile',
filename: "./logs/date",
alwaysIncludePattern: true,
pattern: "-yyyy-MM-dd.log"
}
},
categories: {
default: {appenders: ['console'], level: 'info'},
errorLog: {appenders: ['console', 'file', 'date_file'], level: 'error'}
},
// 关于pm2的设置
pm2: true,
disableClustering: true
}; module.exports = logConfig;

前不久在测试服上开启一个进程的时候没加disableClustering参数,后来开启多进程之后发现只有第一个进程能看到正常的log4js的log,而其他进程则没有,回来阅读api,设置disableClustering:true。这样

每个进程的log就出现了。

七、是否需要nginx

nginx可以做的事情主要有两个:

1、反向代理,实现简单的负载均衡: 如果有多台服务器或者一台服务器多个端口,可以考虑用nginx。

2、静态资源缓存:把一些静态资源(如静态页面,js等资源文件)放到nginx里,可以极大的提高服务的性能。

参考:https://github.com/jawil/blog/issues/7/

使用pm2常见问题的更多相关文章

  1. Nuxt.js的踩坑指南(常见问题汇总)

    本文会不定期更新在nuxt.js中遇到的问题进行汇总.转发请注明出处,尊重作者,谢谢! 强烈推荐作者文档版踩坑指南,点击跳转踩坑指南 在Nuxt的官方文档中,中文文档和英文文档都存在着不小的差异. 1 ...

  2. NodeJs之pm2

    pm2 pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能. 开发过程中建议时不时的参看官方详细命令行使用:命令行 pm2 ...

  3. C++常见笔试面试要点以及常见问题

    1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...

  4. Node.js使用PM2的集群将变得更加容易

    介绍 众所周知,Node.js运行在Chrome的JavaScript运行时平台上,我们把该平台优雅地称之为V8引擎.不论是V8引擎,还是之后的Node.js,都是以单线程的方式运行的,因此,在多核心 ...

  5. 自建git node pm2 (不赘述,就说遇见的问题)

    //======================[git]部分 主题部分还是按照网上的办法进行安装. 安装的话  分为两个办法(一个是yum (contos办法)  或者sudo(ubuntu办法) ...

  6. SQL Server常见问题介绍及快速解决建议

    前言 本文旨在帮助SQL Server数据库的使用人员了解常见的问题,及快速解决这些问题.这些问题是数据库的常规管理问题,对于很多对数据库没有深入了解的朋友提供一个大概的常见问题框架. 下面一些问题是 ...

  7. 【腾讯优测干货分享】如何降低App的待机内存(二)——规范测试流程及常见问题

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/806TiugiSJvFI7fH6eVA5w 作者:腾讯TMQ专项测 ...

  8. mysql数据库开发常见问题及优化

    mysql 数据库是被广泛应用的关系型数据库,其体积小.支持多处理器.开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高.在使用 mysql 的过程中不规范的 SQL 编写.非最优的 ...

  9. 《PDF.NE数据框架常见问题及解决方案-初》

    <PDF.NE数据框架常见问题及解决方案-初> 1.新增数据库后,获取标识列的值: 解决方案:    PDF.NET数据框架,已经为我们考略了很多,因为用PDF.NET进行数据的添加操作时 ...

随机推荐

  1. TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!

    /** * * @author ocq */ class Parent implements Comparable { private int age = 0; public Parent(int a ...

  2. 反射中 GetCustomAttributes

    public abstract object[] GetCustomAttributes(bool inherit); 这是GetCustomAttributes方法的一个重载,参数为bool类型返回 ...

  3. 用JSON-server模拟REST API(一) 安装运行

    用JSON-server模拟REST API(一) 安装运行 在开发过程中,前后端不论是否分离,接口多半是滞后于页面开发的.所以建立一个REST风格的API接口,给前端页面提供虚拟的数据,是非常有必要 ...

  4. sql数据库批量替换dedecms内容关键字

    之前写了一篇dedecms后台批量替换文章中的关键词,这边我们介绍一下用sql数据库批量替换dedecms内容关键字,当然要求你对数据库比较熟悉,修改前请自行做好备份. 1.更改文章中的内容 upda ...

  5. shell kill掉含同一字符的关键字的进程

    如何kill掉进程名包含某个字符串的一批进程:kill -9 $(ps -ef|grep 进程名关键字|gawk '$0 !~/grep/ {print $2}' |tr -s '\n' ' ') 观 ...

  6. 淘宝(阿里百川)手机客户端开发日记第八篇 Handler的使用方法

    首先,我们先看下API文档的说明: A Handler allows you to send and process Message and Runnable objects associated w ...

  7. Sort List

    采用归并排序,通过定义快.慢两个指针来找到中点,再采用之前的排序算法进行归并. ListNode *listSort(ListNode *head) { //定义快慢指针,找到链表中心 ListNod ...

  8. BZOJ 1452 [JSOI2009] Count

    这道题好像有点简单的样子... absi找题目好厉害啊...确实是一道比较裸的2dBIT啊. 水掉吧. 附:2dBIT怎么做: 2dBIT就是BIT套BIT啦. 所以修改loop(x+=lowbit( ...

  9. Android自定义dialogdemo

    很多时候,我们需要自己去定义dialog,目前我们就遇见了这样一个需求,我的想法是自己定义一个dialog,如果有list的话就使用listview,如果有msg的话就使用msg,并且取消和确定按钮也 ...

  10. vista/win7/win8区别

    1. Vista的内核版本号是:Windows 6.0:         Windows 7的内核是:Windows 6.1:         Windows 8的内核是:Windows 6.2   ...