2012-03-13 149 views
1

我在Apache上有许多睡眠脚本的问题。当我启动apache,并清除缓存内存到13GB免费,然后空闲内存仍然下降到ap。 100MB免费。许多PHP进程要睡觉并保持缓存内存。一个脚本有19 MB。Apache内存问题

有时睡眠脚本甚至从内存中保留700MB。是一些设置,当脚本结束时如何告诉Apache,然后处理结束?

+0

可用内存(所报告的'free')未使用,失去的记忆。内核使用RAM进行文件系统缓存...... – 2012-03-13 07:03:18

+0

问题是,睡眠过程ssis仍在增长,ap。 1/60s,当可用内存降至100 MB时,即使真的不使用内存很多,系统也会从磁盘进行交换。 – user1173536 2012-03-13 07:12:46

+0

php不适合长期居住的应用程序,但它是可能的。所以这是一些漏记php代码的问题。但是,当脚本结束时,Apache/php应该释放所有使用过的内存。 – kirilloid 2012-03-13 07:32:51

回答

0

没有你的问题不是“与阿帕奇多睡脚本”,是你使用睡在Apache的脚本。睡觉对于大多数Web服务器来说都是一种诅咒,这些服务器都是为了一个目的而设计的:接收和响应基于无状态HTTP(S)的Web请求。

睡觉,本身,不是绝对邪恶的,但如果总的延迟超过几秒钟,然后你正在做的事情非常错了,你需要探索其他方法。

例如,phpBB通过使用排队请求表和常用检查函数来实现伪cron类型的函数,其中web请求调度未来的工作活动(例如每小时对应用程序相关的表维护)。如果计划的任务到期,则使用一个像素的图像请求来生成异步回调来执行该活动。 (通过这样做的图像负荷此请求来自那个顺便触发它的URI解耦。

另一种方法是使用独立的守护程序或计划作业的变体来服务该排队的请求表。

另一种方法是简单地执行一个子进程,然后叉daemonise本身和Apache的工作进程分离。

而另一种方法......

1

在Apache中运行的PHP的资源和时间限制由php.ini控制
这两个设置是自我解释。

max_execution_time = 30 
memory_limit = 128M 

所以我不认为脚本会永久睡眠并耗尽你的记忆。
请先检查这些设置。

+0

我将memory_limit设置为2048,因为许多脚本正在进行硬操作并且max_execution_time为1000000,因为很多脚本运行了很长时间,有些是永久的。 – user1173536 2012-03-13 08:04:59

+2

然后由Apache运行的PHP不适合你的需要。你应该考虑其他方法。 – Magic 2012-03-13 08:12:08