O script do MySQL em lote parou com erro “(104) Conexão redefinida pelo peer” [closed]

1

No meu site eu inicio um script que executa um processo em lote que importa para o banco de dados Mysql muitos produtos (textos e imagens). Estou monitorando o processo de consulta do Phpmyadmin > Status e percebo que após alguns minutos o número de consultas diminui de ~ 900 para ~ 30, o que significa que o script está parado! Então eu verifico o error_log e de fato existe esse erro:

[Thu Oct 02 17:09:34 2014] [warn] [client xxx.xxx.xxx.xxx] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server 
[Thu Oct 02 17:09:34 2014] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: insert_products.php 

Como pode resolver isso?

Algumas informações:

VPS server: 1 CPU; 40gb; RAM 1GB
OS: CentOS 6.5 (Final)
Plesk version: 12.0.18

O que eu tentei por meio do console SSH (lendo isso ):

# /usr/local/psa/admin/bin/php_handlers_control --list
id: display name: version: type: cgi-bin: cli-bin: php.ini:
module 5.3.3 5.3.3 module /usr/bin/php-cgi /etc/php.ini
fastcgi 5.3.3 5.3.3 fastcgi /usr/bin/php-cgi /etc/php.ini
cgi 5.3.3 5.3.3 cgi /usr/bin/php-cgi /etc/php.ini

# /usr/bin/php-cgi -v
PHP 5.3.3 (cgi-fcgi) (built: Aug 6 2014 05:52:41)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with the ionCube PHP Loader v4.6.0, Copyright (c) 2002-2014, by ionCube Ltd.

# free -m
total used free shared buffers cached
Mem: 988 818 170 0 72 233
-/+ buffers/cache: 512 475
Swap: 1023 54 969

# ls -la /etc/passwd
-rw-r--r--. 1 root root 1910 23 set 12:20 /etc/passwd

No php.ini

/var/www/vhosts/system/mydomain.com/etc

estas são as únicas propriedades que editei:

max_input_time = 360000
max_execution_time = 360000
memory_limit = 1G
upload_max_filesize = 1G
    
por Fred K 02.10.2014 / 18:57

1 resposta

0

Você disse que estava executando um script do MySQL. Mas parece que este é um script PHP que executa o processo em lote. Em ambos os casos, é possível que você esteja criando uma única transação enorme? Se você estiver usando um dos mecanismos transacionais do MySQL (InnoDB é o padrão em novas versões do PHP), uma transação será iniciada no início do script. Em seguida, concluído no final. É uma prática recomendada em tarefas em lote SQL de longa execução para confirmar periodicamente os dados. Caso contrário, a transação preenche a RAM e, eventualmente, morre.

Também vejo essa mensagem algumas vezes quando executo um comando SQL em um console remoto e o servidor MySQL expira. Para resolver isso eu SSH no servidor e executar o comando de longa duração localmente no console do MySQL.

Espero que isso ajude.

    
por 22.10.2014 / 03:28