前言:

最近服务器内存使用率一直居高不下,检查之后发现可能和php-fpm进程数过多有关。本文记录了我优化php-fpm配置文件的过程并补充了一些和php-fpm有关的知识。

什么是php-fpm:

php-fpm即FastCGI进程管理器,用于控制php的内存和进程等。

操作环境:

CentOS 7

问题检查:

首先查看php进程总数:

pstree|grep php-fpm

回显:

|-php-fpm---20*[php-fpm]

根据回显信息可知,查询时有20个php-fpm进程。

也可以通过下面的命令列出消耗内存最多的前50个进程:

ps auxw|head -1;ps auxw|sort -rn -k4|head -50

解决过程:

下面我们通过修改配置文件来优化php-fpm,以达到降低内存使用率的目的。

我的php-fpm配置文件在 .../server/php/etc/ 目录下,进入该目录。

先备份一下原配置文件:

cp php-fpm.conf php-fpm.conf.bak

注:

使用vim打开配置文件后,按Esc键,之后输入”/”, 再输入“xxx”可以查找“xxx”这个字符串。

具体配置参数如下:

pm.max_children = 100改为:pm.max_children = 25pm.start_servers = 20改为pm.start_servers = 5pm.min_spare_servers = 5改为pm.min_spare_servers = 2pm.max_spare_servers = 35改为pm.max_spare_servers = 10

重启服务器:

reboot

重启后可以发现内存使用率相比于之前降低了。

注:

1.php-fpm.conf中参数作用的说明:

pm.max_children:静态方式下开启的php-fpm进程数量。pm.start_servers:动态方式下的起始php-fpm进程数量。pm.min_spare_servers:动态方式下的最小php-fpm进程数。pm.max_spare_servers:动态方式下的最大php-fpm进程数量。

2.进行上述设置时,我将php-fpm的执行方式设置成了动态:

pm = dynamic

3.php-fpm有两种执行方式:

一种是Static静态,另一种是Dynamic动态。如果设置成静态,那么只有 pm.max_children 这个参数起作用。如果设置成动态则有 pm.start_servers 、 pm.min_spare_servers 和 pm.max_spare_servers 这三个参数起作用。设置成动态后,当php-fpm启动时会按照 pm.start_servers 的参数设置启动相应个数的进程,之后php-fpm的进程数量将维持在 pm.min_spare_servers 和 pm.max_spare_servers 指定的个数之间。

4.如何选择使用php-fpm的静态还是动态执行方式:

动态php-fpm执行方式允许php-fpm释放多余进程,从而节约内存资源。

静态php-fpm执行方式不允许php-fpm释放多于进程,避免了频繁开启或停止php-fpm进程,从而降低了服务器在某些情况下的响应时间。

更多PHP相关知识,请访问PHP教程!

更多相关文章

  1. php中异步执行的四种方式
  2. SpringBoot中处理校验逻辑的两种方式,真的很机智!
  3. Linux进程管理
  4. 计算时间差,你的方式或许不是最佳实践!
  5. 你了解java中的几种编码方式?解决乱码问题可能并不麻烦
  6. 你的Springboot应用到底启动了哪些bean?这两种方式可以帮你获取
  7. 多线程学习(二) 多线程创建4种方式
  8. 多线程学习(一) 线程与进程的理解

随机推荐

  1. 详细介绍XML在JAVA项目中的作用
  2. 读取XML文件时报“前言中不允许有内容”
  3. 教你如何正确使用XML
  4. 详解JSTL读取xml中文乱码解决的案例
  5. 详细介绍xml的语法的使用和学习
  6. 简单介绍OFBiz使用xml配置界面的想法
  7. xml的属性总结代码详情
  8. XML文件要有根标签(错误)的代码解决分享
  9. 详解xml文档正确格式的示例代码
  10. 具体介绍如何在IE中创建DOM并载入XML的详