2

我有一个运行 PHP 的项目,带有常规的 AJAX 发布请求(每 60 秒)。不幸的是,服务器不断达到它的资源限制(我在共享主机上),即 - CPU %。

我几乎尝试了所有方法,最后我想到了在 PHP 中减少 set_time_limit 的想法。有人可以告诉这是否会有任何不同吗?这会使脚本更快地“释放”它们的资源吗?或者相反 - 这要么没有效果,要么效果是负面的?

提前感谢所有答案!

PS我试图减少时间:

set_time_limit(5);
ini_set("max_execution_time", 5);

PHP 在 FastCGI 上运行。

4

2 回答 2

1

如果 PHP 程序运行时间超过最大执行时间,它将因超时错误而崩溃。

简单地改变你的最大执行时间不会让任何东西运行得更快;但是如果您的代码运行时间超过 5 秒,那么它将导致您的程序崩溃而不是完成。

这肯定会释放服务器资源,但可能不会以一种有用的方式。

如果您的程序需要很长时间才能运行(即这种程序超过一秒钟),您最好的选择是对程序本身进行一些性能分析;使用像 XDebug 这样的工具来分析瓶颈在哪里以及为什么它运行缓慢,并改进程序以使其更快。

于 2013-10-30T14:22:35.223 回答
0

一般来说,如果您长时间使用最大 CPU,就是您需要解决的问题;不要过早地杀死进程。

如果您发布常规 CPU 密集型 ajax 请求,请尝试以下操作;

  • 在服务器端,看看您是否可以创建“捷径”来处理数据。如果什么都没有修改或需要修改,请尽早剪切脚本。例如,检查数据的修改时间,并在脚本和请求处理中添加“未修改”功能。
  • 优化您的脚本。使用“调用研磨”来识别问题区域。
  • 确保你没有循环 mysql 查询;尝试运行更少的查询并让任何循环只组装更大的查询(例如插入)
  • 查看是否需要在这些时间间隔内发出 ajax 请求。例如,使用 Javascript 尝试检测用户是否正在查看屏幕(例如,窗口没有聚焦);在用户离开或空间请求更稀疏时停止请求。
  • 根据活动将您的 ajax 请求放入两个队列中。如果用户最近处于活动状态(移动鼠标,聚焦窗口)切换到 1 分钟间隔。如果已经有一段时间了,请将间隔间隔得更远,这样您就不会进行太多查询。

该解决方案不应该提前终止脚本或故意导致崩溃。这为非常不受欢迎的问题打开了大门。如果您使用 ajax 来频繁地 ping 服务,那么这些调用需要简短而快速。

于 2013-10-30T14:47:19.347 回答