Page 1 of 2
Куча зависших процессов php gallery_checker.php
Posted: Tue Dec 08, 2015 11:11 pm
by xawm
Обнаружил что на сервере очень большой расход памяти. начал изучать и обнаружил что имею 330 процессов "процессов php gallery_checker.php". Причём некоторые из них ранают по несколько дней.
Стал изучать и вот какие факты нашёл:
1. Такие процессы есть как для master сайтов так и для slave
2. Для одного сайта аж до 40 таких процессов.
Убил все из них, но вопросы остались:
1. Почему они зависают и не умирают?
2. Зачем чекать галеры на слейвах?
3. Стоит ли чинить это или просто ограничить время выполнения и пусть просто процесс убивается через сажем 120-240 секунд?
Точно воспроизводится на: (c) SmartCJ Pro V 2.1 Build 201512010036 , если надо завтра могу посмотреть все версии сайтов на которых была проблема.
Re: Куча зависших процессов php gallery_checker.php
Posted: Sun Dec 20, 2015 10:43 pm
by xawm
Пока вы ложите ХУЯ на проблему сервак вывесился в своп из-за зависших gallery_checker.php. Поддержка на высоте...
Хотя самоуверенность и распиздяйство разработчика в этом скрипте похоже главное.
Re: Куча зависших процессов php gallery_checker.php
Posted: Mon Dec 21, 2015 8:03 am
by admin
Пришлите плз доступ на сервак, пока повторить проблему на локале не получается.
Re: Куча зависших процессов php gallery_checker.php
Posted: Mon Dec 21, 2015 5:25 pm
by xawm
Отчаявшись ждать ответа и фикса настроили просто убийство php процессов работаюзих дольше 2х часов. Сейчас таких процессов нету. Доступ какой нужен? root? или достаточно юзера который имеет доступ к запуску php кронов?
Re: Куча зависших процессов php gallery_checker.php
Posted: Mon Dec 21, 2015 9:21 pm
by xawm
А вообще блин надо бы и аналитически думать. Почему скрипт может зависать навечно:
1. бесконечный цикл (очень надеюсь что это не этот случай иначе окопы рыть уже поздно)
2. какая-то блокирующая операция. Например IO. Например curl на плохой галере с CURLOPT_CONNECTTIMEOUT = 0.
Пересмотрите код на предмет вышеназванных причин + если не найдётся то добавляйте тонны логгинга и давайте еге энейблить на сервере.
Update:
Собственно говоря вооружившись netstat, ps и grep выясняется что эти процессы держат исходящий коннект на 66.152.82.22:80 что является сервером платника на котором захостаны FHG. Итого предположение №2 похоже имеет место быть не предположением. Предполагаемый сценарий:
1. Скрипт доходит в свеой проверке до плохой галеры которая не раздаётся
2. Скрипт до усрачки пробует забрать галеру.
P.S.: Очень надеюсь что хватит у вас времени и желания не положить хуя, а по приведённой выше инфонмации пофиксить.
P.P.S.: тут от одного нашего общего знакомого поступило предположение что Спон может подбанивать IP сервера за частые запросы, поэтому фейлить галеру сразу нельзя если её чек не прошёл.
Re: Куча зависших процессов php gallery_checker.php
Posted: Wed Dec 23, 2015 5:59 am
by admin
Дефолтный таймаут 300 секунд
вот пример скирпта для проверки этой проблемы
если он у вас не отваливается после 30 секунд при запросе того урла то что-то не так с curl
Code: Select all
<?php
error_reporting(E_ALL & ~E_NOTICE);
$data = array(
array('url' => 'http://test.com/')
);
print_r(multiRequest($data));
function multiRequest($data, $options = array()) {
$curly = array();
$result = array();
$mh = curl_multi_init();
foreach ($data as $id => $d) {
$curly[$id] = curl_init();
$url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d;
curl_setopt($curly[$id], CURLOPT_URL, $url);
curl_setopt($curly[$id], CURLOPT_HEADER, 1);
curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curly[$id], CURLOPT_FOLLOWLOCATION, 1);
if ($d['type'] == '404_check') curl_setopt($curly[$id], CURLOPT_NOBODY, 1);
curl_setopt($curly[$id], CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 ');
//curl_setopt($curly[$id], CURLOPT_VERBOSE, 1);
curl_multi_add_handle($mh, $curly[$id]);
}
// execute the handles
$running = null;
do {
curl_multi_exec($mh, $running);
sleep(1);
} while($running>0 && $ready!=-1);
foreach($curly as $id => $c) {
$info = curl_getinfo($c);
//print_r($info);
$result[$id] = ($info['http_code'] == 200) ? curl_multi_getcontent($c) : $info['http_code'];
curl_multi_remove_handle($mh, $c);
}
curl_multi_close($mh);
return $result;
}
Re: Куча зависших процессов php gallery_checker.php
Posted: Tue Jan 05, 2016 12:36 pm
by xawm
Результаты тестов?
Code: Select all
$data = array('url' => 'http://test.com/')
Вывел HTML контент страницы
Code: Select all
$data = array('url' => 'http://test3333.com/')
Залип и был убит через 2 часа.
Ещё исследование:
Вчера на всех серверах одновременно стало рости колличество PHP процессов (+1-1.5к процессов на сервер). Скорее всего gallery_checker (доказательств нет). Через 2 часа процессы были убиты и следов не осталось. Есть предположение что у Спона были проблемы с сервером и FHG либо не отдавались, либо отдавались медленно. И собственно curl и позависали.
Соответственно лимиты похоже не отрабатывают. Сейчас буду гуглить как их с конфигов выставлять.
К слову:
Code: Select all
php --version
PHP 5.4.16 (cli) (built: Jun 23 2015 21:17:27)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v5.0.11, Copyright (c) 2002-2015, by ionCube Ltd.
Обновлятся?
Update:
как выключить эту фичу полностью до тех пор пока не решим проблему?
Re: Куча зависших процессов php gallery_checker.php
Posted: Wed Jan 06, 2016 7:15 am
by admin
Можно в админке выключить чек галер
Либо переименовать сам файл
Залип и был убит через 2 часа.
А должен был отвалиться тк
CURLOPT_CONNECTTIMEOUT
Pass a long. It should contain the maximum time in seconds that you allow the connection phase to the server to take. This only limits the connection phase, it has no impact once it has connected. Set to zero to switch to the default built-in connection timeout - 300 seconds.
А в примере мы его нигде не передаем, те должно быть дефолтным .
Re: Куча зависших процессов php gallery_checker.php
Posted: Wed Jan 06, 2016 8:31 am
by xawm
А может не будет плохим решением передать TIMEOUT явно?
Re: Куча зависших процессов php gallery_checker.php
Posted: Sat Jan 09, 2016 5:06 am
by admin
Да, можно и так конечно, а у вас добавление этого параметра в тестовом скрипте помогло ?