本地主机上的 Apache 超时(页面加载问题)

本地主机上的 Apache 超时(页面加载问题)

我在 Firefox Web 浏览器中本地运行一个 php 脚本。300 秒后,我收到一个错误页面。“加载页面时出现问题。连接已超时。本地服务器响应时间过长。”脚本仍在运行,但我觉得它运行速度非常慢。

假设:Apache 超时是导致错误页面的原因(因为它设置为 300)。但我不明白为什么会发生这种情况。这不是我第一次运行需要很长时间的 php 脚本。有时我的脚本会运行几天。这个特定的脚本正在从 InnoDB 表(350k 条记录)读取出版数据,并用分号拆分作者。然后将这些作者姓名写回到另一个表中。

简单地增加超时并不是解决办法。我需要修复导致超时的任何原因。毫无疑问,这也是我的脚本运行如此缓慢的原因。

我找到了插入速度慢的原因:由于我使用的是 InnoDB,所以我应该将插入包装在事务/提交中。

超时的可能原因是:在 Unix 中指定 127.0.0.1 将使用 TCP/IP 而不是 UNIX 套接字。

http://httpd.apache.org/docs/2.2/mod/core.html#timeout我读到“TimeOut 指令定义了 Apache 在各种情况下等待 I/O 的时间长度:从客户端读取数据时,如果读取缓冲区为空,则等待 TCP 数据包到达的时间长度。将数据写入客户端时,如果发送缓冲区已满,则等待数据包确认的时间长度。[...]”。

我将非常感激任何形式的帮助,例如查看特定日志文件或运行特定命令以获取更多信息的说明。据我所知,Apache 超时与互联网流量有关,但我没有连接任何东西,所以……好吧,我迷路了。谷歌也帮不上忙。

一些环境信息:

  • PHP 5.3.10-1ubuntu3.11 带有 Suhosin-Patch (cli)(构建于:2014 年 4 月 4 日 01:30:04)
  • mysql Ver 14.14 Distrib 5.5.37,适用于 debian-linux-gnu (x86_64),使用 readline 6.2
  • Ubuntu 12.04.4 LTS,3.5.0-51-通用
  • FRITZ!Box Fon WLAN 7360,FRITZ!OS 06.04
  • LAN 2 为 100 Mbit/s(绿色模式,而不是 1 Gbit/s 电源模式)

我使用了 125.9 GiB 内存中的 12.0 GiB。无交换。平均负载约为 2.3。还有 1.9 TiB 可用磁盘空间。

到目前为止我已经尝试过:

  • 我的浏览器中的“离线工作”
  • 转到127.0.0.1而不是本地主机
  • 在 httpd.conf 中我将 ServerName Localhost 更改为127.0.0.1:80
  • 在 php 脚本中,首先检索所有数据,关闭结果集,然后从数组开始工作。

每当我对配置文件进行更改时,我都会重新启动 apache2 和 mysql。

PHP脚本:

set_time_limit( 0 );
ini_set( 'display_errors', 1 );
ini_set( 'memory_limit', '4G' );
error_reporting( E_ALL|E_STRICT );
$mysqli = new mysqli( 'localhost', 'root', 'mypassword', 'WoS_Mexico_1990-2014' );
if ( $mysqli ) {
    $sql = 'SELECT `ID`, `AU`, `AF`, `C1`, `RP`, `EM`, `RI`, `OI` FROM `WoS`;';
    if ( $result = $mysqli->query( $sql ) ) {
        while ( $row = $result->fetch_assoc() ) {
            // do some things such as explode strings into arrays
            $sql = 'INSERT INTO ...';
            $mysqli->query( $sql );
        }
        $result->close();
    }   
    $mysqli->close();
}

我有跳过名称解析在 my.cnf 中。

在类似的主题中,有人发布了 netstat 结果,因此这是我的。

daigu@Jiriki:~$ sudo netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State           PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      7423/mysqld     
tcp        0      0 127.0.0.1:5939          0.0.0.0:*               LISTEN      2256/teamviewerd
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      2281/dnsmasq    
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1247/cupsd      
tcp6       0      0 :::80                   :::*                    LISTEN      7390/apache2    
tcp6       0      0 ::1:631                 :::*                    LISTEN      1247/cupsd      

mysqld 使用 tcp,而 apache2 使用 tcp6。这有问题吗?

查看各种日志文件,我注意到我也受到了 UFW 垃圾邮件的困扰。

6月7日 13:34:29 Jiriki 内核:[88803.827685] [UFW BLOCK] IN=eth1 OUT= MAC=01:00:5e:00:00:01:08:96:d7:af:89:26:08:00 SRC=192.168.178.1 DST=224.0.0.1 LEN=36 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2

daigu@Jiriki:/var/log$ sudo ufw status verbose 状态:活动 日志记录:开启(低) 默认:拒绝(传入),允许(传出) 新配置文件:跳过

此外,apache2/error.log 也相当大。最后一行是:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/http.so' - /usr/lib/php5/20090626/http.so: cannot open shared object file: No such file or directory in Unknown on line 0

[2014 年 6 月 6 日星期五 19:32:12] [通知] Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.11 已配置 Suhosin-Patch — 恢复正常运行

但这似乎是一个老问题,2 月 16 日首次出现。

超时不再发生,尽管 - 据我所知 - 我没有对任何配置文件进行任何更改。

回答 Braiam 的问题:Apache 日志中没有任何内容表明存在配置错误。一切都运行正常,即使我的浏览器显示超时,php 脚本实际上仍会继续运行(应该如此)。

相关内容