<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[实践OK]PHP-FPM子进程数量应该如何设置？php-fpm.conf 配置说明。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Mon, 16 Jul 2018 13:41:08 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	对于Docker又反转为静态方式进程数了，如下：<br/>pm = dynamic 如何控制子进程，选项有static和dynamic<br/>pm.max_children：静态方式下开启的php-fpm进程数量<br/><textarea name="code" class="php" rows="15" cols="100">
pm = dynamic #对于专用服务器，pm可以设置为static。
#如何控制子进程，选项有static和dynamic。如果选择static，则由pm.max_children指定固定的子进程数。如果选择dynamic，则由下开参数决定：
pm.max_children #，子进程最大数
pm.start_servers #，启动时的进程数
pm.min_spare_servers #，保证空闲进程数最小值，如果空闲进程小于此值，则创建新的子进程
pm.max_spare_servers #，保证空闲进程数最大值，如果空闲进程大于此值，此进行清理
 
pm.max_requests = 1000
#设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 ’0′ 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
 
</textarea><br/>自己实践如下：<br/><textarea name="code" class="php" rows="15" cols="100">
pm = static
pm.max_children = 1 
#pm.start_servers = 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
#pm.min_spare_servers = 5 
#pm.max_spare_servers = 8 
#pm.max_requests = 1024
</textarea><br/>/usr/local/php/sbin/php-fpm --daemonize --fpm-config /usr/local/php/etc/php-fpm.conf --pid /usr/local/php/var/run/php-fpm.pid&nbsp;&nbsp;<br/>#docker 无service/systemctl,为2时两个进程，为1时一个进程，如下：<br/>root&nbsp;&nbsp;&nbsp;&nbsp; 35308&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;0 16:12 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)<br/>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;35309 35308&nbsp;&nbsp;0 16:12 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 php-fpm: pool www<br/>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;35310 35308&nbsp;&nbsp;0 16:12 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 php-fpm: pool www<br/>pkill&nbsp;&nbsp;-9 php 可杀死，然后可修改pm.max_children = 1 ==》pm.max_children = 2，也就是上面的2个进程 。<br/><br/>来自:http://www.cnblogs.com/ahaii/p/5776809.html<br/><br/>背影：对于低配置机器，建议写死PHP-FPM进程数得了，而对于高配置机器，则如果写在动态的，因为根据流量进行fork了PHP-FPM进程运动量很大，应该是在高配置身体健康的时候去做，等你是一个低配置的机器，你再去做增加进程去做时就死了。<br/><br/>一）PHP-FPM子进程数量应该如何设置？<br/><textarea name="code" class="php" rows="15" cols="100">
PHP.ini: memory_limit = 128M,24G(24576M),24CPU:
static方式：M / (m * 1.2)=24576/(128*1.2)=160 这儿是对24G内存全用上的一个值，实际上并没有这么多内存，因为系统占用了一小部分。
dynamic方式：
场景1）如果代码是 CPU 计算密集型的，pm.max_chindren 不能超过 CPU 的内核数。

场景2）如果不是，那么将 pm.max_chindren 的值大于 CPU 的内核数，是非常明智的。
在 N + 20% 和 M / m 之间。
得出：25（24*20%=24+4.8）到192(24576/128)之间，25-192之间。

场景3）自适应，同时注意阻塞和内存溢出或阻塞：
一种保险的方式，来配置 max_children。适用于 static 方式。
先把 max_childnren 设置成一个比较大的值。
稳定运行一段时间后，观察 php-fpm 的 status 里的 max active processes 是多少
然后把 max_children 配置比它大一些就可以了。max active processes

防止代码内存泄漏：
pm.max_requests：指的是每个子进程在处理了多少个请求数量之后就重启。
这个参数，理论上可以随便设置，但是为了预防内存泄漏的风险，还是设置一个合理的数比较好
;pm.max_requests = 500
vi /usr/local/php/etc/php-fpm.conf
参数说明：
N 是 CPU 内核数量。
M 是 PHP 能利用的内存数量。
m 是每个 PHP 进程平均使用的内存数量。
</textarea><br/><br/><br/>二）php-fpm.conf 配置说明：<br/>php-fpm中pm.start_servers 多大合适？<br/>&#123;（cpu空闲时等待连接的php的最小子进程数） + （cpu空闲时等待连接的php的最大子进程数 - cpu空闲时等待连接的php的最小子进程数）/ 2&#125;；<br/>用配置表示就是：min_spare_servers + (max_spare_servers - min_spare_servers) / 2；一般而言，设置成10-20之间的数据足够满足需求了。<br/>英文表示@/usr/local/php/etc/php-fpm.conf：<br/>; The number of child processes created on startup.<br/>; Note: Used only when pm is set to &#039;dynamic&#039;<br/>; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2<br/><br/>1)XIYOU-API线上24G(24576M),24CPU生产机器配置：<br/><textarea name="code" class="php" rows="15" cols="100">
pm = dynamic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
pm.max_children = 64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## 当动态管理子进程时，fpm最多能fork多少个进程， 三种管理方式都要配置&nbsp;&nbsp;【此值范围在一）里的 场景2）里面的值25-192之间即可。】
pm.start_servers = 32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## fpm启动时创建40个子进程，只适用动态dynamic管理方式[默认值：min_spare_servers + (max_spare_servers - min_spare_servers) / 2=16+(32-16)/2=16+8=34,肯定要比服务器闲置时最多进程数要多，比服务器闲置时最少要少]
pm.min_spare_servers = 16&nbsp;&nbsp; ##服务器闲置时最少保持20个子进程，不够这个数就会创建，只适用动态dynamic管理方式
pm.max_spare_servers = 32&nbsp;&nbsp;##服务器闲置时最多要有几个，多了会kill，只适用动态dynamic管理方式
</textarea><br/><br/>2)目前RPMBUILD打包写死：<br/>/home/test/rpmbuild/SOURCES/php-fpm.conf<br/>/home/test/rpmbuild/SOURCES/www.conf<br/><textarea name="code" class="php" rows="15" cols="100">
pm = dynamic
pm.max_children = 80
pm.start_servers = 60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ##min_spare_servers + (max_spare_servers - min_spare_servers) / 2=50+(80-50)/2=50+30=80,
pm.min_spare_servers = 50
pm.max_spare_servers = 80
pm.max_requests = 1024
</textarea><br/><br/>3）通过grep从/usr/local/php/etc/php-fpm.conf里陪陪出对应项的值：<br/><textarea name="code" class="php" rows="15" cols="100">
grep -Eri &quot;^pm.max_children&#124;^pm.start_servers&#124;^pm.min_spare_servers&#124;^pm.max_spare_servers&quot; /usr/local/php/etc/php-fpm.conf
pm.max_children = 64
pm.start_servers = 32
pm.min_spare_servers = 16
pm.max_spare_servers = 32
</textarea><br/><br/>附，php-fpm.conf 配置说明:<br/><textarea name="code" class="php" rows="15" cols="100">
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /alidata/log/php/php-fpm.log
# 错误级别。可用级别为：alert（必须立即处理），error（错误情况），
# warning（警告情况），notice（一般重要信息），debug（调试信息）。
# 默认：notice。
log_level = notice

[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
# 启动时子进程管理方式，可选值：static(启动时创建指定个数)， 
# dynamic(启动时根据情况创建，至少有一个)，
# ondemand(启动时不创建子进程，有需求才创建)
pm = dynamic
# 当动态管理子进程时，fpm最多能fork多少个进程， 三种管理方式都要配置
pm.max_children = 140
# fpm启动时创建40个子进程，只适用动态dynamic管理方式
# 默认值：min_spare_servers + (max_spare_servers - min_spare_servers) / 2。
pm.start_servers = 40 
# 服务器闲置时最少保持20个子进程，不够这个数就会创建，只适用动态dynamic管理方式
pm.min_spare_servers = 20
# 服务器闲置时最多要有几个，多了会kill，只适用动态dynamic管理方式
pm.max_spare_servers = 60
# max_requests 使FastCGI进程在处理一定数量的请求后自动重启，
# 以此避免第三方扩展内存泄漏产生破坏性影响。
# 注意： 该参数设置要注意，设置大了不利于解决内存泄漏问题，导致耗内存较多
# 设置小了FastCGI频繁重启，会对CPU产生了负担，要权衡考虑
pm.max_requests = 5000
# 最长执行时间
request_terminate_timeout = 100
# 慢日志
request_slowlog_timeout = 2
slowlog = /alidata/log/php/slow.log
</textarea><br/><br/>来自：https://blog.csdn.net/u013372487/article/details/80168979<br/><br/><br/>HP-FPM子进程数量应该如何设置？摘录自：https://blog.csdn.net/jt521xlg/article/details/50992631 ，最前面参考计算最小PHP进程来源：<br/>首先，我们关注下 PHP-FPM 的运行方式：<br/><br/>static ：表示在 `php-fpm` 运行时直接 `fork` 出 `pm.max_chindren` 个子进程，<br/> <br/>dynamic：表示，运行时 `fork` 出 `start_servers` 个进程，随着负载的情况，动态的调整，最多不超过 `max_children` 个进程。<br/>一般推荐用 static。<br/><br/>优点是不用动态的判断负载情况，提升性能；<br/><br/>缺点是多占用些系统内存资源。<br/><br/>PHP-FPM 子进程数量，是不是越多越好？<br/><br/>当然不是，pm.max_chindren，进程多了，增加进程管理的开销以及上下文切换的开销。<br/><br/>更核心的是，能并发执行的 php-fpm 进程不会超过 cpu 个数。<br/><br/>如何设置，取决于你的代码<br/><br/>如果代码是 CPU 计算密集型的，pm.max_chindren 不能超过 CPU 的内核数。<br/><br/>如果不是，那么将 pm.max_chindren 的值大于 CPU 的内核数，是非常明智的。<br/><br/>国外技术大拿给出这么个公式：<br/><br/>在 N + 20% 和 M / m 之间。<br/><br/>N 是 CPU 内核数量。<br/>M 是 PHP 能利用的内存数量。<br/>m 是每个 PHP 进程平均使用的内存数量。<br/><br/>适用于 dynamic 方式。<br/><br/>static方式：M / (m * 1.2)<br/><br/>当然，还有一种保险的方式，来配置 max_children。适用于 static 方式。<br/><br/>先把 max_childnren 设置成一个比较大的值。<br/>稳定运行一段时间后，观察 php-fpm 的 status 里的 max active processes 是多少<br/>然后把 max_children 配置比它大一些就可以了。<br/>pm.max_requests：指的是每个子进程在处理了多少个请求数量之后就重启。<br/><br/>这个参数，理论上可以随便设置，但是为了预防内存泄漏的风险，还是设置一个合理的数比较好<br/><br/>来自：https://blog.csdn.net/jt521xlg/article/details/50992631
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]PHP-FPM子进程数量应该如何设置？php-fpm.conf 配置说明。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>