Сведения о вопросе

PASHA

02:12, 20th August, 2020

Теги

php   performance   sleep    

sleep() молчаливые свиньи CPU

Просмотров: 511   Ответов: 3

Я запускаю Apache на Linux в пределах VMWare.

Одна из PHP страниц, которые я запрашиваю, делает sleep() , и я обнаруживаю, что если я попытаюсь запросить вторую страницу, пока первая страница является sleep()'ing, вторая страница зависает, ожидая завершения sleep() с первой страницы.

Кто-нибудь еще видел такое поведение?

Я знаю, что PHP не является многопоточным, но это похоже на грубое неправильное обращение с CPU.

Edit: я должен был упомянуть, что использование CPU не вызывает скачков. Что я имею в виду CPU "hogging" заключается в том, что никаких других PHP страницы, кажется, в состоянии использовать CPU, пока страница sleep() передоза.



  Сведения об ответе

screen

02:01, 12th August, 2020

Возможно, что вызываемая страница открывает сеанс, а затем не фиксирует его, в этом случае смотрите этот ответ для решения.


  Сведения об ответе

+-*/

06:34, 6th August, 2020

Вероятно, это означает, что ваш Apache использует только 1 дочерний процесс.

Следовательно:

1-й дочерний процесс обрабатывает запрос (в данном случае спящий, но он может выполнять реальную работу, Apache не может сказать разницу), поэтому, когда приходит новый запрос, ему придется подождать, пока не будет выполнен первый процесс.

Решением было бы увеличить число дочерних процессов Apache, разрешенных для порождения (директива MaxClients , если вы используете префорк MPM), просто удалите sleep() из сценария PHP.

Не зная точно, что происходит в вашем сценарии, трудно сказать, но вы, вероятно, можете избавиться от sleep().


  Сведения об ответе

P_S_S

22:59, 17th August, 2020

Вы действительно видите, что CPU переходит на 100% или просто не обслуживаются другие страницы? Сколько apache-экземпляров вы запускаете? Все ли они останавливаются, когда вы запускаете sleep() в одном из потоков?

Функция PHP sleep() по существу проходит через цикл холостого хода в течение n секунд. Он не освобождает никакой памяти, но и не должен значительно увеличивать нагрузку CPU.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться