2014-11-01 24 views
1

我有一个很大的php网页抓取脚本,它会将结果记录到mysql数据库中,因为脚本通常一次运行5到10分钟。大型PHP脚本减慢应用程序的其余部分....为什么?

问题是,当此脚本运行时,应用程序中的其他页面将无法加载。

该脚本位于具有大量RAM的专用服务器上,因此我尝试增加MYSQL和PHP允许的内存使用量。还增加了允许的最大连接数。这一切都没有帮助。

有没有人有什么我可以尝试的想法吗?

+1

您的网络连接是否饱和?你的CPU最大了吗? – Seventoes 2014-11-01 18:55:57

+1

脚本是否与应用程序的其余部分使用相同的表格? – Rudie 2014-11-01 18:56:28

+0

你的数据库上的InnoDB或MyISAM引擎?行级别锁定v.s.表级锁。巨大的差异。 – Ohgodwhy 2014-11-01 18:57:28

回答

2

可能是您会话中的问题。尝试在启动“大脚本”之前使用session_write_close()。

+0

这完全解决了这个问题......感谢Maxim – 2014-11-03 17:08:36

+0

感谢@maxim,这是一个非常有用的理解 - 当我从ajax调用运行多个php脚本时,这对我很重要。他们正在排队,现在他们正在同时运行。 – 2015-07-17 10:10:42

0

好吧,“减速”和“不加载”有很大区别!

尝试以下操作:

  1. 建立一个静态的HTML网站,并检查它是否是大脚本
  2. 建立一个PHP的网站,不连接到数据库(只是在执行过程中加载以及回声大脚本
  3. 构建一个小型的PHP站点连接到数据库的执行过程中的东西)(只是从表中选择的东西)

如果1或2个工作不正常,你的问题^ h作为与Web服务器或服务器资源共享的东西。如果3不能正常工作,那么mysql服务器可能会有资源问题。

如果一切正常,请检查抓取脚本。它是否锁定主应用程序所需的任何表?

+1

您的最后一个问题在注释中得到了解答,因为引擎是InnoDB,这意味着引擎仅执行行级锁定,而不是MyISAM中发生的表级锁定。 – Ohgodwhy 2014-11-01 19:07:40

相关问题