<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DevOps技术分享 &#187; PHP-FPM</title>
	<atom:link href="http://www.showerlee.com/archives/tag/php-fpm/feed" rel="self" type="application/rss+xml" />
	<link>http://www.showerlee.com</link>
	<description>与你共同学习运维开发</description>
	<lastBuildDate>Mon, 19 Oct 2020 05:51:41 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.6</generator>
		<item>
		<title>理解php-fpm的两种执行方式</title>
		<link>http://www.showerlee.com/archives/687</link>
		<comments>http://www.showerlee.com/archives/687#comments</comments>
		<pubDate>Tue, 27 Aug 2013 16:56:03 +0000</pubDate>
		<dc:creator>showerlee</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP-FPM]]></category>

		<guid isPermaLink="false">http://www.showerlee.com/?p=687</guid>
		<description><![CDATA[前段时间配置php-fpm的时候，无意间发现原来他还有两种执行方式。与Apache一样，他的进程数也是可以根据 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	前段时间配置php-fpm的时候，无意间发现原来他还有两种执行方式。与Apache一样，他的进程数也是可以根据设置分为动态和静态的。关于Apache的工作方式及对应的设置方法，我已经在《Ubuntu下配置Apache的Worker模式》一文中写出，这里不再多说。
</p>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	&nbsp;
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	而php-fpm也是同样存在两种方式，一种是直接开启指定数量的php-fpm进程，不再增加或者减少；另一种则是开始的时候开启一定数量的php-fpm进程，当请求量变大的时候，动态的增加php-fpm进程数到上限，当空闲的时候自动释放空闲的进程数到一个下限。
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	&nbsp;
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	这两种不同的执行方式，可以根据服务器的实际需求来进行调整。
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	&nbsp;
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	这里先说一下涉及到这个的几个参数吧，他们分别是pm、pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers。
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	&nbsp;
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	pm表示使用那种方式，有两个值可以选择，就是static（静态）或者dynamic（动态）。在更老一些的版本中，dynamic被称作apache-like。这个要注意看配置文件给出的说明了。
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	&nbsp;
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	下面4个参数的意思分别为：
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	&nbsp;
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	pm.max_children：静态方式下开启的php-fpm进程数量。
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	pm.start_servers：动态方式下的起始php-fpm进程数量。
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	pm.min_spare_servers：动态方式下的最小php-fpm进程数量。
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	pm.max_spare_servers：动态方式下的最大php-fpm进程数量。
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	如果dm设置为static，那么其实只有pm.max_children这个参数生效。系统会开启设置的数量个php-fpm进程。
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	&nbsp;
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	如果dm设置为dynamic，那么pm.max_children参数失效，后面3个参数生效。系统会在php-fpm运行开始的时候启动pm.start_servers个php-fpm进程，然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	&nbsp;
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	那么，对于我们的服务器，选择哪种执行方式比较好呢？事实上，跟Apache一样，我们运行的PHP程序在执行完成后，或多或少会有内存泄露的问题。这也是为什么开始的时候一个php-fpm进程只占用3M左右内存，运行一段时间后就会上升到20-30M的原因了。所以，动态方式因为会结束掉多余的进程，可以回收释放一些内存，所以推荐在内存较少的服务器或者VPS上使用。具体最大数量根据 内存/20M 得到。比如说512M的VPS，建议pm.max_spare_servers设置为20。至于pm.min_spare_servers，则建议根据服务器的负载情况来设置，比较合适的值在5~10之间。
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	&nbsp;
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	然后对于比较大内存的服务器来说，设置为静态的话会提高效率。因为频繁开关php-fpm进程也会有时滞，所以内存够大的情况下开静态效果会更好。数量也可以根据 内存/30M 得到。比如说2GB内存的服务器，可以设置为50；4GB内存可以设置为100等。
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	&nbsp;
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	本博客建立在512M的VPS上，因此我设置的参数如下：
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	&nbsp;
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	pm=dynamic
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	pm.max_children=20
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	pm.start_servers=5
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	pm.min_spare_servers=5
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	pm.max_spare_servers=20
</div>
<div style="padding:0px;margin:0px;color:#555555;font-family:宋体, 'Arial Narrow', arial, serif;font-size:14px;background-color:#FFFFFF;">
	这样就可以最大的节省内存并提高执行效率。
</div>
<div>声明: 本文采用 <a rel="external" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" title="署名-非商业性使用-相同方式共享 3.0 Unported">CC BY-NC-SA 3.0</a> 协议进行授权</div><div>转载请注明来源：<a rel="external" title="DevOps技术分享" href="http://www.showerlee.com/archives/687">DevOps技术分享</a></div><div>本文链接地址：<a rel="external" title="理解php-fpm的两种执行方式" href="http://www.showerlee.com/archives/687">http://www.showerlee.com/archives/687</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.showerlee.com/archives/687/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
