Как заставить процесс командной строки использовать меньше вычислительной мощности

StackOverflow https://stackoverflow.com/questions/257659

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

 nice -n 19 <command>

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

Другие советы

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

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

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

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

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

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

ionice -n7 cmd

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

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

while true; do done

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top