виртуализация — как PHP использует более 100% процессорного времени?

Проверяя клиентское приложение на стороннем виртуальном сервере, я заметил интересное явление:
Кажется, что отдельные процессы PHP используют более одного ядра. Насколько я знаю, PHP не может этого сделать.

Описание поведения
Вот вывод htop при обработке одного запроса к веб-приложению:
Вывод htop

Вывод htop, зеленый — процессор пользователя, красный — системный процессор.

Все четыре ядра на 100%, только один процесс PHP на 396%, процессор и низкое использование памяти.

Я уже исследовал процессор высокой системы, используя strace или pidstat, но не смог найти проблем с IO.

Информация о сервере

Виртуальный сервер представляет собой среду Debain LAMP, использующую Intel VT-X Virtualization и Virtuozzo, обеспечивающую 4 ядра на частоте 560 МГц:

Вывод lscpu

Вывод lscpu

Сервер работает под управлением PHP 5.5.9 в быстром CGI, обслуживаемом Apache 2.4.7 (prefork).
Nginx 1.9.4 служит прокси-сервером, а Plesk 12.5 используется для настройки сервера.

Пример кода PHP (РЕДАКТИРОВАТЬ)
Чтобы исключить код приложения в качестве источника, я подтвердил поведение, используя простой фрагмент кода:

$array = array('z', 'y', 'x', 'h', 'd', 's', 'w', 'q', 'a');
for ($i=0; $i < 9999999; $i++) {
sort($array); // Delaying execution
}
echo 'loop ended';

Два или более процессов PHP (РЕДАКТИРОВАТЬ)
Если два или более запроса обрабатываются одновременно, каждый процесс выполняется на максимально возможном количестве ядер (2 процесса => 2 ядра каждый, 3 процесса => 1,33 ядра каждый).

Вопросы

  • Возможно ли для PHP использовать более одного ядра одновременно?
  • Может ли это быть связано с виртуализацией?
  • Продолжение: Что может быть причиной доминирования системного процессора?

8

Решение

  • Возможно ли для PHP использовать более одного ядра одновременно?

Да, это называется pthreads. Он предназначен для создания многопоточности в PHP.

  • Может ли это быть связано с виртуализацией?

Навряд ли. Я думаю, так же, как сказал Уилл, это, вероятно, подпроцесс, запускаемый php.

  • Продолжение: Что может быть причиной доминирования системного процессора?

Это полностью связано с приложением. Но любая многоядерная задача, запущенная php, может так выглядеть. Java-приложение для растеризации набора изображений SVG для примера.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]