PHP-php-fpm占用系统资源分析
1.别的先不管,先top看一下cpu、ram、swap哪个比较紧张。
由上图分析,可以看出共有602个进程,其中有601个进程休眠了。这好像有点不对劲,内核进程也就80个左右,加上memcached, nginx, mysqld,也不会超出90个。除了这些,剩下的只有php-fpm管理的php-cgi,难道是…?
CPU显示,CPU压力并不大,可以说没有压力。我们再看内存使用概要,发现4G的内存,消耗得所剩余无几(free+buffers),
95%以上的内存都已分配。交互空间使用情况,我们暂时不去关心。指令top还列出了占用资源最多的进程,运行时间最久(Time+)的mysqld(约
2小时)占用资源并不是最多。另外,再看php-cgi,单个php-cgi占用的内存也不算多。所以,可以大胆地猜想:服务器内存资源比较紧张,并没有
被某个进程占用大量内存,有可能被某些挂起的进程占着内存没有释放。通过free进一步监控内存使用情况,验证我们的想法。
2.指令free,了解RAM资源使用情况。当然,你也可以查看文件/proc/meminfo
我们先来看Mem统计信息,total表示物理内存总量,约4G。used,表示已分配内存,分配了并不表示使用了,包括 (buffer&cached)。free指未分配的内存,buffers与cached表示分配了但还没有被使用的内存。第二行 (buffers/cache)的,used表示真正被使用了内存,由第一行的(used-buffer-cached)得到,free则表示还没有被使 用的内存,由第一行的(free+buffer+cached)得到。Swap行则表示内存交换使用情况,少量的(不频繁地)swpd,是不会影响服务器 性能的,因为系统需要将V类型的内存页面交换出去或者调整了buffer与cached的大小。但是频繁地swpd,则有可能意味着服务器物理内存不足, 小于指定的swap额定值,需要换出内存页。
查看free结果的时候,我们主要查看第二行。一眼就能看出4G的内存,其中有3898M内存被用了,还有49M内存没有,都快用完了。这也证实了我们第 一步的猜想,内存被用完。这里,我们进一步猜想,内存空间严重不足的情况下,进程会被blocked,系统会不断地将不用的数据换出so,将要用的数据读 入si。我们能通过vmstat进一步验证,我们的这个猜想。
3.指令vmstat监控内存使用情况
作为对内存监控,我们比较关心swpd、free、si、so。一般系统不繁忙的状态下,我们看到swpd,so的值不会持续很高,经常为0。这里,我们 看到swpd值为1.5G,以及free值很小,再一次表明物理内存不足。其中si报告了每秒从swap区移入到物理内存的内存总量,so报告了每秒从物 理内存移出到swap区的内存总量。当然,si有时较大,并不要过份的焦虑,经常碰到一个程序需要较大内存来读写媒体文件时,si值就会变大。反倒是 so,它通常是一个内存紧缺的一个信号,如果长时间这个值一直保持较大的话,则很有可能内存不够,小额波动,可以不用理会。接下来,可以通过ps找出消耗 内存的元凶。
4.指令ps找出消耗内存的元凶
[root@localhost ~]# ps -A --sort -rss -o comm,pmem,pcpu |uniq -c |head -
COMMAND %MEM %CPU
mysqld 0.6 0.0
php-cgi 0.3 0.0
php-cgi 0.2 0.0
php-cgi 0.1 0.0
php-cgi 0.0 0.0
memcached 0.0 0.0
sshd 0.0 0.0
nginx 0.0 0.0
sshd 0.0 0.0
nginx 0.0 0.0
bash 0.0 0.0
nginx 0.0 0.0
sshd 0.0 0.0
nginx 0.0 0.0
指令ps比较常用,也比较简单。上面报告结果,我们一眼就可以命中php-cgi这个进程。虽然单个php-cgi占用内存并不算太大,但是503 个php-cgi进程,就有点恐怖了。几乎占尽了全部内存(503*0.3%)。我们可以猜想,php-cgi由php-fpm管理,是不是可以php- fpm的某个参数配置不当,导致打开过多的php-cgi进程。
5.设置php-fpm进程数量管理
通过重新将php-conf.conf的max_children值设置为150,系统内存又恢复到正常使用情况。free、si、so、b均表示内存系统资源正常,没有压力。
php-cgi进程释放的内存并不会被系统立即回收,一个php-cgi大概占用20kb内存(取决于你加载的php extensions)。所以,有必要限制你启动的php-cgi进程数量。那么,这个数量多少合适呢,你可以在服务器高峰期通过top统计出php- cgi数量。也可以像php-fpm建议的那样,通过netstat -np | grep 127.0.0.1:9000来收集数据,通过设置max_children使等待的数量尽量小
6.一个php-cgi占用多少内存
一个php-cgi进程,大概占用多少内存呢,大概是20MB。可以通过pmap指令查看哪些地方占用了内存。所以,尽量不要加载不必要的php扩展模块,可以减少不必要的内存浪费。
[root@localhost etc]# pmap $(pgrep php-cgi |head -)
: /usr/local/php/bin/php-cgi –fpm –fpm-config /usr/local/php/etc/php-fpm.conf
6680K r-x– /usr/local/php/bin/php-cgi
0000000000c86000 268K rw— /usr/local/php/bin/php-cgi
0000000000cc9000 56K rw— [ anon ]
2240K rw— [ anon ]
0000003efd200000 112K r-x– /lib64/ld-2.5.so
…….
00002ac28a7a5000 2048K —– /usr/local/php/lib/php/extensions/no-debug-non-zts-/xhprof.so
00002ac28a9a5000 4K rw— /usr/local/php/lib/php/extensions/no-debug-non-zts-/xhprof.so
00002ac28a9a6000 84K r-x– /usr/local/php/lib/php/extensions/no-debug-non-zts-/apc.so
00002ac28a9bb000 2048K —– /usr/local/php/lib/php/extensions/no-debug-non-zts-/apc.so
00002ac28abbb000 8K rw— /usr/local/php/lib/php/extensions/no-debug-non-zts-/apc.so
00002ac28abbd000 32K rw— [ anon ]
00002ac28abd4000 40K r-x– /lib64/libnss_files-2.5.so
00002ac28abde000 2044K —– /lib64/libnss_files-2.5.so
00002ac28addd000 4K r—- /lib64/libnss_files-2.5.so
00002ac28adde000 4K rw— /lib64/libnss_files-2.5.so
00007fffa717e000 84K rw— [ stack ]
ffffffffff600000 8192K —– [ anon ]
total 154172K
7.使用xhprof、xdebug、tideways(PHP7)分析PHP程序内存等使用情况
点击下载Windows下 xhprof 扩展,Windows 下常用扩展下载(http://dev.freshsite.pl/php-accelerators.html)
8.nginx配合php-fpm,开启php-fpm自带实时监控(/status)
9.今天还碰到一种情况,set_time_limit(0),导致所有的php-fpm都会一直执行,直到达到最大分配值,新请求无法被响应。
转自:http://blog.csdn.net/pestd/article/details/26230351
PHP-php-fpm占用系统资源分析的更多相关文章
- php-fpm占用系统资源分析
故障检测 1.别的先不管,先top看一下cpu.ram.swap哪个比较紧张. 由上图分析,可以看出共有602个进程,其中有601个进程休眠了.这好像有点不对劲,内核进程也就80个左右,加上memca ...
- 项目中Map端内存占用的分析
最近在项目中开展重构活动,对Map端内存尽量要省一些,当前的系统中Map端内存最高占用大概3G左右(设置成2G时会导致Java Heap OOM).虽然个人觉得占用不算多,但是显然这样的结果想要试 ...
- Apache 后台服务器(主要处理php及一些功能请求 如:中文url) Nginx 前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求) Lighttpd 图片服务器 总体来说,随着nginx功能得完善将使他成为今后web server得主流。
Apache 后台服务器(主要处理php及一些功能请求 如:中文url) Nginx 前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求) Lighttpd 图片服务器 总体来说,随着ngi ...
- JAVA进程占用CPU分析
在一次生产环境中,服务器负载报警,SSH登录上看到CPU占用很高. 1.执行top命令,看到进程号为9737的进程持续占用CPU 2.怀疑是否是进程配置的内存不够了,引发了fullGC导致CPU占用高 ...
- Redis对象占用内存分析
当你往Redis中插入了一系统对象,如何分析这些对象的占用情况? 1.我们可以在Redis的控制台使用info命令来查看各项指标,其中有一项是Memory,可以通过存储前后的used_memory差异 ...
- traefik的80和443端口占用进一步分析
上一篇文章地址:https://www.cnblogs.com/sanduzxcvbnm/p/14990065.html 建议先看上一篇文章,才更容易理解这篇 1.traefik的deployment ...
- HashMap-死锁导致cpu占用100%分析(转)
最近项目里面的一段千年代码出了问题,这个问题以前也出现过,不过不是那么明显,这次迁移机器由以前的4台机子变成2台以后问题被放大,最终不得不解决,特此分析一下. 先放出问题的代码 ? 1 2 3 4 5 ...
- 性能测试工具LoadRunner24-LR之Analysis 系统资源分析
1.内存分析方法 内存分析方法主要是用于判断系统有无遇到内存瓶颈,是否需要通过增加内存等手段提高系统性能表现.主要计数器包括Memory和Physical Disk类别的计数器 内存分析的主要步骤和方 ...
- mds的cpu占用问题分析以及解决办法
前言 mds是ceph里面处理文件接口的组件,一旦使用文件系统,不可避免的会出现一种场景就是目录很多,目录里面的文件很多,而mds是一个单进程的组件,现在虽然有了muti mds,但稳定的使用的大部分 ...
随机推荐
- [USACO 2017 Feb Gold] Tutorial
Link: 传送门 A: 分层图最短路(其实就是最短路转移时多记录一维的数据 #include <bits/stdc++.h> using namespace std; #define X ...
- 【线段树】POJ3225-Help with Intervals
---恢复内容开始--- [题目大意] (直接引用ACM神犇概括,貌似是notonlysucess?) U:把区间[l,r]覆盖成1 I:把[-∞,l)(r,∞]覆盖成0 D:把区间[l,r]覆盖成0 ...
- Very Good!——C语言初学者百题大战之二
#include<stdio.h> int main() { printf("***************\n\n Very Good!\n\n***************& ...
- js 封装的自动创建表格的相关操作
因为要做一个动态输入的表格,现在积累一下资料,在网上找了一些资料,经过总结是使用更加方便些,谁有更好的插件和封装的东西,请大家分享一下. <script type="text/java ...
- Mac下的MySQL修改默认连接字符集
进入命令行执行以下命令: sudo vim /etc/my.cnf [client] default-character-set=utf8 [mysqld] character-set-server= ...
- CountDownLatch用法---等待多个线程执行完才执行
CountDownLatch用法---等待多个线程执行完才执行 CountDownLatch用法---等待多个线程执行完才执行 CountDownLatch用法---等待多个线程执行完才执行 Coun ...
- JavaScript基础入门教程(二)
说明 前一篇博客介绍了js以及一些关于js基本类型的简单知识,本篇博客将详细介绍js的基础类型,捎带介绍对象类型,更详细的对象类型的说明将后续再讲. js中类型的说明 js中的类型分为基本类型和对象类 ...
- iOS:CALayer锚点的使用
CALayer层的位置主要和position和anchorPoint有关.其中它们在一起才能决定层在视图中的具体位置. @property CGPoint position; //位置 ...
- Ajax的简单总结
1. Ajax的优势和不足 1.1 Ajax的优势 1. 不需要插件支持 Ajax不需要任何浏览器插件,就可以被绝大多数主流浏览器所支持,用户只需要允许JavaScript在浏览器上执行即可. 2. ...
- select()/poll() 的内核实现
mark 引用:http://janfan.cn/chinese/2015/01/05/select-poll-impl-inside-the-kernel.html 文章 select()/poll ...