Назад | Перейти на главную страницу

При обновлении оборудования для повышения производительности программы, что мне следует учитывать в первую очередь: ЦП, ОЗУ или и то, и другое?

У меня есть простой скрипт, который я написал на PHP (который после прочтения большого количества QA, кажется, не имеет желаемого управления памятью). Это очень маленький сценарий, который просматривает файлы конфигурации в папке; сравнивает это с записью в базе данных и, если есть различия, обновляет запись соответствующим образом.

Хотя в сценарии меньше 20 строк, я имею дело с более чем 30 000 файлов конфигурации в любой момент времени.

Мой компьютер - это двухъядерный процессор Intel с тактовой частотой 3,06 ГГц с 8 ГБ оперативной памяти, работающий на Ubuntu 12.04.

Когда я выполняю скрипт, процессор почти сразу достигает 100% и остается там. Используя команду top, я вижу, что память для процесса PHP постоянно увеличивается, пока, наконец, не исчерпается 8 гигабайт и не произойдет сбой. (Обычно я просматриваю скрипт примерно на 3/4, прежде чем он выйдет из строя, что в настоящее время занимает около 90 минут.)

Как я могу сделать этот процесс более эффективным с точки зрения оборудования? Если я перейду на quadcore, сократит ли это вдвое время, необходимое для выполнения сценария? Если я перейду на шестигранник, сократит ли это необходимое время на 4? Кроме того, завершение сценария в 2 или 4 раза быстрее означает, что я сокращаю использование памяти, или мне все равно нужно обновить ОЗУ?

Вместо того, чтобы постоянно читать файлы в поисках изменений (что, вероятно, вызывает большее ожидание ввода-вывода, чем фактическое использование ЦП), я настоятельно рекомендую использовать inotify для отслеживания изменений и реагирования только на их изменение:

Документы: http://php.net/manual/en/book.inotify.php

Видеть http://en.wikipedia.org/wiki/Inotify для получения дополнительной информации.

Больше ЦП просто означает, что у вас быстрее закончится ОЗУ. Я бы сказал, что лучше всего исправить управление памятью в вашем скрипте. Чтобы использовать столько ОЗУ, я думаю, у вас утечка памяти.