Проблема собственно вот в чем: мои скрипты php после отработки засоряют оперативную память сервера,но не все конечно. Системный администратор после изучения этой темы говорит что память засоряется после моих скриптов и они являются активными процессами( как я понял спящими по букве S)
Я прекрасно понимаю, что вы не волшебники и не можете проинтуичить без выкладки кода, но может кто то сталкивался с подобными проблемами. Хотелось бы понять алгоритм нахождения ответа. Может он заключается в том чтобы прозвонить код на количество резервируемой под него памяти, найти самый прожорливый участок и оптимизировать его.
Даже если это будет выполнено, памяти будет жрать меньше, но причина похоже не в этом. Может необходимо найти конфигурационный файл сервера и обратить внимание на конкретные строки параметров? В зависимости от ситуации я добавлю сюда необходимую информацию
Или может добавлять какуюто строку кода в php скрипт чтобы сервер убивал соединение?
Да кстати в циклах использую
break;
Также использовал
ini_set('memory_limit', '1024M');
Но после закоменчивания этой строки изменений не было. Или может жестко поступить - найти все переменные и сделать
unset($some_param);
Откуда начинать копать? Статьи по оптимизации кода читал, применяю их на практике, но как известно в этом направлении можно далеко уйти и писать на Ассемблере
Добавлено минутой позже:
Также использую в коде
exit();
в том случае если код не имеет смысла дальше выполнять - или вместо него необходимо использовать
die();
Добавлено 5 минутами позже:
Это веб сервер.
Пользователь загружает фаил эксель для парсинга и получается вышеописанное
NGINX 1.6.2 PHP5-FPM без APACHE
5.6 PHP версия
Добавлено через 9 часов:
на форуме говорится о команде
strace -p
которая показывает что хочет выполнить процесс в нашем случае PID 10354. Это конечно не ответ на вопрос, но может поспособствовать его решению.
На ресурсе сказано что данный режим может быть вызван недостатком мощностей процессора(но по сути какой бы мощный процессор не был, нагрузить его на 100% можно), также сказано что такое поведение наблюдается когда в коде php есть команда
sleep($count_of_seconds);
Да - данная команда ввергает процесс в состояние Sleep, но здесь нет зависимости от количества потребляемой памяти.
Как мне объяснил системный администратор - сколько пользователей на сайте, столько будет спящих www-data, следовательно состояние sleep вполне нормально, ненормально количество удерживаемой для этого процесса памяти.
Добавлено 22,02,2017
Вот что происходит когда остаются 3 спящих процесса
Ответ
Тут оказывается не только дело в скриптах но и в настройках php-fpm а именно надо поиграться с настройками
/etc/php5/fpm/pool.d/www.conf
а именно
pm.max_requests
request_terminate_timeout
request_terminate_timeout устанавливает максимальное время выполнения дочернего процесса, прежде чем он будет уничтожен. Это позволяет избегать долгих запросов, если по какой-либо причине было изменено значение max_execution_time в настройках интерпретатора. Значение стоит установить исходя из логики обрабатываемых приложений, скажем 60s (1 минута).
Комментариев нет:
Отправить комментарий