跳转至

使用CPULIMIT来限制进程的CPU利用率

使用CPULIMIT来限制进程的CPU利用率

在 Linux 系统上管理系统资源的推荐工具是 cgroups, 虽然在可以调整的限制方面(CPU, 内存, 磁盘 I/O, 网络等)非常强大, 但配置 cgroups 并不简单. nice命令从 1973 年起就可以使用了, 但它只是调整在一个处理器上竞争时间的进程之间的调度优先级, nice 命令不会限制一个进程在单位时间内所能消耗的 CPU 周期的百分比, cpulimit命令提供了两个世界的最佳方案, 它限制了一个进程在每单位时间内可以分配的 CPU 周期的百分比, 而且相对容易调用。

cpulimit 命令主要对长期运行的和 CPU 密集型的进程有用, 编译软件和转换视频是长期运行的进程的常见例子, 它们可以使计算机的 CPU 使用率达到最大, 限制这类进程的 CPU 使用率将释放出处理器时间, 供计算机上可能运行的其他任务使用, 限制 CPU 密集型进程也将减少功耗及热输出, 并可能减少系统的风扇噪音, 限制一个进程的 CPU 使用率的代价是, 它需要更多的时间来完成运行

它限制了一个进程在每单位时间内可以分配的 CPU 周期的百分比, 而且相对容易调用

cpulimit 命令的工作原理是为进程预设一个 cpu 占用率门限,并实时监控进程是否超出此门限,若超出则让该进程暂停运行一段时间。cpulimit 使用 SIGSTOP 和 SIGCONT 这两个信号来控制进程。cpulimit 的优势是可以控制进程的cpu使用率的上限值

$ yum install cpulimit
# 或者
$ brew install cpulimit

一些参数

# cpulimit -h
Usage: cpulimit [OPTIONS...] TARGET
   OPTIONS
      -l, --limit=N          percentage of cpu allowed from 0 to 100 (required)//cpu限制的百分比
      -v, --verbose          show control statistics//显示版本号
      -z, --lazy             exit if there is no target process, or if it dies//如果限制的进程不存在了,则退出。
      -i, --include-children limit also the children processes//包括子进程。
      -h, --help             display this help and exit //帮助,显示参数
   TARGET must be exactly one of these:
      -p, --pid=N            pid of the process (implies -z) //进程的pid
      -e, --exe=FILE         name of the executable program file or path name //可执行程序
      COMMAND [ARGS]         run this command and limit it (implies -z)

根据进程id限制cpu使用率

限制pid号为1234的进程, 最高只能使用40%的cpu

$ cpulimit -p 1234 -l 40

根据进程路径限制cpu使用率

$ cpulimit -e /usr/local/nginx-1.4.1/sbin/nginx -l 50

注意事项

-l后面限制的cpu使用量, 要根据实际的核心数量而成倍减少, 比如上文中的进程1234, 40%的限制生效在1核服务器中, 如果是双核服务器, 则应该限制到20%, 四核服务器限制到10%以此类推

root用户可以限制所有的进程, 普通用户只能限制自己有权限管理的进程