pm2自身成为性能瓶颈
现象:
pm2占用CPU达到100%,但是pm2管理的进程占用的CPU在50%-60%,从而导致pm2分发成为性能瓶颈;
因为nodejs测试代码结构很简单,处理请求的速度过快,从而导致当pm2管理的子进程达到CPU使用率50%-60%的时候,PM2占用的CPU就达到100%了,发送的请求pm2进程就转发不过来了。
服务器说明:
CPU:32核
内存:64G
pm2集群启动实例配置:
[root@elk-sdzx express_example]# cat /opt/shell/process.json
{
apps : [{
name : "express_example",
cwd : "/www/express_example",
script : "./bin/www",
instances : 32,
exec_mode : "cluster",
log_type : "json",
error_file : "/www/pm2_run/log/express_example-err.log",
out_file : "/www/pm2_run/log/express_example-out.log",
combine_logs: true,
max_memory_restart : "512M",
pid_file : "/www/pm2_run/pid/express_example.pid",
env : {
"NODE_ENV": "production",
"PORT": 8080
},
watch : false
}]
}
压测命令:
ab -c 30 -n 500000 http://127.0.0.1:8080/
ab -c 36 -n 500000 http://127.0.0.1:8080/
ab -c 40 -n 500000 http://127.0.0.1:8080/
并发为40的时候pm2的CPU就100%了。
解决办法:
降低单个nodejs进程的请求处理速度,把原来循环100次改成了1000次。
理解分析总结:
其实pm2进程和它管理的业务进程性能是相对的,这里的nodejs代码只是为了测试nodejs性能而写的,没有调用任何其他http接口或者第三方接口及中间件,导致单个nodejs进程处理请求的速度很快,从而容易造成pm2进程变成性能瓶颈。而相反的,如果降低了nodejs进程的请求处理速度,那么相对的,pm2转发请求的速度就会造成nodejs进程跑满CPU,而即使所有的nodejs进程都跑满了CPU,但pm2进程依然没有跑满CPU。
以下为计算示例:
示例1:
假设pm2进程每秒转发10W个请求是上限,这个时候其CPU使用率会达到100%;
每个nodejs进程每秒处理10000个请求是上限,这个时候其CPU使用率达到100%;
场景:
启动32个nodejs进程,也就是说每秒最多处理320000个请求可以把机器的32颗CPU都跑到100%;但是,在这种情况下,pm2会率先占满CPU称为性能瓶颈,从而导致nodejs进程始终跑不满CPU。
计算如下:
当pm2跑满CPU时,转发请求的速度为100000/s;
基于轮询负载均衡算法,算出:每个nodejs进程由pm2分配请求的速度为3125/s。所以每个nodejs占用的CPU为3125/10000=31.25%左右。从而无论怎么增加压测并发和请求数,nodejs的CPU也是压不上去的。
示例2:
假设pm2进程每秒转发10W个请求是上限,这个时候其CPU使用率会达到100%;
每个nodejs进程每秒处理1000个请求是上限,这个时候其CPU使用率达到100%;
场景:
启动32个nodejs进程,也就是说每秒最多处理32000个请求可以把机器的32颗CPU都跑到100%;但是,在这种情况下,nodejs进程所占用的CPU会率先成为性能瓶颈。
计算如下:
当32的nodejs进程都跑满CPU时,处理请求的速度为32000/s;
此时,pm2进程占用的CPU使用率为32000/100000=32%左右,也就是说这个时候nodejs代码成了性能瓶颈。pm2的CPU使用率最大也就32%左右;
pm2自身成为性能瓶颈相关推荐
- nodejs pm2使用
pm2特点 1.简单方便,部署快. 2.解决nodejs单线程缺点 3.完善的日志 pm2安装及使用 1.安装 npm install -g pm2 2.启动 查看版本 pm2 start app.j ...
- 动态执行流程分析和性能瓶颈分析的利器——gperftools的Cpu Profiler
在<动态执行流程分析和性能瓶颈分析的利器--valgrind的callgrind>中,我们领略了valgrind对流程和性能瓶颈分析的强大能力.本文将介绍拥有相似能力的gperftools ...
- 动态执行流程分析和性能瓶颈分析的利器——valgrind的callgrind
在<内存.性能问题分析的利器--valgrind>一文中我们简单介绍了下valgrind工具集,本文将使用callgrind工具进行动态执行流程分析和性能瓶颈分析.(转载请指明出于brea ...
- 线性回归预测PM2.5值
文章目录 一.问题描述 二.设计简要描述 三.程序清单 四.结果分析 五.调试报告 六.实验总结 一.问题描述 希望用线性回归解决问题: 给定某个地区连续9小时包括PM2.5在内的18项污染物每小时的 ...
- 系统、应用监控的缜密思路,性能瓶颈的克星
欢迎关注方志朋的博客,回复"666"获面试宝典 在实际的性能分析中,一个很常见的现象是,明明发生了性能瓶颈,但当你登录到服务器中想要排查的时候,却发现瓶颈已经消失了.或者说,性能问 ...
- 标量子查询产生的SQL性能瓶颈,该怎么合理优化?
来自:DBAplus社群 作者介绍 郝昊喆,新炬网络数据库专家.擅长数据库方面的开发.整体架构及复杂SQL的调优,参与了多个行业核心系统的优化工作,目前专注于对开源技术.自动化运维和性能调优技术的研究 ...
- 深度学习时间序列预测:卷积神经网络(CNN)算法构建单变量时间序列预测模型预测空气质量(PM2.5)+代码实战
深度学习时间序列预测:卷积神经网络(CNN)算法构建单变量时间序列预测模型预测空气质量(PM2.5)+代码实战 神经网络(neual networks)是人工智能研究领域的一部分,当前最流行的神经网络 ...
- 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战
深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战 # 导入需要的包和函数: from __future__ import print_function im ...
- Nodejs教程30(完结):PM2入门
系列文章请访问我的GitHub博客,示例代码请访问这里. PM2简介 PM2是常用的node进程管理工具,它可以提供node.js应用管理,如自动重载.性能监控.负载均衡等.同类工具有Supervis ...
最新文章
- iOS APP提交上架最新流程
- 看不见的攻击面:查看 SQLite 数据库就中招?
- Oracle 11g新特性之--虚拟列(Virtual Column)
- Java反射是什么?看这篇绝对会了!
- 【css】怎么让Chrome支持小于12px 的文字
- 如何系统学习机器学习?
- linux 性能监视命令
- 超详细!一文告诉你 SparkStreaming 如何整合 Kafka !附代码可实践
- Centos7.2 域名解析 /etc/resolv.conf 被覆盖
- UVAPOJ离散概率与数学期望入门练习[4]
- Java语言中几个常用的包
- 计算机专业为什么要学线性代数,为什么要学线性代数
- 周志华《机器学习》习题3.4——用UCI数据集比较10折交叉验证法和留一法
- 高中计算机会考教案,高中信息技术会考模拟试题讲课教案.pdf
- 原生js 实现小人吃豆豆小游戏
- 初探Linux--鸟哥私房菜读书笔记
- 《苏菲的世界》读书笔记之一:自然派哲学家
- TB6612FNG与直流电机控制教程
- Android网络编程基础(第一弹)
- htmla标签下划线去除_html超链接的下划线怎么去掉?a标签去下划线的方法都在这里...