Apache Timeout (Página de carregamento de problemas) no host local

1

Estou executando um script php localmente no meu navegador Firefox. Depois de exatamente 300 segundos, recebo uma página de erro. "Problema ao carregar a página. A conexão expirou. O servidor no localhost está demorando muito para responder." O script ainda está em execução, mas parece extremamente lento para mim.

Suposição: o Tempo Limite do Apache é a causa da página de erro (como está configurado para 300). Mas eu não entendo porque isso está acontecendo. Não é a primeira vez que estou executando um script php que está demorando muito tempo. Às vezes meus scripts são executados por alguns dias. Este script em particular está lendo dados de publicação de uma tabela InnoDB (registros 350k) e dividindo os autores por ponto-e-vírgula. Esses nomes de autores são então gravados em outra tabela.

Simplesmente aumentando o tempo limite não é a solução aqui. Eu preciso consertar o que está causando o tempo limite. Sem dúvida, é também a razão pela qual meu script está rodando tão devagar.

Encontrei o motivo das inserções lentas: como estou usando o InnoDB, eu deveria ter colocado minhas inserções em uma transação / confirmação.

E uma possível razão para o tempo limite: especificar 127.0.0.1 no Unix usará TCP / IP em vez de um soquete UNIX.

No link , posso ler que "a diretiva TimeOut define o período de tempo O Apache esperará pela E / S em várias circunstâncias: Ao ler dados do cliente, o tempo de espera para que um pacote TCP chegue se o buffer de leitura estiver vazio Ao gravar dados no cliente, o tempo de espera para um reconhecimento de um pacote se o buffer de envio estiver cheio. [...] ".

Eu ficaria muito grato por qualquer tipo de ajuda, como instruções para olhar para um determinado arquivo de log ou para executar um determinado comando para obter mais informações. Até onde sei, o tempo limite do Apache lida com o tráfego da Internet, mas não estou me conectando a nada, então ... bem, estou perdido. O Google também não ajuda.

Algumas informações do ambiente:

  • PHP 5.3.10-1ubuntu3.11 com Suhosin-Patch (cli) (construído em: 4-04-2014 01:30:04)
  • mysql Ver 14.14 Distrib 5.5.37, para debian-linux-gnu (x86_64) usando readline 6.2
  • Ubuntu 12.04.4 LTS, 3.5.0-51-genérico
  • FRITZ! Box Fon WLAN 7360, FRITZ! OS 06.04
  • LAN 2 a 100 Mbit / s (modo verde, em vez de modo de energia de 1 Gbit / s)

Estou usando 12.0 GiB de memória de 125.9 GiB. Sem troca. Média de carga de cerca de 2,3. E ainda 1,9 TiB de espaço em disco disponível.

O que tentei até agora:

  • "Trabalhe off-line" no meu navegador
  • Ir para 127.0.0.1 em vez de localhost
  • No httpd.conf eu mudei o ServerName Localhost para 127.0.0.1:80
  • No script php, primeiro recupere todos os dados, feche o conjunto de resultados e, em seguida, trabalhe em uma matriz.

Sempre que eu fiz alterações em um arquivo de configuração, reiniciei o apache2 e o mysql.

O script do 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();
}

Eu tenho skip-name-resolve em my.cnf.

Em um tópico semelhante, alguém postou resultados do netstat, então aqui está o meu.

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      

o mysqld está no tcp enquanto o apache2 está no tcp6. Isso é um problema?

Olhando nos vários arquivos de log, notei que também estou sofrendo de spam UFW.

Jun 7 13:34:29 Kernel Jiriki: [88803.827685] [BLOCO UFW] IN = eth1 SAÍDA = 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 detalhado Status: ativo Registro: ligado (baixo) Padrão: negar (entrada), permitir (saída) Novos perfis: pule

Além disso, o apache2 / error.log é bastante grande. A última linha é:

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

[Sex 06 jun 19:32:12 2014] [notice] Apache / 2.2.22 (Ubuntu) PHP / 5.3.10-1ubuntu3.11 com o Suhosin-Patch configurado - retomando as operações normais

Mas isso parece ser um problema antigo, aparecendo primeiro em 16 de fevereiro.

O tempo limite não está mais ocorrendo, embora - tanto quanto eu saiba - eu não tenha feito nenhuma alteração em nenhum arquivo de configuração.

E para responder à pergunta de Braiam: não havia nada nos logs do Apache para indicar que havia um erro de configuração. Tudo estava correndo muito bem, e o script php na verdade continuaria a rodar (como deveria), mesmo que meu navegador estivesse exibindo um Timeout.

    
por Daigu 07.06.2014 / 14:28

0 respostas