Как заставить процесс командной строки использовать меньше вычислительной мощности - PullRequest
2 голосов
/ 03 ноября 2008

Мне интересно, как запустить процесс из командной строки, чтобы использовать меньше вычислительной мощности. Проблема, которую я имею, состоит в том, что процесс в основном берет на себя процессор и забирает с собой MySQL и остальную часть сервера. Все становится очень медленным.

Я использовал nice раньше, но мне не повезло с этим. Если это ответ, как бы вы его использовали?

Я также думал о вводе sleep команд, но он все равно будет использовать память, так что это не лучший вариант.

Есть ли другое решение?

Мне не важно, как долго это продолжается, в пределах разумного.

Если это имеет значение, скрипт является PHP-скриптом, но я запускаю его в командной строке, так как запуск уже занимает более 30 минут.

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

Ответы [ 6 ]

3 голосов
/ 03 ноября 2008

Лучшее, что вы можете сделать без изменения программы, - это изменить значение nice на максимальное значение, используя nice или renice. Лучше всего, вероятно, профилировать программу, чтобы узнать, где она проводит большую часть своего времени / использует большую часть своей памяти, и попытаться найти более эффективный алгоритм для того, что вы пытаетесь сделать. Например, если вы работаете с большим набором результатов из MySQL, вы можете обрабатывать записи по одной вместо загрузки всего набора результатов в память или, возможно, вы можете оптимизировать свои запросы или обработку, выполняемую с результатами.

2 голосов
/ 03 ноября 2008

Вы должны использовать nice с 19 "добротностью", что делает процесс маловероятным для запуска, если есть другие процессы, ожидающие ЦП.

 nice -n 19 <command>

Убедитесь, что программа не занята ожиданиями, а также проверьте время ожидания ввода / вывода.

1 голос
/ 03 ноября 2008

Вы также должны учитывать, интенсивен ли процесс ввода-вывода. Это можно настроить на некоторых дистрибутивах Linux с помощью команды ionice, хотя ее использование не так просто, как команда cpu nice.

Основное использование:

ionice -n7 cmd

запустит 'cmd', используя планировщик 'best force' с самым низким приоритетом. См. Справочную страницу для более подробной информации.

1 голос
/ 03 ноября 2008

Какой процесс на самом деле занимает процессор? PHP или MySQL? Если это MySQL, 'nice' не поможет вообще (поскольку сервер не 'nice'd up).

Если это вообще MySQL, вы должны посмотреть на свои запросы и настройку MySQL, чтобы выяснить, почему эти запросы сбивают сервер.

Хлопание вашего процесса на сервере MySQL может показывать, что "вся система работает медленно", если ваше основное представление о системе через MySQL.

0 голосов
/ 03 ноября 2008

Вы можете смонтировать интересующую директорию / файловую систему / вашего сервера на другом компьютере через NFS и запустить там скрипт (я знаю, это означает, что можно избежать этой проблемы и не очень практично: |).

0 голосов
/ 03 ноября 2008

Использование одних циклов ЦП не должно занимать остальную часть системы. Вы можете показать это, выполнив:

while true; do done

Это бесконечный цикл, и он будет использовать столько циклов ЦП, сколько может получить (остановите его с помощью ^ C). Вы можете использовать top, чтобы убедиться, что он выполняет свою работу. Я совершенно уверен, что это не окажет существенного влияния на общую производительность вашей системы до такой степени, что MySQL умрет.

Однако, если ваш PHP-скрипт выделяет много памяти, это, безусловно, может изменить ситуацию. Linux имеет тенденцию обходить процессы уничтожения, когда системе начинает не хватать памяти.

Я бы сузил проблему и был уверен в ее причине, прежде чем искать решение.

...