我不知道如果我有一个内存泄漏问题(如我的托pipe公司build议),或者如果我们都需要阅读http://linuxatemyram.com 。 也许你聪明的人可以帮助我们吗?
这是一个基本上只在RHEL5.5上运行nginx&php-fpm的前端Web服务器虚拟机。 这台服务器正在为Magento,一个PHP电子商务东西提供动力。 服务器正在共享环境中运行,但我们正在尽快更换。
无论如何..重启后服务器运行良好,但在一天之内,它会磨成虚无。 页面会花费2分钟的时间加载,像CPU疯狂的CPU峰值等。当我SSH进入时,控制台甚至是缓慢的。这就像我的整个服务器正在瘫痪。
我也一直在监视数据库服务器通过顶级和tcpdumping传入的stream量。 数据库在“慢”加载时间的很大一部分保持空闲状态。 当我开始看到来自前端服务器的查询时,页面很快就会加载。
下面是一些在重启php-fpm之后在减速过程中login的统计数据:
[mike@front01 ~]$ free -m total used free shared buffers cached Mem: 5963 5217 745 0 192 314 -/+ buffers/cache: 4711 1252 Swap: 4047 4 4042 [mike@front01 ~]$ top top - 11:38:55 up 2 days, 1:01, 3 users, load average: 0.06, 0.17, 0.21 Tasks: 131 total, 1 running, 130 sleeping, 0 stopped, 0 zombie Cpu0 : 0.0%us, 0.3%sy, 0.0%ni, 99.3%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 6106800k total, 5361288k used, 745512k free, 199960k buffers Swap: 4144728k total, 4976k used, 4139752k free, 328480k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 31806 apache 15 0 601m 120m 37m S 0.0 2.0 0:22.23 php-fpm 31805 apache 15 0 549m 66m 31m S 0.0 1.1 0:14.54 php-fpm 31809 apache 16 0 547m 65m 32m S 0.0 1.1 0:12.84 php-fpm 32285 apache 15 0 546m 63m 33m S 0.0 1.1 0:09.22 php-fpm 32373 apache 15 0 546m 62m 32m S 0.0 1.1 0:09.66 php-fpm 31808 apache 16 0 543m 60m 35m S 0.0 1.0 0:18.93 php-fpm 31807 apache 16 0 533m 49m 30m S 0.0 0.8 0:08.93 php-fpm 32092 apache 15 0 535m 48m 27m S 0.0 0.8 0:06.67 php-fpm 4392 root 18 0 194m 10m 7184 S 0.0 0.2 0:06.96 cvd 4064 root 15 0 154m 8304 4220 S 0.0 0.1 3:55.57 snmpd 4394 root 15 0 119m 5660 2944 S 0.0 0.1 0:02.84 EvMgrC 31804 root 15 0 519m 5180 932 S 0.0 0.1 0:00.46 php-fpm 4138 ntp 15 0 23396 5032 3904 S 0.0 0.1 0:02.38 ntpd 643 nginx 15 0 95276 4408 1524 S 0.0 0.1 0:01.15 nginx 5131 root 16 0 90128 3340 2600 S 0.0 0.1 0:01.41 sshd 28467 root 15 0 90128 3340 2600 S 0.0 0.1 0:00.35 sshd 32602 root 16 0 90128 3332 2600 S 0.0 0.1 0:00.36 sshd 1614 root 16 0 90128 3308 2588 S 0.0 0.1 0:00.02 sshd 2817 root 5 -10 7216 3140 1724 S 0.0 0.1 0:03.80 iscsid 4161 root 15 0 66948 2340 800 S 0.0 0.0 0:10.35 sendmail 1617 nicole 17 0 53876 2000 1516 S 0.0 0.0 0:00.02 sftp-server ...
还有什么我应该看看,或者更多的信息可能有用吗? 我只是一个开发人员,但是这个系统的放慢让我担心,并且很难做我的工作。
帮助我,ServerFault!
以防其他人遭受这种情况。
我们刚刚经历了同样的问题。 在php5-fpm中发生内存泄漏。 RAM随着每个页面的请求被用完,最终被刷新。 然后,CPU通过运行交换磁盘的KSWAP进程进入超速模式。
唯一固定的,但不是理想的设置是改变我们的www.conf池文件
下午=dynamic
至
pm = ondemand
记忆现在看起来稳定。
下一次服务器变慢时,运行“vmstat 1”和“iostat 1”,然后将结果报告给我们。
我的猜测是,php5刚刚更新了128Mb的默认内存限制,有太多的php5实例运行(检查您的php-fpmconfigurationpm.max_children)。
上面的事也发生在我身上,我一直在试图弄清楚自己的头发。 我已经logging了与Ubuntu的bugreport,但我认为它需要固定上游与php-fpm – 默认情况下,我会吃掉6Gb的RAM,如果可能的话。 这确实让我的1Gb服务器无用…
您可能没有在服务器上安装一些操作码caching,导致缓慢。
而且,正如Marco所说,你可能会在系统上运行大量的php-fpm实例。
如果你怀疑内存泄漏的麻烦,安装suhosin扩展为PHP,这将防止内存泄漏。
其实如果是内存泄漏,应该logging在php错误日志中,php.ini有一个选项来报告memleaks, report_memleaks = On
这里有两件事要检查:
很有可能你有内存泄漏。 pm.max_requests在处理了这么多的请求之后,会pm.max_requests /重新启动php-fpmsubprocess。 由于您的邮箱需要一天的时间才能放慢抓取速度,请尝试将其设置为一个数字,以使每个subprocess每20分钟左右重新生成一次。 因此,如果您每分钟获得200个请求,并且您有5个进程,请将pm.max_requests设置为800.如果您不想进行math计算,则可以使用500-1000之间的设置。 玩弄它来find浪费时间重生过程与浪费内存泄漏RAM之间的平衡。
发生stream量高峰时,Php-FPM可能会创build太多subprocess,导致其用尽RAM并开始交换到磁盘。 决定分配给php-fpm的内存总量,然后除以每个subprocess占用的内存量。 对于基于WordPress和PHP的论坛,我经常会看到每个subprocess需要30-45MB。 如果您只使用一个php-fpm池,请将pm.max_children设置pm.max_children数字。
如果你只有一个php-fpm池,你可以通过设置pm.type = static提高速度。
如果您有多个php-fpm池,可能是因为您托pipe了多个应用程序,并且出于安全原因希望将其隔离,则需要设置pm.type = dynamic并使用start_servers , min_spare_servers和max_spare_servers 。 只要确保所有池中的累积max_children不超过您的框可以处理。
如果您有大量低stream量的应用程序,每个应用程序都有自己的php-fpm池,最好设置pm.type=ondemand以便每个应用程序只在实际使用时占用资源。 还设置pm.max_children合理低,以便没有一个应用程序可以完全压倒了盒子。