如何在终端窗口中调节命令?


8

我需要同时运行convert很多图像。命令花了相当长的时间,但这并没有打扰我。

问题是该命令在运行该命令(约15分钟)时使我的计算机无法使用。

那么是否可以通过直接从命令行限制命令的资源(处理器和内存)来节流命令?这仅在我在按下之前在同一行中添加一些内容时才有效,Enter因为一旦启动该过程,计算机就会减慢很多速度,以至于无法切换到“系统监视器”并降低优先级。

编辑:top和iotop结果

我设法运行topsudo iotop >iotop.txt同时做这些转换的操作之一。(产生的iotop.txt文件很难阅读)

排名最高的结果:

   PID用户PR NI VIRT RES SHR S%CPU%MEM TIME +命令           
14275用户名20 0 4043m 3.0g 1448 D 7.0 80.4 0:16.45转换 

iotop的结果:

[?1049h [1; 24r(B [m [4l [?7h [?1h = [39; 49m [?25l [39; 49m(B [m [H [2J] Total DISK READ:1269.04 K / s | Total DISK WRITE :[59G0.00 B / s
(B [0; 7m TID PRIO用户磁盘读取磁盘写入SWAPIN(B [0; 1; 7m IO>(B [0; 7m COMMAND [3; 2H(B [m2516 be / 4用户名350.08 K / s 0.00 B / s 0.00%0.00%时代精神
 7394 be / 4用户名568.88 K / s 0.00 B / s 77.41%0.00%--rendere〜.530483991 [5; 1H14275空闲用户名350.08 K / s 0.00 B / s 37.49%0.00%转换S〜f test.pdf [6 ; 2H2048 be / 4根[6; 24H0.00 B / s 0.00 B / s 0.00%0.00%[kworker / 3:2]
[5G1 be / 4根[7; 24H0.00 B / s 0.00 B / s 0.00%0.00%初始

此外,即使在处理结束后,计算机也不会恢复到以前的性能。我找到解决的办法通过运行sudo swapoff -a之后sudo swapon -a

Answers:


5

哦,男孩,我刚抓到这个……引用OP:

此外,即使在处理结束后,计算机也不会恢复到以前的性能。我找到解决的办法通过运行sudo swapoff -a之后sudo swapon -a

好的,这意味着您正在耗尽系统上的可用RAM,这意味着您只是在尝试convert一次运行太多进程。我们需要在生成时查看您的实际语法convert以提供建议,但是基本上,您需要确保您尝试打开的并发进程不会超过您可以轻松处理的RAM。

由于您指出了造成这种convert *.tif blah.pdf情况的原因,因此,发生的情况是每个TIF的内容及其到PDF的转换都被立即填充到RAM中。您需要做的就是将工作分解,这样就不必要了。突然想到的一种可能性是改为执行find . -iname '*.tif' | xargs -I% convert % %.pdf,然后使用pdftk或类似的方式将所有单个pdf粘合在一起。如果您真的想花钱,并且拥有多核CPU,这也使您有机会编写一个小的脚本来以批处理n的形式运行转换,其中n是您的内核数,并且可以更快地完成整个工作。:)

pdftk操作方法:http//ubuntuhowtos.com/howtos/merge_pdf_files (基本上可以归结为sudo apt-get install pdftk; pdftk *.pdf cat output merged.pdf


我一次只运行一个convert *.tif bla.pdf进程,但是输入的是一堆tif图像。这是一种从一堆图像中生成一个pdf的方法,虽然效果很好,但是却扼杀了我的电脑。

^^请参阅编辑后的答案:)
Jim Salter 2012年

一个简单的修改就可以完美地工作。find . -iname '*.tif' | xargs -I% convert % %.pdf代替find . -iname '*.pdf' | xargs -I% convert % %.pdf。它也更快!谢谢。

抱歉,大脑和手指之间的故障:-)
Jim Salter 2012年

一个小的修改……了解的-exec-execdir选项是一件好事find。在你的情况,而不是使用xargs,我会用:find -iname '*.tif' -execdir convert {} {}.pdf ';'
水稻朗

12

man nice,以及是否需要I / O限制man ionice

让我们看一些简单的例子。

节流CPU使用率:

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

然而,从您的描述来看,CPU使用率几乎肯定不是您的真正问题。您更有可能发生严重的I / O争用。

节流磁盘使用情况:

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

-c2是“尽力而为”,-n7也是最低的“尽力而为”优先级。因此,这将限制系统的工作,以降低I / O优先级。

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

-c3(无需优先级)表示“仅空闲”。乔布斯设置为-c3只占用闲置的磁盘调度时间,几乎在所有的系统上没有影响-但可能一个相当长的执行时间为你的工作,这取决于系统的其余部分有多忙得到。


如何集成nice到convert命令中?如果我没做错的话,那么对于已经运行的进程来说很好用。

1
参见上文...另外,很抱歉,请阅读手册页。这是一个非常简单的手册页,一点也不耐嚼。:-)
Jim Salter 2012年

我尝试过这个。有点帮助,但还不够。我nice -n 20下次再试。

老实说,我不太确定CPU负载是您在这里遇到的问题。您是否在尝试iotop运行该过程时尝试过?通常,一个消耗大量CPU的进程对系统的可用性几乎没有影响,但是一个进程撞击硬盘驱动器会非常迅速地使一切崩溃—特别是如果您使用的是传统驱动器而不是SSD。
Jim Salter 2012年

由于整个系统对您来说几乎无法使用,因此您可以尝试类似的方法,convert blah.gif blah.jpg & iotop以便iotop在开始convert工作后立即启动。
Jim Salter 2012年

2

这是一篇有关使用程序cpulimit来限制任何进程的cpu使用率的很好的文章:

http://maketecheasier.com/limit-cpu-usage-of-any-process-in-linux/2010/09/22

问题就像您说的那样,在convert启动过程后查找该进程的PID 。

启动后,convert如果仍然可以在终端中键入命令,则可以运行ps aux | grep convert以找到其PID,然后sudo cpulimit -p PID -l CPU%开始节流。

或者,如果启动convert也锁定了您的终端,那么本文将向您展示如何cpulimit作为后台守护程序运行,该后台守护程序将在一定的CPU使用量下自动监视和限制任何进程。祝好运!


这个脚本是个坏主意,与内置nice命令相比是原始的。 cpulimit不管其他是否需要CPU时间,都会将进程限制为一定的CPU使用率;nice相比之下,设置优先级(共40个!),该优先级允许一项任务的优先级高于(或低于)其他任务。
Jim Salter 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.