Como faço para acelerar um comando em uma janela de terminal?

8

Eu precisava executar convert com muitas imagens ao mesmo tempo. O comando demorou um pouco, mas isso não me incomoda.

A questão é que esse comando tornou meu computador inutilizável enquanto o comando estava em execução (por aproximadamente 15 minutos).

Então é possível limitar o comando limitando recursos (processador e memória) ao comando, diretamente da linha de comando? Isso só funciona se eu adicionar algo à mesma linha antes de pressionar Enter porque uma vez iniciado o processo o computador fica tão lento que é impossível, por exemplo, mudar para " Monitor do sistema "e reduzir a prioridade.

Editar: resultados top e iotop

Eu consegui executar top e sudo iotop >iotop.txt durante uma dessas operações de conversão. (O arquivo iotop.txt produzido é difícil de ler)

Resultados do topo:

   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 

Resultados do 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

Além disso, mesmo depois que o processo termina, o computador não retorna ao desempenho anterior. Eu encontrei uma maneira de contornar isso executando sudo swapoff -a seguido por sudo swapon -a

    
por To Do 24.11.2012 / 16:03

3 respostas

5

Oh, cara, eu peguei isso ... citando OP:

  

Além disso, mesmo depois que o processo termina, o computador não retorna ao desempenho anterior. Eu encontrei uma maneira de contornar isso executando sudo swapoff -a seguido por sudo swapon -a

OK, isso significa que você estava esgotando a RAM disponível em seu sistema, o que significa que você está simplesmente tentando executar muitos convert processos de uma só vez. Nós precisaríamos olhar para a sua sintaxe real gerando convert para aconselhar, mas basicamente, você precisa ter certeza de que não tenta abrir mais processos simultâneos do que você tem que lidar confortavelmente com a RAM.

Desde que você declara o que está causando isso é convert *.tif blah.pdf , o que está acontecendo é que o conteúdo de cada TIF e sua conversão para PDF estão sendo colocados na RAM de uma só vez. O que você precisa fazer é dividir o trabalho para que isso não seja necessário. Uma possibilidade que vem à mente é fazer algo como find . -iname '*.tif' | xargs -I% convert % %.pdf , então usar pdftk ou algo parecido para juntar todos os PDFs individuais. Se você realmente quiser se interessar, e você tem uma CPU multicore, isso também lhe dá a chance de escrever um pequeno script para executar conversões em lotes de n , onde < em> n é o seu número de núcleos, e faça tudo de maneira significativamente mais rápida. :)

pdftk como fazer: link (basicamente resume-se a sudo apt-get install pdftk; pdftk *.pdf cat output merged.pdf )

    
por Jim Salter 26.11.2012 / 18:56
12

man nice e se você precisar de otimização de I / O man ionice .

Vamos dar uma olhada em alguns exemplos simples.

Limitação do uso da CPU:

you@box:/$ nice -n 10 /usr/bin/convert blah.gif blah.jpg

De sua descrição, no entanto, o uso da CPU quase certamente não é seu problema real aqui. Mais provavelmente, você está tendo uma contenção grave de E / S.

Uso do disco de limitação:

you@box:/$ ionice -c2 -n7 /usr/bin/convert blah.gif blah.jpg

-c2 é "melhor esforço" e -n7 é a menor prioridade de "melhor esforço". Portanto, isso reduzirá o trabalho para diminuir a prioridade de E / S do que a maioria das outras coisas no sistema.

you@box:/$ ionice -c3 /usr/bin/convert blah.gif blah.jpg

-c3 (nenhum nível de prioridade necessário) significa "Somente ocioso". As tarefas configuradas como -c3 SOMENTE ocupam o tempo de agendamento de disco inativo, praticamente sem impacto algum no sistema - mas potencialmente um consideravelmente maior tempo de execução para seu trabalho, dependendo de quão ocupado o restante o sistema fica.

    
por Jim Salter 24.11.2012 / 16:17
2

Aqui está um bom artigo sobre como usar um programa chamado cpulimit para limitar o uso da CPU de qualquer processo:

link

O problema é como você disse ao encontrar o PID do processo convert depois que ele foi iniciado.

Após iniciar convert , se você ainda puder digitar comandos no terminal, poderá executar ps aux | grep convert para encontrar seu PID e, em seguida, sudo cpulimit -p PID -l CPU% para iniciar a aceleração.

Ou se iniciar convert também bloquear seu terminal, o artigo mostrará como você pode executar cpulimit como um daemon em segundo plano que monitorará e controlará automaticamente os processos em relação a um determinado uso de CPU. Boa sorte!

    
por smooth-texan 24.11.2012 / 16:30