У меня есть простой скрипт, который я написал на 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 для получения дополнительной информации.
Больше ЦП просто означает, что у вас быстрее закончится ОЗУ. Я бы сказал, что лучше всего исправить управление памятью в вашем скрипте. Чтобы использовать столько ОЗУ, я думаю, у вас утечка памяти.