Ошибки FastCGI приводящие к 503 Service Temporarily Unavailable?

Zergius2

Новичок
Добрый день!

Возникла проблема на хостинге. Периодически сервер на запросы даёт ошибку 503. То картинку не отдаст, то скрипт не отдаст.. в общем в неожиданных местах. Суппорт говорит, что это из-за ошибок при выполнении PHP скриптов, сами ошибки (часть) из error log за сегодня привожу ниже.
В самом php я с горем пополам разбираюсь, но к сожалению в этих ошибках нет :( Тем более, что я вижу что проблема видимо в каких то процессах, но посмотреть что это за процессы я не могу - так как нет доступа. Итак - ошибки:

[Tue Feb 14 13:30:32 2012] [emerg] [client 195.248.173.114] (22)Invalid argument: mod_fcgid: can't lock process table in pid 16926
[Tue Feb 14 13:30:32 2012] [emerg] [client 195.248.173.114] (22)Invalid argument: mod_fcgid: can't lock process table in pid 17251
[Tue Feb 14 13:30:32 2012] [emerg] [client 46.203.167.186] (22)Invalid argument: mod_fcgid: can't lock process table in pid 17688
[Tue Feb 14 13:30:34 2012] [warn] [client 195.248.173.114] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Tue Feb 14 13:30:34 2012] [error] [client 195.248.173.114] Premature end of script headers: chatpushserver.php
[Tue Feb 14 13:45:07 2012] [emerg] [client 195.248.173.114] (22)Invalid argument: mod_fcgid: can't lock process table in pid 25982
[Tue Feb 14 13:45:16 2012] [emerg] [client 195.248.173.114] (22)Invalid argument: mod_fcgid: can't lock process table in pid 25999
[Tue Feb 14 13:45:16 2012] [emerg] [client 195.248.173.114] (22)Invalid argument: mod_fcgid: can't lock process table in pid 25591
[Tue Feb 14 13:45:18 2012] [warn] [client 46.203.167.186] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Tue Feb 14 13:45:18 2012] [error] [client 46.203.167.186] Premature end of script headers: pushserver.php
Судя по всему проблема с двумя аналогичными скриптами - pushserver.php и chatpushserver.php - оба предназначены для опроса mysql и при появлении новых данных - отдача их запросившему запросу.
maximum_execution_time в php.ini установлено 30 секунд.
Ниже привожу лист одного из них, второй такой же:

PHP:
<?php 
session_start();
include 'connect_db.php';
session_write_close(); 
$limit = 25;// number of second the script allowed to run. 
$time = time();
$last_id = (int)$_POST['id'];
// цикл, проверяющий новые сообщения каждые 5 секунд
while ((time()-$time)<$limit) {
    // checking if something new was added to my test table
    $sql = "SELECT * FROM chat WHERE `msg_id`>".$last_id." ORDER BY `msg_id` DESC LIMIT 50";
    $query = mysql_query($sql);
    $rowsnm = mysql_num_rows($query); // кол-во найденых рядов
    if ($rowsnm) {   // если есть новые строки в бд  - то обрабатываем и отдаём клиенту
        $corr=0;
        while ($item=mysql_fetch_array($query)) {
                     // пишем js-скрипт, который выполнится у клиента
         // и отдаем его клиенту
        }
        // выбрасываем все данные и выходим, чтобы клиент смог их обработать
        ob_flush();
        flush();
        exit;
    }
    // если данных нет - ждём 5 секунд
    sleep(5);
}
mysql_close();
?>
Вот такой скрипт... Свою работу он на самом деле выполняет. Ещё смущает то, что ошибки лезут кратно 15-ти минутам, но в совершенно неожиданные моменты.. Кроме того, ошибка 503 чаще всего возникает совершенно не в то время когда ошибки fastcgi... Помогите разобраться пожалуйста, в какую сторону копать?
 

MiksIr

miksir@home:~$
Гугл говорит, что проблема при совершении мягкого рестарта в апаче и как-то связана с cpanel-ю. А посему - ждать решения от cpanel.
 

Zergius2

Новичок
Mikslr, спасибо за идею, нашёл соответствующие ссылки, и ткнул в них техподдержку хостинга, но они продолжают твердить что виноваты скрипты...
 

baev

‹°°¬•
Команда форума
Zergius2, сведите код до минимального, воспроизводящего проблему.
 

Zergius2

Новичок
Может быть стоит идти от обратного - приведенный php код - может ли вызывать вообще ошибку? Или зависать в памяти вечно выполняясь? или что то ещё? Помогите :)

P.S.
baev, сократил. Что ещё может быть не так оформлено, говорите, так как я тут новоявленный, слушаюсь беспрекословно.
 

baev

‹°°¬•
Команда форума
Что ещё может быть не так оформлено
— дело не в оформлении, а в том, чтобы найти проблемный кусок кода.
И либо согласиться в результате с хостером, что виноват код, либо ткнуть хостера носом, типа «в нормальных условиях этот код не должен вызывать таких ошибок».

Поэтому продолжайте сокращать код, пока ошибка не исчезнет.

Может быть стоит идти от обратного - приведенный php код - может ли вызывать вообще ошибку?
— угу, тут у всех php-интерпретатор в мозгу установлен. С телепатическим модулем в придачу — чтобы сразу видеть, что там в «заинклюженном» файле.
 

Zergius2

Новичок
baev
Сокращать код некуда как бы. Тут всё что должно быть, и ничего лишнего.

содержимое "connect_db.php"
PHP:
    <?php
    $dblocation = "mmm";
    $dbname = "mmm";
    $dbuser = "mmm";
    $dbpasswd = "mmm";
    $dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
mysql_query ("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'");


    if (!$dbcnx) 
    {
      echo( "<P>В настоящий момент <b>сервер</b> базы данных не доступен, поэтому 
                корректное отображение страницы невозможно.</P>" );
      exit();
    }
    if (!@mysql_select_db($dbname, $dbcnx)) 
    {
      echo( "<P>В настоящий момент <b>база данных</b> не доступна, поэтому
                корректное отображение страницы невозможно.</P>" );
      exit();
    }
	    ?>
И всё равно, почему кратно 15-ти минутам ошибки, что за.
 

baev

‹°°¬•
Команда форума
Zergius2:
1. http://phpfaq.ru/debug — первым делом «собак» уберите.
2. Даже этот код можно сократить: без «if»'ов ошибки воспроизводятся?

3.
всё что должно быть
— Вам сейчас не «всё» нужно, а минимум, воспроизводящий проблему.
 

Zergius2

Новичок
Провёл кучу испытаний... в общем ситуация получается такая: в любое время кратное 15-ти минутам (к примеру 9:00, 9:15, 9:30 и тд круглосуточно), если в этот момент выполняется такой или подобный скрипт, который проверяет каждые например 10 сек появление чего то нового в бд, грубо говоря цикл ограниченный по времени, так вот если наступает этот момент кратный 15-ти минутам, то в этот момент и лезут эти ошибки mod_fcgi. Не могу понять с чем связана эта кратность 15 минутам. Скрипты выполняются постоянно: цикл закончился, клиент запрашивает скрипт опять. По моему мнению - со скриптом всё нормально. Ошибка пропадает, если там нету цикла с ожиданием, но он необходим. Приложу error logи. (на ошибки file not found не смотрите)
Чую что я не могу повлиять на ситуацию, техподдержка на вопрос про кратность 15-ти минутам морозится, а я не имею представления с чем это может быть связано.
 

Вложения

baev

‹°°¬•
Команда форума
Zergius2, Вы «собак» убрали? Вывод php-ошибок включили?

(У меня большие подозрения, что «слабое звено» — mysql-сервер. Но подтвердить это можно только нормальной отладкой.)
 

Zergius2

Новичок
baev
собак отключил, вывод ошибок в файл включил, ща пару часов погоняю, посмотрю, расскажу.
 

Zergius2

Новичок
В общем, никаких php-ошибок нет. Просто допустим в 20:00 и в 20:15 лезут те ошибки в error log, и несколько копий работающих таких скрипта - пропадают. в другое время всё работает.
 
Сверху