php sleep或usleep冻结整个服务器

时间:2013-04-07 14:52:34

标签: cron sleep freeze

我在数据库中有一个大表,几乎每秒都会更新一次。我想每5秒查询一次该表以获取最新的条目(直播)。

我无法查询每个访问者的数据库(ajax post request每5秒一次)因为mysql会死掉。这就是我需要缓存文件的原因。我在一个文件中写入数据而不是访问者,javascript将每隔5秒打开/读取/关闭文件。

一切正常,但我在使用cronjob + sleep时遇到了麻烦。

在cpanel中,我无法设置5秒钟的cronjobs,这就是为什么我在5秒睡眠中运行12个周期的for()。

for($i = 0; $i <12; $i++){
   mysql_query() /// writing in file, etc.

   sleep(5);
}

问题是这会冻结整个服务器60秒。不仅是cronjob php文件,整个网页都已超时。

我该怎么办?我做得对吗?

1 个答案:

答案 0 :(得分:0)

请注意,无法保证您发布的代码将在60秒内完成。实际上,该代码将在至少60秒内运行。我不确定这是否重要,但这意味着通过cron运行的这个脚本的两个或更多实例之间会有一段时间的重叠。

根据您的查询以及处理数据库和缓存读/写的方式,您可能会创建数据库锁定或死锁情况,从而导致脚本运行时间过长。长时间运行意味着它可能占用数据库/服务器资源。这种情况是我倾向于导致网页超时的原因。我需要有关您的查询和数据库/缓存文件的更多详细信息。