Linux 如何限制进程的CPU使用?
我想限制GPU服务器中进程的CPU使用。我找到了一些方法,“Linux 如何限制进程的CPU使用?,linux,cpu,cpu-usage,Linux,Cpu,Cpu Usage,我想限制GPU服务器中进程的CPU使用。我找到了一些方法,“nice”或“cpulimit”。但它们并不完全是我想要的。 cpulimit允许进程以它想要的速度运行,直到超过一定的百分比,在此百分比之后它将获得SIGSTOP、sleep和SIGCONT。 但我不想让超过一定百分比的过程进入睡眠状态。我只希望不会超过某个百分比。并保持其正常运行。 例如,当我运行cpulimit-p1111-l30时,终端将 [1]+已停止 这不是我想要的。如果不向您的程序发送睡眠,我认为这是不可能的。但我认为您不
nice
”或“cpulimit
”。但它们并不完全是我想要的。cpulimit
允许进程以它想要的速度运行,直到超过一定的百分比,在此百分比之后它将获得SIGSTOP、sleep和SIGCONT。但我不想让超过一定百分比的过程进入睡眠状态。我只希望不会超过某个百分比。并保持其正常运行。
例如,当我运行
cpulimit-p1111-l30时,终端将
[1]+已停止
这不是我想要的。如果不向您的程序发送睡眠,我认为这是不可能的。但我认为您不应该担心睡眠问题,因为当另一个线程请求访问CPU时,UNIX就是这样做的
如果您看到您的程序使用了50%的CPU核心,那么这是50%的时间,因为CPU核心一次只能执行一个或两个线程(取决于您的配置,请参阅linux上的lscpu)
如果您正在构建一个应用程序,该应用程序总是消耗100%的内核,并且从不让其他进程进入,那么这是可能的,但您永远不知道您的内核是否会允许某些CPU用于另一个紧急程序
所以我的建议是考虑一下你的应用程序可能会暂停,因为它可能会发生,这是你需要的。
希望我能帮助你:)再见 一种可能的方法是设计您自己的“类似外壳”的程序,运行另一个进程(或进程组),并交替发送SIGSTOP
和SIGCONT
信号(有关更多信息,请参阅)。例如,如果您希望某个程序使用不超过50%的cpu时间,您可以启动它,让它运行10毫秒,发送一个SIGSTOP
,睡眠10毫秒,发送一个SIGCONT
,睡眠10毫秒,发送一个SIGSTOP
等等
这种控制程序的概念证明是我的实用程序(GPLv2+许可)。顺便说一句,它不会在终端上显示Stopped
(shell显示的消息),因为half
程序不会自行停止(只有一些子进程)
FWIW,我在十多年前开发了这个程序,以便能够在一些过热的MSI S270笔记本电脑上编译Linux内核
(实际情况稍微复杂一些,还涉及到太便宜的RAM模块,当加热太多时,这些模块工作不正常;我需要一年多的时间才能意识到更换RAM模块解决了整个硬件问题)。也许这就是我找不到更好解决方案的原因。