inc*_*ike 7 php memory nginx memory-leak vmware-esx
我不确定我是否有内存泄漏问题(正如我的托管公司所建议的那样),或者我们是否都需要阅读http://linuxatemyram.com。也许你们聪明的人可以帮助我们?
这是一个前端 Web 服务器虚拟机,基本上只在 RHEL 5.5 上运行 nginx 和 php-fpm。该服务器正在为 PHP 电子商务工具 Magento 提供支持。服务器在共享环境中运行,但我们很快就会改变这种情况。
无论如何.. 重新启动后服务器运行得很好,但一天之内它就会把自己磨成一团糟。加载页面实际上需要 2 分钟,CPU 像疯了一样尖峰,等等。当我通过 SSH 登录时,控制台甚至变得缓慢。就像我的整个服务器都瘫痪了一样。
我还一直通过 top 和 tcpdumping 传入流量监视数据库服务器。数据库在“缓慢”加载时间的大部分时间里都处于空闲状态。当我开始看到来自前端服务器的查询时,页面很快就会加载。
以下是我在减速期间登录后的一些统计信息,在重新启动 php-fpm 后:
[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
...
Run Code Online (Sandbox Code Playgroud)
还有什么我应该看的,或者还有更多可能有用的信息吗?我只是一名开发人员,但这个系统的缓慢让我担心,让我很难完成我的工作..
帮帮我,ServerFault!
小智 6
万一其他人遭受这个。
我们刚刚遇到了同样的问题。php5-fpm 中的内存泄漏。RAM 被每个页面请求用完并最终用完。然后 CPU 进入超速运转状态,KSWAP 进程运行交换磁盘。
唯一固定的,虽然不是理想的设置是更改我们的 www.conf 池文件
pm = 动态
到
下午 = 点播
内存现在似乎稳定。
这里有两件事需要检查:
您很可能存在内存泄漏。pm.max_requests
在处理这么多请求后,将终止/重新启动 php-fpm 子进程。由于您的盒子大约需要一天的时间才能慢下来,因此请尝试将其设置为一个数字,以使每个子进程每 20 分钟左右重生一次。因此,如果您每分钟收到 200 个请求,并且有 5 个进程,则设置pm.max_requests
为 800。如果您不想进行数学计算,则 500-1000 之间的设置可能会起作用。尝试一下,在浪费时间重生进程和浪费 RAM 造成内存泄漏之间找到平衡。
当流量高峰发生时,Php-FPM 可能会创建太多子进程,导致 RAM 不足并开始交换到磁盘。决定分配给 php-fpm 的总 RAM 量,然后除以每个子进程占用的内存量。对于基于 Wordpress 和 PHP 的论坛,我经常看到每个子进程需要 30-45MB。如果您仅使用一个 php-fpm 池,请设置pm.max_children
为该数字。
如果您只有一个 php-fpm 池,您将看到设置带来的速度提升pm.type = static
。
如果您有多个 php-fpm 池(可能是因为您托管多个应用程序并希望出于安全原因隔离它们),您将需要设置pm.type = dynamic
并使用start_servers
、min_spare_servers
和max_spare_servers
。只要确保max_children
所有池的累积量不超过您的盒子的处理能力即可。
如果您有大量低流量应用程序,每个应用程序都有自己的 php-fpm 池,那么最好进行设置,pm.type=ondemand
以便每个应用程序仅在实际使用时占用资源。还要设置得pm.max_children
相当低,这样就没有任何一个应用程序可以完全压倒这个盒子。
归档时间: |
|
查看次数: |
14949 次 |
最近记录: |