Я должен был работать convert
с большим количеством изображений одновременно. Команда заняла долгое время, но это не беспокоит меня.
Проблема - то, что эта команда представила мой компьютер, неприменимый, в то время как команда работала (в течение приблизительно 15 минут).
Таким образом, действительно ли возможно отрегулировать команду путем ограничения ресурсов (процессор и память) к команде, непосредственно из командной строки? Это может только работать, если я добавляю что-то к той же строке прежде, чем нажать Enter потому что, после того как я запускаю процесс, который компьютер замедляет так, что невозможно, например, переключиться на "Системный монитор" и уменьшить приоритет.
Мне удалось работать top
и sudo iotop >iotop.txt
в то время как выполнение одного из них преобразовывает операции. (Произведенный файл iotop.txt трудно считать),
Результаты вершины:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 14275 username 20 0 4043m 3.0g 1448 D 7.0 80.4 0:16.45 convert
Результаты iotop:
[?1049h[1;24r(B[m[4l[?7h[?1h=[39;49m[?25l[39;49m(B[m[H[2JTotal DISK READ: 1269.04 K/s | Total DISK WRITE:[59G0.00 B/s (B[0;7m TID PRIO USER DISK READ DISK WRITE SWAPIN(B[0;1;7m IO>(B[0;7m COMMAND [3;2H(B[m2516 be/4 username 350.08 K/s 0.00 B/s 0.00 % 0.00 % zeitgeist-datahub 7394 be/4 username 568.88 K/s 0.00 B/s 77.41 % 0.00 % --rendere~.530483991[5;1H14275 idle username 350.08 K/s 0.00 B/s 37.49 % 0.00 % convert S~f test.pdf[6;2H2048 be/4 root[6;24H0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/3:2] [5G1 be/4 root[7;24H0.00 B/s 0.00 B/s 0.00 % 0.00 % init
Кроме того, даже после концов процесса, компьютер не возвращается к предыдущей производительности. Я нашел путь вокруг этого путем выполнения sudo swapoff -a
сопровождаемый sudo swapon -a
О, мальчик, я только что уловил это ... цитируя OP:
Более того, даже после завершения процесса компьютер не возвращается к предыдущему исполнению. Я нашел способ обойти это, запустив
blockquote>sudo swapoff -a
, а затемsudo swapon -a
OK, так что это означает, что вы исчерпали доступную оперативную память в своей системе, а это значит, что вы просто пытаетесь запустить слишком много
convert
процессов одновременно. Чтобы посоветоваться, нам нужно взглянуть на ваш фактический синтаксис в spawningconvert
, но в основном вам нужно убедиться, что вы не пытаетесь открыть больше одновременных процессов, чем у вас есть оперативная память для удобной обработки.Поскольку вы утверждаете, что это является причиной
convert *.tif blah.pdf
, происходит то, что содержимое каждого отдельного TIF-файла и его преобразование в PDF сразу помещается в оперативную память. То, что вам нужно сделать, это разделить работу так, чтобы в этом не было необходимости. Одна возможность, которая приходит на ум, - это сделать что-то вродеfind . -iname '*.tif' | xargs -I% convert % %.pdf
, а затем использоватьpdftk
или что-то вроде этого, чтобы склеить все отдельные PDF-файлы. Если вы действительно хотите получить фантазию, и у вас есть многоядерный процессор, это также дает вам возможность написать небольшой скрипт для запуска преобразований партиями n , где n - это ваше количество ядер, и все это делается значительно быстрее. :)pdftk с практическими рекомендациями: http://ubuntuhowtos.com/howtos/merge_pdf_files (в основном сводится к
sudo apt-get install pdftk; pdftk *.pdf cat output merged.pdf
)
Вот довольно хорошая статья об использовании программы под названием cpulimit
для ограничения использования процессором любого процесса:
http://maketecheasier.com/limit-cpu-usage-of- any-process-in-linux / 2010/09/22
Проблема в том, что вы сказали, что нашли PID процесса convert
после его запуска.
После запуска convert
, если вы все еще можете набирать команды в терминале, вы можете запустить ps aux | grep convert
, чтобы найти его PID, затем sudo cpulimit -p PID -l CPU%
, чтобы начать регулирование.
Или, если запуск convert
также блокирует ваш терминал, в статье показано, как вы можете запустить cpulimit
в качестве фонового демона, который будет автоматически отслеживать и регулировать любые процессы при определенной загрузке ЦП. Удачи!
man nice
, и если вам нужно регулирование ввода / вывода man ionice
.
Давайте рассмотрим несколько простых примеров.
Регулирование использования ЦП:
you@box:/$ nice -n 10 /usr/bin/convert blah.gif blah.jpg
Однако из вашего описания использование ЦП почти наверняка не является вашей реальной проблемой. Скорее всего, у вас серьезный конфликт ввода / вывода.
Использование Throttling Disk:
you@box:/$ ionice -c2 -n7 /usr/bin/convert blah.gif blah.jpg
-c2
- «лучшее усилие», а -n7
- самый низкий приоритет «лучшее усилие». Таким образом, это приведет к сокращению задания для снижения приоритета ввода / вывода по сравнению с большинством других функций в системе.
you@box:/$ ionice -c3 /usr/bin/convert blah.gif blah.jpg
-c3
(уровень приоритета не требуется) означает «Только в режиме ожидания». Задания, для которых установлено значение -c3
, ТОЛЬКО занимают в противном случае время планирования простоя, практически не влияя на систему, но потенциально значительно увеличивают время выполнения вашей работы, в зависимости от того, насколько заняты остальные система получает.