egg框架内置了egg-cluster,来启动Master进程,Master有足够的稳定性,不再需要使用pm2等进程守护模块。安装egg的时候会将egg-cluster安装好。

框架同时提供了egg-scripts来支持线上环境的运行和停止,但需要在 package.json 的dependencies中引入。

egg-scripts start // 开启应用
egg-scripts stop  // 停止应用

开启应用的时候可以通过 --workers=xx 指定框架worker线程数,默认会创建和CPU核数相等的app worker数,以充分利用CPU资源。

// 查看node进程
ps -ef | grep wechat
ps -eo "pid,command" | grep wechat

我们知道JavaScript代码是运行在单线程上的,一个Node.js进程只能运行在一个CPU上,如何利用上多核CPU的并发优势那?

Node.js官方提供的解决方案是Cluster模块,用户可以通过集群化模块很方便地创建子进程,那Cluster是什么那?

  • 在服务器上同时启动多个进程。
  • 每一个进程里跑的是同一份源代码(类似把以前的一个进程的工作分给多个进程来做)。
  • 这些进程可以同时监听一个端口。

其中:

  • 负责启动其他进程的叫做Master进程,不做具体的工作,只负责启动其他进程
  • 其他被启动的进程叫Worker进程,它们接收请求,对外提供服务
  • Worker进程的数量一般根据服务器的CPU核数来定,以充分利用多核资源

一般来说,Node.js进程退出可以分为以下两类:

  1. 未捕获异常

当代码抛出了异常没有被捕获到时,进程将会退出,Node提供了process.on('uncaughtException', handler)接口来处理它,但是当一个Worker进程遇到“未捕获进程”时,它已经处于一个不确定状态,此时我们应该将其优雅退出:

  • 关闭异常Worker进程的所有的TCP Server,断开与Master的IPC通道,且不再接收新的用户请求。
  • Master立刻fork出一个新的Worker进程,保证在线的进程总数不变。
  • 异常Worker等待一段时间,处理完已接收的请求后退出。

2. OOM、系统异常

当一个进程出现异常导致crash或者OOM(out of memory)被系统杀死时,不像未捕获异常发生时我们还有机会让进程继续执行,只能够让当前进程直接退出,Master立即fork出一个新的Worker。

Agent机制

后来我们发现,有些工作其实不需要每个 Worker 都去做,如果都做,一来是浪费资源,更重要的是可能会导致多进程间资源访问冲突。比如:日志定时归档。

所以,对于这一类后台运行的逻辑,我们希望将它们放到一个单独的进程上去执行,这个进程就叫 Agent Worker,简称 Agent。

当一个应用启动时,会同时启动三类进程,如下所示:

  • Master

在这个模型下,Master 进程承担了进程管理的工作(类似pm2),不运行任何业务代码,我们只需要运行起一个 Master 进程它就会帮我们搞定所有的 Worker、Agent 进程的初始化以及重启等工作了。Master 进程的稳定性是极高的,不再需要使用pm2等进程守护模块。

  • Agent

在大部分情况下,我们在写业务代码的时候完全不用考虑 Agent 进程的存在,但是当我们遇到一些场景,只想让代码运行在一个进程上的时候,Agent 进程就到了发挥作用的时候了。

  • Worker

Worker 进程负责处理真正的用户请求和定时任务的处理。而 Egg 的定时任务也提供了只让一个 Worker 进程运行的能力,所以能够通过定时任务解决的问题就不要放到 Agent 上执行

Worker 运行的是业务代码,相对会比 Agent 和 Master 进程上运行的代码复杂度更高,稳定性也低一点,当 Worker 进程异常退出时,Master 进程会重启一个 Worker 进程。

iis worker process cpu 高_egg中的master、worker和agent相关推荐

  1. java cpu高_Java中的CPU占用高和内存占用高的问题排查

    下面通过模拟实例分析排查Java应用程序CPU和内存占用过高的过程.如果是Java面试,这2个问题在面试过程中出现的概率很高,所以我打算在这里好好总结一下. 1.Java CPU过高的问题排查 举个例 ...

  2. Nginx源码分析:master/worker工作流程概述

    nginx源码分析 nginx-1.11.1 参考书籍<深入理解nginx模块开发与架构解析> Nginx的master与worker工作模式 在生成环境中的Nginx启动模式基本都是以m ...

  3. VISTA IIS Worker Process 已停止工作 解决办法

    刚装的Vista,并按勾选了IIS安装选项,我的网站在IIS5和IIS6下运行没有问题,放到IIS7就经常弹出 IIS Worker Process 已停止工作 问题签名:   问题事件名称: APP ...

  4. 查看进程中占cpu高的线程方法

    当在任务管理器中发现有进程占用cpu过高的时候通过下面的指令将进程快照导出到c盘 jstack -l 进程PID > c:/进程PID.stack  (此命令生成.stack文件在c盘中,用文本 ...

  5. 解决 IIS Worker Process 内存占用达到99%的问题

    解决 IIS Worker Process 内存占用达到99%的问题 参考文章: (1)解决 IIS Worker Process 内存占用达到99%的问题 (2)https://www.cnblog ...

  6. 实战课堂:系统CPU高消耗的SQL筛选和最佳索引优化

    在一次客户系统性能优化项目中,经过第一阶段的优化之后,数据库的DB Time和物理读都明显降低,但是我们发现CPU并没有明显降低. 对此,我方针对占用CPU较高的SQL进行了分析,并继续寻找优化空间. ...

  7. java排错_java排错之CPU高

    青铜步骤: 从TOP命令的结果查找CPU高的进程 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 7916 root 20 0 703208 ...

  8. Expert 诊断优化系列------------------你的CPU高么?

    现在很多用户被数据库的慢的问题所困扰,又苦于花钱请一个专业的DBA成本太高.软件维护人员对数据库的了解又不是那么深入,所以导致问题迟迟不能解决,或只能暂时解决不能得到根治.开发人员解决数据问题基本又是 ...

  9. python在服务器上运行慢_Windows监控进程服务器IIS进程状态解决CPU暴满造成服务器运行缓慢 Python版...

    之前写了bat脚本来解决服务器IIS进程造成CPU暴满状态之后感觉不胜满意,且不效率.后发现用Python的脚本比bat高效且安全不会存在误杀现象,现将其分享与大家其程序和源码我放在了百度网盘,如果有 ...

最新文章

  1. Mvc多级Views目录 asp.net mvc4 路由重写及 修改view 的寻找视图的规则
  2. Cannot open D:\Program Files\Anaconda3\Scripts\pip-script.py
  3. 将word文档按分页另存为多个word文件的VBA代码
  4. 第一次接送宝贝去幼儿园
  5. 深入理解C++类的构造函数与析构函数
  6. jsp servlet中的过滤器Filter配置总结(转)
  7. ELJSTLMVC模式
  8. 白萝卜梨汤止咳防感冒
  9. 突然发现foxmail原来是腾讯的
  10. windows上三款能打开超大文本的工具比较:Large Text File Viewer+PilotEdit+LogView
  11. 项目管理办公室(PMO) 的不同定位
  12. IObit Uninstaller(卸载工具) v10.0.2.20
  13. vbmsgbox引用变量_vb中msgbox用法
  14. Gentoo 完整的USE参数清单中文详解(转)
  15. 电路之KCL和KVL的独立方程数总结
  16. iTween插件使用整理
  17. 好用的工具推荐一下js美化代码
  18. 刷步恢复使用Unv0ver6.0.1工具已签名,附在线安装地址!
  19. 涉密计算机等级台账,保密工作台账的.doc
  20. 一个类似JQuery的精简版框架

热门文章

  1. R语言使用ggplot2可视化堆叠条形图,并在堆叠条形图上显示数据值实战
  2. R语言distVincentySphere函数计算大圆距离实战(Great Circle Distance)
  3. R语言colSums函数、rowSums函数、colMeans函数、rowMeans函数、colMedians函数、rowMedians计算dataframe行或者列的加和、均值、中位数实战
  4. 降维的定义、维度诅咒、降维的意义
  5. 基于变分自动编码器(Variational Autoencoders)进行推荐系统的实施、Keras实现并可视化训练和验证误差、最后给出topK准确率和召回率
  6. java中的常用的文件流_Java 基础(四)| IO 流之使用文件流的正确姿势
  7. 复杂基因组测序技术研究进展
  8. Pacbio 数据相关的几个重要概念
  9. linux执行cli文件,linux – 如何“撤消”在终端/ CLI中执行的“解压缩”?
  10. 编译phonetisaurus时configure找不到openfst的问题解决