只减慢一个进程来调节 CPU 温度

Tim*_*Tim 12 linux process

  1. 我有一个程序。当它运行时,CPU 温度从 50 摄氏度上升到 80 摄氏度,这是我最关心的问题。

    我可以控制 CPU 频率来减慢它的速度,但其他进程也会减慢,这是我不想要的。

    是否可以在不影响其他进程的情况下减慢特定进程的速度以保持 CPU 冷却?

    我的操作系统是 Ubuntu 10.10。

  2. 我试图通过 设置进程的优先级,但nice -n 15 myprogram不确定这是否有效。CPU 为 77 摄氏度。

    是否nice只设置进程与其他进程的相对优先级?即,如果其他进程没有运行,这个不错的进程会运行得很快吗?我想设置整个过程运行缓慢。

lae*_*ade 18

CPULimit 正是您所需要的。您启动程序,然后针对程序名称或 PID 运行 cpulimit,指定您希望它限制的百分比。

以下命令将 PID 7777 处的进程限制为 5% CPU 使用率。

cpulimit -p 7777 -l 5
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用可执行文件的名称:

cpulimit -e myprogram -l 5
Run Code Online (Sandbox Code Playgroud)

或者可执行文件的绝对路径:

cpulimit -P /path/to/myprogram -l 5
Run Code Online (Sandbox Code Playgroud)

请注意,百分比是所有内核的百分比;因此,如果您有 4 个内核,则可以使用 400%。

  • 关于 CPULimit 的一个小警告:它使用 SIGSTOP/SIGCONT 来限制进程使用的 CPU 时间量(超过目标 CPU 使用率的进程被停止;当足够的时间过去后,进程被发送一个 SIGCONT 并恢复执行)。但是,在极少数情况下,信号会干扰系统调用,请参阅 [GNU C 库手册](http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_21。 html#SEC362) 了解详情。由于 CPULimit 每秒多次发送这些信号,因此很可能会中断。在桌面上运行 pdftk 不是大问题,不过。 (3认同)

Ric*_*rri 8

您可以使用renice正在运行的进程,给它更多或更少的优先级(即所谓的“nice值”)。请注意,UNIX 优先级比例有点违反直觉:负值意味着进程优先于并发进程,即它具有“更多”优先级。

因此,您可以尝试通过以下方式“减慢”进程给定的 PID:

# lower priority of a process
renice +1 "PID"
Run Code Online (Sandbox Code Playgroud)

每次运行时,进程“nice value”加1;当然,您可以使用整数值+1。

命令nice允许您启动一个带有 +10 nice 值调整的进程(使用选项更改它-n)。例如:

# start a CPU-intensive task with low priority
nice ./cpu-hog
Run Code Online (Sandbox Code Playgroud)

但是,“nice 值”仅影响调度程序在多大程度上倾向于运行特定进程而不是系统中的其他进程:如果您的计算机基本上处于空闲状态,则提高单个进程的“nice 值”不会阻止该进程 100%中央处理器。我引用了getpriority(2) 联机帮助页:(我添加了重点。)

它们的相对 nice 值影响进程调度的程度因 Unix 系统而异,在 Linux 上,也因内核版本而异。从内核 2.6.23 开始,Linux 采用了一种算法,使 nice 值的相对差异产生更强的影响。这会导致非常低的 nice 值(+19)在系统上有任何其他 _更高优先级负载时真正为进程提供很少的 CPU。_

其原因在于进程在类 UNIX 内核上运行的方式:每次内核决定运行一个进程时,该进程在某个(固定的和短的)时间跨度内完全控制 CPU 内核。“nice 值”可以影响内核调度程序愿意为进程提供一个时隙的频率,但您无法改变这样一个事实,即一旦被调度,进程就会在固定的时间内不受干扰地运行。

因此,如果系统中没有其他进程可以争用 CPU 访问,那么除了降低 CPU 的速度之外,没有办法使进程运行得更慢。