Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 30.06.2018
Сообщений: 2

Нагрузка на процессор в конце долгого PHP-скрипта

30.06.2018, 19:26. Показов 1543. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Есть php-скрипт-парсер, который выполняется в среднем 4-5 часов. Запускается в Cron c интервалом в 5 мин, но т.к. стоит защита от повторного запуска - то по сути следующая итерация запускается только после конца предыдущей и с этим проблем нет. Условная структура скрипта выглядит так:


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
// Защита от двойного запуска
$lock = fopen('/tmp/lock_file.lock', 'w');
if ( !($lock && flock($lock, LOCK_EX | LOCK_NB)) ) {
    exit( 'already running' );
}
 
// Коннект к БД
$sql = mysqli_connect('...', '...', '...', '...');
if ( !$sql ) die ("Error");
 
// Парсинг
foreach ($s1 as $k1)
{
    ...
foreach ($s2 as $k2)
{
    ...
foreach ($s3 as $k3)
{
    ...
foreach ($s4 as $k4)
{
    ...
}
foreach ($s5 as $k5)
{
    ...
foreach ($s6 as $k6)
{
    ...
foreach ($s7 as $k7)
{
    ...
}
$query = "INSERT INTO tabl1 (r1, r2, r3, r4, r5, r6, r7, r8) VALUES ('$k1', '$k2', '$k3', '$k4', '$k5', '$k6', '$k7', '$k8') ON DUPLICATE KEY UPDATE r5='$k5', r6='$k6', r7 = '$k7', r8='$k8'";
mysqli_query($sql, $query);
flush();
}
}
}
}
}
// Удаляем из БД все записи, которым больше 24 часов
$now_delete = date("Y-m-d H:i:s", time() - 86400);
$query_delete = "DELETE FROM tabl1 WHERE r8<'$now_delete'";
if (  mysqli_query($sql, $query_delete)  ) echo "Старые записи подчищены.<br>";
else echo "Старые записи не подчищены <br>";
 
mysqli_close( $sql );
?>

Проблема в том, что именно в конце выполнения скрипта (по прошествии 4-5 часов) создается большая нагрузка на процессор сервера (порядка 30 cpu). То, что нагрузка создается именно на исходе скрипта видно по статистике нагрузки от хостера (она разделена по часам). Нагрузка на MySQL околонулевая. Узнать больше, чем то, что нагрузка создается именно этим скриптом - в логах сервера нельзя. Изначально я грешил на последнюю операцию очистки БД, но убрав ее - ничего не изменилось. Почему может так получаться, что скрипт выполняет по сути одно и то же в цикле 5 часов (запись в базу), а именно в конце создает такую нагрузку?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.06.2018, 19:26
Ответы с готовыми решениями:

PHP - Замена долгого кода
Всем привет, хочу узнать, можнo ли в php заменять долгие строки &lt;?php echo $welcomemessage; ?&gt; на {welcomemessage} либо &lt;?php echo...

Нагрузка на процессор
Здравствуйте. Появилась необходимость разобраться с тем, почему не работает (периодически падает) веб-сервер. Я не сисадмин и стал изучать...

Нагрузка на процессор
Заранее извиняюсь если не туда написал. У меня ОС Windows Vista. У меня в диспетчере задач почему то находится около 12-15 процессов...

3
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
01.07.2018, 12:57
Запустить через strace и анализировать что оно делает. По коду ничего выдающегося не видно
1
0 / 0 / 0
Регистрация: 30.06.2018
Сообщений: 2
02.07.2018, 21:53  [ТС]
Проанализировал задержки по времени и использование памяти на протяжении всего действия скрипта - проблем ни с тем, ни с другим нет. Пришел к выводу, что нагрузка создается именно в конце 5-часового парсинга просто потому, что скрипт завершился - хостинг логирует нагрузку, которую скрипт создал. Почитал, оказывается такие долгие скрипты надолго полностью занимают процессор сервера - вот и фиксируется нагрузка. Еще почитал - есть решение со вставкой sleep() внутри циклов для периодического освобождения процессора и снижения нагрузки. Но мне принципиальна скорость выполнения скрипта, и увеличивать время выполнения до 10+ часов я не хочу. Вопрос: есть ли какой-нибудь способ снижения нагрузки в таком случае?
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
02.07.2018, 22:19
Разделяй и властвуй. Если дело действительно в многочасовой беспрерывной работе, то логично ограничить работу скрипта по времени. Час поработает, 5 минут отдых и продолжит где остановился.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.07.2018, 22:19
Помогаю со студенческими работами здесь

Нагрузка на процессор
Здравствуйте, как только открываю диспетчер задач вижу что процессор загружен на 100 процентов, и сразу сбрасывается до 15-30 проц, и так...

Нагрузка на процессор
У меня стоит процессор Pentium 4. Последнее время сильно загружается программами, отчего тормозит компьютер. Так я хочу выяснить, вот...

Нагрузка на процессор
как проверить на сколько загружается процессор во время работы скрипта? я вычитал что проверять так $data=getrusage(); echo...

Нагрузка на процессор!
Недавно начала резко подниматься нагрузка на процессоре до 80-100%. Процессор AMD A-10 5700. Поняв что тут что-то не то я решил почистить...

нагрузка на процессор
загруженность моего процессора 100%.и все тормозит.в чем причина?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru