如何防止因CPU占用高而关闭系统?

如何防止因CPU占用高而关闭系统?

我使用运行 Java JVM 的 Linux 系统,该 JVM 创建新线程(进程)来处理工作负载。线程复杂性无法预先预测,有些线程最终会比其他线程执行更多的 CPU 密集型工作。我们遇到了一个问题,当启动了太多线程时,CPU 使用率会令人不安地接近 100%,而空闲百分比很低。我知道如果 CPU 使用率过高,其他正在运行的服务会受到影响,例如,系统在重新启动之前不会接受新的 ssh 登录。

是否没有可以在系统级别配置的自动化进程监视器,以防止用户进程的 CPU 使用率过高,从而不会影响系统服务?

答案1

Linux 下的大部分用户进程在启动时都具有相同的优先级,并平等共享时间片。所有线程也平等共享时间片,因此当线程过多时,其他进程可能需要等待很长时间才能获得下一个时间片。

至少有三种方法可以控制进程获得的 CPU 时间:

  • nice命令可以手动降低任务的优先级。
  • cpulimit命令可以暂停一个进程以避免它超出限制限度。
  • Linux对照组(cgroups)可以限制进程可用的资源量。

更多信息请参阅文章
使用 nice、cpulimit 和 cgroups 限制进程 CPU 使用率

答案2

替代解决方案:如果您将 JVM 作为 Docker 容器运行,则该docker run命令有许多选项可以限制 CPU 使用率(CPU 数量、CPU 配额......)。

使用容器还可以使您的应用程序更易于部署和管理。

相关内容