Я использую PHP с Apache 2.4 на Centos 7 для запуска очень ресурсоемкой вероятностной модели. Потребовалось 8 дней, чтобы запустить его на моем домашнем компьютере, поэтому я решил перенести его в облачный сервис. Я настроил его, и теперь это занимает всего 5 часов. Большой!
НО есть проблема, при обработке алгоритма я проверил команду «free» и «top» в облаке, и она сообщила, что использует около 24% моего процессора и 10% доступной памяти! Я плачу около $ 1,50 в час серверу в Linode с 96 ГБ и 20 ядрами ЦП, поэтому лучше использовать 100% доступного ЦП.
Я знаю, что многое зависит от алгоритма, но проверьте этот код ниже. Это очень тяжелый алгоритм, интенсивно использующий CPU, и он должен использовать 100% CPU, но нет, он использует только 24% (согласно «top»).
<?php
set_time_limit(0);
ini_set("memory_limit","-1");
for ($i=0;$i<10000;$i++) {
for ($ii=0;$ii<10000;$ii++) {
for ($iii=0;$iii<10000;$iii++) {
for ($iiii=0;$iiii<10000;$iiii++) {
}
}
}
}
?>
Так, что происходит? Как я могу заставить мой Apache использовать больше процессора и памяти?
Вы используете сильно нагружающий процессор алгоритм в PHP? Я не уверен, что это такая прекрасная идея.
В любом случае, я думаю, что проблема здесь в том, что ваш код работает на четырехъядерном процессоре, но только в одном потоке. Таким образом, максимальная загрузка процессора, которую вы можете достичь в данный момент, составляет 25%.
Я предлагаю вам переписать ваше программное обеспечение как многопоточное приложение, предпочтительно с использованием языка, подобного C или C ++.
Других решений пока нет …