<?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>php-fpm &#8211; 科技改变生活-雨落星辰</title>
	<atom:link href="https://p1e.cn/html/tag/php-fpm/feed" rel="self" type="application/rss+xml" />
	<link>https://p1e.cn</link>
	<description>所有的伟大,都源于一个勇敢的开始</description>
	<lastBuildDate>Wed, 11 Sep 2019 00:22:06 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.2</generator>
	<item>
		<title>解决Linux下php-fpm进程过多导致内存耗尽问题</title>
		<link>https://p1e.cn/html/644.html</link>
					<comments>https://p1e.cn/html/644.html#respond</comments>
		
		<dc:creator><![CDATA[Naoki]]></dc:creator>
		<pubDate>Wed, 24 Oct 2018 00:23:59 +0000</pubDate>
				<category><![CDATA[运维笔记]]></category>
		<category><![CDATA[php-fpm]]></category>
		<guid isPermaLink="false">http://www.815494.com/?p=644</guid>

					<description><![CDATA[最近，发现个人博客的Linux服务器，数据库服务经常挂掉，导致需要重启，才能正常访问，极其恶心，于是决心开始解决问题，解放我的时间和精力（我可不想经常出问题，然后人工重启，费力费时）。 分析问题 发现问题以后，首先使用free -m 指令查看当前服务器执行状况： 可以看到我的服务器内存是2G的，但是目前可用内存只剩下70M，内存使用率高达92%，很有可能是内存使用率过高导致数据库服务挂断。 继续看详细情况，使用 top 指令： 然后再看指令输出结果中详细列出的进程情况，重点关注第10列内存使用占比： 发现CPU使用]]></description>
										<content:encoded><![CDATA[<p>最近，发现个人博客的Linux服务器，数据库服务经常挂掉，导致需要重启，才能正常访问，极其恶心，于是决心开始解决问题，解放我的时间和精力（我可不想经常出问题，然后人工重启，费力费时）。</p>
<p><strong>分析问题</strong></p>
<p>发现问题以后，首先使用<code><span style="color: #ff0000;">free -m</span></code> 指令查看当前服务器执行状况：</p>
<p><img decoding="async" class="alignnone size-full wp-image-645" src="https://i.p1e.cn/2018/10/201712010936411.png" width="550" height="80" /></p>
<p>可以看到我的服务器内存是2G的，但是目前可用内存只剩下70M，内存使用率高达92%，很有可能是内存使用率过高导致数据库服务挂断。</p>
<p>继续看详细情况，使用 <code>top</code> 指令：</p>
<p><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-646" src="https://i.p1e.cn/2018/10/201712010936412.png" width="550" height="98" /></p>
<p>然后再看指令输出结果中详细列出的进程情况，重点关注第10列内存使用占比：</p>
<p><img decoding="async" class="alignnone size-full wp-image-647" src="https://i.p1e.cn/2018/10/201712010936413.png" width="550" height="91" /></p>
<p>发现CPU使用率不算高，也排除了CPU的问题，另外可以看到数据库服务占用15.2%的内存，内存使用过高时将会挤掉数据库进程（占用内存最高的进程），导致服务挂断，所以我们需要查看详细内存使用情况，是哪些进程耗费了这么多的内存呢？</p>
<p>使用指令：</p>
<div class="jb51code">
<pre class="brush:php;">[success]ps auxw|head -1;ps auxw|sort -rn -k4|head -40[/success]</pre>
</div>
<p>查看消耗内存最多的前40个进程：</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-648" src="https://i.p1e.cn/2018/10/201712010936414.jpg" width="550" height="470" /></p>
<p>查看第四列内存使用占比，发现除了mysql数据库服务之外，php-fpm服务池开启了太多子进程，占用超过大半内存，问题找到了，我们开始解决问题：设置控制php-fpm进程池进程数量。</p>
<p><strong>解决问题</strong></p>
<p>通过各种搜索手段，发现可以通过配置 <span style="color: #ff0000;"><code>pm.max_children</code></span> 属性，控制php-fpm子进程数量，首先，打开php-fpm配置文件，执行指令：</p>
<pre class="brush:bash;">[success]vi /etc/php-fpm.d/www.conf[/success]</pre>
<p>找到 <code>pm.max_children</code> 字段，发现其值过大：</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-649" src="https://i.p1e.cn/2018/10/201712010936415.png" width="550" height="302" /></p>
<p>如图， <code>pm.max_children</code> 值为50，每一个进程占用1%-2.5%的内存，加起来就耗费大半内存了，所以我们需要将其值调小，博主这里将其设置为25，同时，检查以下两个属性：</p>
<p><code>pm.max_spare_servers</code> : 该值表示保证空闲进程数最大值，如果空闲进程大于此值，此进行清理 <code>pm.min_spare_servers</code> : 保证空闲进程数最小值，如果空闲进程小于此值，则创建新的子进程;</p>
<p>这两个值均不能不能大于 <code>pm.max_children</code> 值，通常设置 <code>pm.max_spare_servers</code> 值为 <code>pm.max_children</code> 值的60%-80%。</p>
<p>最后，重启php-fpm</p>
<div class="jb51code">
<pre class="brush:bash;">systemctl restart php-fpm</pre>
</div>
<p>再次查看内存使用情况， 使用内存降低很多：</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-650" src="https://i.p1e.cn/2018/10/201712010936416.png" width="550" height="50" /></p>
<p>之后经过多次观察内存使用情况，发现此次改进后，服务器内存资源消耗得到很大缓解。</p>
<p><strong>ps：查看php-fpm开启的进程数以及每个进程的内存限制</strong></p>
<p>1.通过命令查看服务器上一共开了多少的 php-cgi 进程</p>
<div class="jb51code">
<pre class="brush:php;">[success]ps -fe |grep "php-fpm"|grep "pool"|wc -l[/success]</pre>
</div>
<p>2.查看已经有多少个php-cgi进程用来处理tcp请求</p>
<div class="jb51code">[info]netstat -anp|grep &#8220;php-fpm&#8221;|grep &#8220;tcp&#8221;|grep &#8220;pool&#8221;|wc -l[/info]</div>
<p>3.linux+nginx+php环境中，每个php-fpm进程的内存限制</p>
<p><strong>设置方法：</strong></p>
<p>编辑php-fpm.conf配置文件</p>
<p>php_admin_value[memory_limit] = 128M（我服务器上的配置文件在/etc/php5/fpm/pool.d/www.conf 这个文件是被包含在php-fpm.conf里的） 后边的数字可以随便更改：32M,64M,128M,256M,512M，这个设置可根据你的服务器内存大小和你的需求来写，修改后要加载一下php-fpm服务。</p>
<p><strong>总结</strong></p>
<p>以上所述是小编给大家介绍的Linux下php-fpm进程过多导致内存耗尽问题解决，希望对大家有所帮助。</p>
<div></div>]]></content:encoded>
					
					<wfw:commentRss>https://p1e.cn/html/644.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
