Как сделать php лучше для процессора? - PullRequest
2 голосов
/ 19 декабря 2008

Я работаю на общем * сервере NIX (запущенном на Site5). У меня есть сценарий php, который запускается в фоновом режиме, иногда делая некоторые автономные вычисления. Во время работы он использует около 100% процессора. Я попытался сделать это, например:

nice -n 19 php script.php

но это, похоже, не имеет никакого значения.

Ответы [ 5 ]

8 голосов
/ 19 декабря 2008

Вы можете разбросать usleep (int $ micro_seconds) по вашему коду. Это заставит ваш скрипт остановиться на крошечное время, оставив процессор свободным для других вещей.

Будет ли это необходимо? Если у вашего сценария низкий приоритет, имеет ли значение, что он использует 100% ЦП ... Если нужны другие процессы с более высоким приоритетом, ЦП не получит необходимое им время, а ваш скрипт получит остальное 100%)

5 голосов
/ 19 декабря 2008

Даже замечательно, он будет использовать 100% CPU, если доступно. Однако ядро ​​будет отдавать приоритет любым другим (незаметным) процессам, которые идут вместе.

4 голосов
/ 19 декабря 2008

Пока система отзывчива, и вы можете выполнять другую работу, пока она работает, я бы об этом не беспокоился. Я запускаю клиент распределенных вычислений в своих системах, и он впитывает любые доступные циклы ЦП. Поскольку он работает с самым низким приоритетом, любой и все другие процессы будут вытеснять его по мере необходимости.

1 голос
/ 20 декабря 2008

Приятно меняется то, как часто ваш php приводит к 100% -ной загрузке процессора, если есть значительные процессы для переключения контекста, а не сколько.

В тот момент, когда программа выполняет системный вызов, ядро ​​может передать ЦП другому процессу перед выполнением реальной работы. Ваш php не выполняет никаких системных вызовов, когда работает на полной скорости. То есть вы не выполняете какие-либо блокирующие операции ввода-вывода (сокет, файл и т. Д.) Проверьте, не застрял ли какой-либо блок кода в режиме ожидания занятости.

1 голос
/ 19 декабря 2008

Поскольку ваш процесс является фоновым и использует 100% ЦП, кажется, что этот процесс связан с процессором. Это фоновый режим, поэтому привязка к пользователю не ожидается, поэтому единственной альтернативой будет IO. Если ваш процесс не должен делать интересный ввод-вывод, ожидается, что сам скрипт будет привязан к процессору, а не просто глючит.

Процессы всегда будут пытаться идти как можно быстрее. Если они связаны с IO, они будут использовать 100% IO, если они связаны с CPU, они будут пытаться использовать 100% CPU. Правильно составленные планировщики процессов автоматически стремятся обеспечить чувство справедливости для всех процессов, а это означает, что более крупные процессы получают более низкий приоритет. Вы можете еще больше снизить приоритет с помощью nice. Тот факт, что загрузка процессора все еще составляет около 100%, означает, что нет других процессов, которые в настоящее время связаны с процессором, но, скорее всего, ожидают ввода данных из сети.

...