【问题标题】:php script randomly hangs upphp脚本随机挂断
【发布时间】:2010-05-16 07:49:55
【问题描述】:

我将 php 5(更准确地说是 5.3.1)安装为 apache 模块。

在此之后,我的一个应用程序在 mysql_connect 上随机挂断 - 有时有效,有时无效,有时重新加载页面会有所帮助。

如何解决这个问题?

我使用 Windows Vista、Apache/2.2.14 (Win32) PHP/5.3.1 和 php 模块、MySql 5.0.67-community-nt。

一分钟后我收到错误消息:

Fatal error: Maximum execution time of 60 seconds exceeded in path\to\mysqlcon.php on line 9

我在本地运行 MySql,负载过重不是原因:

SHOW PROCESSLIST 显示大约 3 个进程

SHOW VARIABLES LIKE 'MAX_CONNECTIONS' 是 100。

更新:

一开始我以为这是用mysql_connect连接的。 但现在我不能肯定。

更困难的是当我插入行进行调试时:

$fh = fopen("E://_debugLog", 'a'); fwrite($fh, __FILE__ . " : " . __LINE__ . "\n"); fclose($fh);

脚本通常在该位置附近开始工作。

重启apache解决问题。

【问题讨论】:

  • mysql服务器和php服务器在同一台机器上吗?
  • @adam 是的,都在同一个本地主机上
  • 你认为超时是来自 mysql 还是来自 php ?尝试使用 set_time_limit(0);

标签: php apache


【解决方案1】:

您可能会达到 MySQL 连接限制,并且尝试连接的脚本将旋转它的轮子,直到连接可用,但在此之前会遇到最大执行时间限制。当您遇到这些长时间的停顿时,跳到 mysql 监视器并执行SHOW PROCESSLIST,这将列出与服务器的所有连接。您可以使用SHOW VARIABLES LIKE 'MAX_CONNECTIONS' 检索连接限制。如果活动进程的数量接近或处于 max_connections 值,那就是你的问题。

【讨论】:

  • 我更新了问题。不是这种情况。无论如何感谢您的注意。
  • 我猜下一步是从命令外壳检查“netstat”,看看是否有任何连接卡在等待状态(很可能是syn_sent)。您可以尝试切换到使用本地套接字而不是 TCP 连接 MySQL。
  • 经过深入调查(不容易重现)在我看来问题与mysql_connect无关
【解决方案2】:

尝试隔离问题:

  1. 关闭一切(apache mysql)。
  2. 将 apache 和 mysql 的日志记录级别提高到详细级别(这样您几乎可以记录所有内容)。
  3. 从现有脚本中拉出调用 mysql_connect 的单个函数/代码段,并创建一个新脚本,该脚本除了查询 mysql 并返回结果之外什么都不做。 (您也可以注释掉现有脚本中的所有内容)。
  4. 重新启动所有内容并在日志中查找异常情况。
  5. 执行脚本并检查日志。很慢吗?日志中有什么奇怪的东西吗?如果它不慢,请开始从原始脚本中添加/取消注释。它会变慢吗?日志中显示了什么?

【讨论】:

    【解决方案3】:

    它与Did I find a bug in PHP's `crypt()`?中描述的问题有关

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 2012-09-26
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 2011-05-12
      相关资源
      最近更新 更多