问题描述
|
我希望这是问这个问题的正确地方,所以:
我们正在运行Debian(虚拟化)服务器,而Apache将PHP作为fcgi运行。今天,管理员告诉我,这些进程正在消耗系统上的RAM。他让我看看我的代码。
好吧,我认为实际上是因为Apache生成了PHP进程,所以我无法控制PHP进程,所以这似乎更像是服务器配置问题。似乎每个请求都产生一个新的PHP进程(没关系)。我的脚本终止后,PHP进程进入睡眠状态。
这就是顶部的样子。我按内存排序,这些是PHP进程(它们在用户edem上运行):
top - 14:49:35 up 41 days,2:09,2 users,load average: 0.16,0.13,0.06
Tasks: 228 total,1 running,227 sleeping,0 stopped,0 zombie
cpu(s): 0.7%us,0.3%sy,0.0%ni,98.7%id,0.0%wa,0.0%hi,0.3%si,0.0%st
PID USER PR NI VIRT RES SHR S %cpu %MEM TIME+ COMMAND
12358 edem 20 0 67380 6464 2976 S 0.3 0.2 0:00.06 PHP
12250 edem 20 0 66960 9776 6584 S 0.0 0.3 0:00.11 PHP
12253 edem 20 0 67480 7812 3832 S 0.0 0.3 0:00.19 PHP
12254 edem 20 0 67464 7108 3316 S 0.0 0.2 0:00.07 PHP
12255 edem 20 0 67404 7340 3604 S 0.0 0.2 0:00.14 PHP
12256 edem 20 0 67464 7128 3336 S 0.0 0.2 0:00.07 PHP
12257 edem 20 0 67380 6484 3000 S 0.0 0.2 0:00.04 PHP
12258 edem 20 0 67464 7092 3312 S 0.0 0.2 0:00.05 PHP
12259 edem 20 0 67464 7184 3392 S 0.0 0.2 0:00.07 PHP
12260 edem 20 0 67464 7088 3296 S 0.0 0.2 0:00.06 PHP
12263 edem 20 0 66960 9780 6584 S 0.0 0.3 0:00.11 PHP
12265 edem 20 0 67464 7084 3280 S 0.0 0.2 0:00.09 PHP
12266 edem 20 0 67436 7376 3600 S 0.0 0.2 0:00.14 PHP
12267 edem 20 0 67464 7144 3340 S 0.0 0.2 0:00.06 PHP
12268 edem 20 0 67380 6508 3016 S 0.0 0.2 0:00.05 PHP
12269 edem 20 0 67540 7672 3820 S 0.0 0.2 0:00.22 PHP
12270 edem 20 0 67496 6488 3040 S 0.0 0.2 0:00.05 PHP
12271 edem 20 0 67436 7372 3596 S 0.0 0.2 0:00.15 PHP
12272 edem 20 0 67464 7108 3304 S 0.0 0.2 0:00.07 PHP
12277 edem 20 0 66960 9776 6584 S 0.0 0.3 0:00.11 PHP
12279 edem 20 0 67436 7368 3596 S 0.0 0.2 0:00.15 PHP
12280 edem 20 0 67464 7096 3296 S 0.0 0.2 0:00.07 PHP
12281 edem 20 0 67464 7748 3808 S 0.0 0.2 0:00.18 PHP
12282 edem 20 0 67496 7388 3600 S 0.0 0.2 0:00.14 PHP
12283 edem 20 0 67380 6464 2976 S 0.0 0.2 0:00.04 PHP
12284 edem 20 0 67380 6464 2976 S 0.0 0.2 0:00.05 PHP
12285 edem 20 0 67464 7168 3368 S 0.0 0.2 0:00.07 PHP
12286 edem 20 0 67464 7104 3304 S 0.0 0.2 0:00.06 PHP
12287 edem 20 0 66960 9780 6584 S 0.0 0.3 0:00.11 PHP
12289 edem 20 0 67464 7140 3336 S 0.0 0.2 0:00.07 PHP
你有什么想法如何杀死那些睡眠(空闲)的PHP进程?我做错了什么吗?
解决方法
edem,我认为您不应该杀死他们。作为fastcgi的主意,不要产生新的进程。参见http://en.wikipedia.org/wiki/FastCGI#Implementation_details
FastCGI不会为每个请求创建一个新进程,而是使用持久性进程来处理一系列请求。这些进程归FastCGI服务器所有,而不是Web服务器所有。
作为一种解决方法,您可以尝试使用网络服务器的fcgi设置来减少例如“ sleepin \”的数量。另外,我认为您的管理员会告诉您一些高峰使用情况,但是在这里您看不到它,因为您可能会在平静的时候达到最佳状态。