2008-11-03 3 views
2

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

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

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

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

Не имеет значения, как долго он работает, в пределах разумного.

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

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

ответ

2

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

nice -n 19 <command> 

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

0

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

while true; do done 

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

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

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

3

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

+1

+1 для восстановления. TIL - новая команда! – 2013-04-22 17:53:35

1

Какой процесс фактически занимает процессор? PHP или MySQL? Если это MySQL, «nice» вообще не поможет (поскольку сервер не «хорошо»).

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

Шлейф вашего процесса сервера MySQL может показать, что «вся система работает медленно», если ваш основной вид системы через MySQL.

+0

Обычно это около 50% для каждого PHP и MySQL. – 2008-11-03 01:19:27

0

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

1

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

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

ionice -n7 CMD

будет работать 'ЦМД' с использованием 'лучшие усилиями' планировщика по самому низкому приоритету. Дополнительную информацию об использовании см. На странице руководства.

+0

dang, не имеют ионизации – 2008-11-03 01:26:42