php-fpm优化

  PHP-FPM是一个PHPFastCGI进程管理器,是只用于PHP的。
      PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
      现在我们可以在最新的PHP 5.3.2的源码树里下载得到直接整合了PHP-FPM的分支,据说下个版本会融合进PHP的主分支去。相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。
      PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。            在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。
      使用PHP-FPM来控制PHP-CGI的FastCGI进程
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 启动php的fastcgi进程
--stop 强制终止php的fastcgi进程
--quit 平滑终止php的fastcgi进程
--restart 重启php的fastcgi进程
--reload 重新平滑加载php的php.ini
--logrotate 重新启用log文件

      php-fpm有两种执行方式, 与Apache一样,他的进程数也是可以根据设置分为动态和静态的,一种是直接开启指定数量的php-fpm进程,不再增加或者减少;另一种则是开始的时候开启一定数量的php-fpm进程,当请求量变大的时候,动态的增加php-fpm进程数到上限,当空闲的时候自动释放空闲的进程数到一个下限。

      这两种不同的执行方式,可以根据服务器的实际需求来进行调整。

      这里先说一下涉及到这个的几个参数吧,他们分别是pm、pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers。

pm表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态)。在更老一些的版本中,dynamic被称作apache-like。这个要注意看配置文件给出的说明了。

      下面4个参数的意思分别为:

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

      如果dm设置为static,那么只有pm.max_children这个参数生效。系统会开启设置的数个php-fpm进程。

      如果dm设置为dynamic,那么pm.max_children参数失效,后面3个参数生效。系统会在php-fpm运行开始的时候启动 pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和 pm.max_spare_servers之间调整php-fpm进程数。

      那么,对于我们的服务器,选择哪种执行方式比较好呢?事实上,跟Apache一样,我们运行的PHP程序在执行完成后,或多或少会有内存泄露的问 题。这也是为什么开始的时候一个php-fpm进程只占用3M左右内存,运行一段时间后就会上升到20-30M的原因了。所以,动态方式因为会结束掉多余 的进程,可以回收释放一些内存,所以推荐在内存较少的服务器或者VPS上使用。具体最大数量根据 内存/20M 得到。比如说512M的VPS,建议pm.max_spare_servers设置为20。至于pm.min_spare_servers,则建议根据服 务器的负载情况来设置,比较合适的值在5~10之间。

      然后对于比较大内存的服务器来说,设置为静态的话会提高效率。因为频繁开关php-fpm进程也会有时滞,所以内存够大的情况下开静态效果会更好。数量也可以根据 内存/30M 得到。比如说2GB内存的服务器,可以设置为50;4GB内存可以设置为100等。

      DEMO参数如下:

pm=dynamic
pm.max_children=20
pm.start_servers=5
pm.min_spare_servers=5
pm.max_spare_servers=20

      这样就可以最大的节省内存并提高执行效率。

转载于:https://www.cnblogs.com/lpfuture/p/5794499.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK8后的日期时间API

Testpublic void test() { // now() 获取当前的时间,日期LocalDate ld LocalDate.now();LocalTime lt LocalTime.now();LocalDateTime ldt LocalDateTime.now();System.out.println(ld);System.out.println(lt);System.out.println(ldt);// of():指定年月日 …

送花(洛谷 2073)

题目背景 小明准备给小红送一束花,以表达他对小红的爱意。他在花店看中了一些花,准备用它们包成花束。 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C。 小明一开始有一个空的花束,他不断地向里面添加花。他有…

nfs服务搭建

service nfs restart nfs服务重启 showmount -e ip地址 查看服务开启状态: chkconfig --list nfs 服务配置: #vim /etc/exports /data/ 192.168.1.145/24(rw,sync) /data/ *(rw,sync,all_squash) 服务重载,不需要restart #/etc/init.d…

爬虫工作量由小到大的思维转变---<第二十五章 Scrapy开始很快,越来越慢(追溯篇)>

爬虫工作量由小到大的思维转变---<第二十二章 Scrapy开始很快,越来越慢(诊断篇)>-CSDN博客 爬虫工作量由小到大的思维转变---<第二十三章 Scrapy开始很快,越来越慢(医病篇)>-CSDN博客 前言: 之前提到过,很多scrapy写出来之后,不…

也许你需要点实用的-Web前端笔试题

之前发的一篇博客里没有附上答案,现在有空整理了下发出来,希望能帮助到正在找工作的你,还是那句话:技术只有自己真正理解了才是自己的东西,共勉。 Web前端笔试题 Htmlcss 1.对WEB标准以及w3c的理解与认识。 标签闭合&a…

HTML5的touch事件

HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享。今天为大家介绍的事件主要是触摸事件…

神经网络的介绍

对于线性的定义:满足可加性和齐次性。

iOS 集成银联支付

转自:http://www.jianshu.com/p/92d615f78509 当初集成支付宝的时候 觉得见了这么丑的代码 加上这么难找的下载地址 在配上几乎为零的文档 寒哥就要吐血了下午去集成银联 才知道 血吐的早了 下载地址 https://open.unionpay.com/upload/download/Development_kit854…

pytorch入门使用

1、创建张量: 2、张量的方法和属性: (1) t1.item()只能用于张量中只有一个数据的情况下获取张量内的值 (2)numpy() 将tensor转换为numpy数组 t2 torch.tensor([[[1, 2]]]) print(t2) print(t2.numpy()) 输出结果:…

.net core学习

http://www.cnblogs.com/artech/ http://www.blogs8.cn/posts/AA0E630 http://pan.baidu.com/s/1bo4fJ47 http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-1-getting_started.html转载于:https://www.cnblogs.com/jiangjing/p/5804542.html

Tomcat中组件的生命周期管理(三)

本文主要目的是自定义举例分析Catalina内部生命周期管理的运作方式以及拿内部具体源码来具体分析 假设我们有一台电脑由主机(我们用cpu表示)和显示器构成,那么我们要运用上篇文章学到的内容,来管理整个电脑的启动和关闭,先看我们对…

Python rang()函数

返回类型为迭代器 r range(11) print(r) 若输出r中的值,需要调用list(r) print(list(r)) 输出: 方法二: #二: r1 range(1,10) print(list(r1)) 方法三: #三: r2 range(1,10,2) print(list(r2)) 判断某一个数是…

Python 中的 while循环 和 for... in ...循环

for item in Python:print(item, end) print()for item in range(10):print(item, end)# 当不需要自定义变量时候,可以用”_“代替 for _ in range(5) :print(hello world)# 计算累加和 sum 0 for i in range(1,101) :if i%20 :sum i print(sum) While: a 0 while…