nice、ionice、cpulimit

对于一些运行时会造成系统满载的脚本, 例如数据库备份, 会影响当时其他服务的响应速度, 可以通过ionice和nice对其IO优先级和CPU优先级进行调整。

1、nice:

# ps -efl

F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD

5 S asterisk 5019 1608 -5 80 0 - 119325 ep_pol Mar23 ? 00:03:55 /usr/sbin/httpd

  • PRI 指进程优先级,优先级小的进程会获得比较多的CPU时间,程序就会被优先处理
  • NI 即为nice值
  • 两者关系为 :PRI(new)=PRI(default)+nice

其中nice值可以用户指定,nice的默认值为0,root可用范围从-20到19,普通用户只能用0到19,值越小PRI(new)越小,CPU执行优先级越高。同时可以知道:只有root能提高优先级,普通用户只能降低优先级。使用nice命令(不带任何参数时)可以将进程的nice值设置为10。这样调度器就会将此进程视为较低优先级的进程,从而减少cpu资源的分配。nice 还有一个关联命令叫做 renice,它可以在运行时调整进程的 nice 值。使用 renice 命令时,要先找出进程的 PID。

1)设置进程的优先级:

nice 只有一个参数 : -n,启动程序时指定优先级。

nice -n -20 /opt/backup.sh #优先级最高
nice -n 19 /opt/backup.sh #优先级最低

使用top命令查看:

2)修改进程优先级:

找到进程的id,然后
# renice -n +15 5319

2、ionice:

Linux默认IO调度器使用CFQ调度算法,支持用ionice命令为程序指定io调度策略和优先级,IO调度策略分为三种:

  • Idle :其他进程没有磁盘IO时,才进行磁盘IO
  • Best Effort:缺省调度策略,可以设置0-7的优先级,数值越小优先级越高,同优先级的进程采用round-robin算法调度
  • Real Time :立即访问磁盘,无视其它进程IO
  • None 即Best Effort,进程未指定策略和优先级时显示为none,会使用依据cpu nice设置计算出优先级

1)ionice参数:

  • -c class :class表示调度策略,其中0 for none, 1 for real time, 2 for best-effort, 3 for idle。
  • -n classdata:classdata表示IO优先级级别,对于best effort和real time,classdata可以设置为0~7。
  • -p pid:指定要查看或设置的进程号或者线程号,如果没有指定pid参数,ionice will run the listed program with the given parameters。
  • -t :忽视设置优先级时产生的错误。

示例:

1.1)使用idle策略:

ionice -c 3 -p pid

1.2)使用Real Time策略:

ionice -c 1 -p pid

1.3)使用Best Effort策略,并指定优先级最低:

ionice -c 2 -n 7 -p pid

1.4)使用ionice启动:

ionice -c 2 -n 7 /data/back.sh

使用iotop命令查看:

2)同时制定nice、ionice:

/usr/bin/nice -n 19 /usr/bin/ionice -c2 -n7 /usr/local/bin/backup.sh

 

3、cpulimit:

1)介绍:

限制其对CPU的使用率,可使用cpulimit工具来实现。

安装:yum -y install cpulimit

cpulimit使用方式和nice命令类似,需要用户使用 -l 选项显式地定义进程的 cpu 使用率上限值。

示例:

cpulimit --limit=10 /bin/gzip vzdump-2018_06_26.tar.gzip

2)工作原理:

cpulimit 命令的工作原理是为进程预设一个 cpu 占用率限制,并实时监控进程是否超出此限,若超出则让该进程暂停运行一段时间。cpulimit 使用 SIGSTOP 和 SIGCONT 这两个信号来控制进程。它不会修改进程的 nice 值,而是通过监控进程的 cpu 占用率来做出动态调整。cpulimit 的优势是可以控制进程的cpu使用率的上限值。但与 nice 相比也有缺点,那就是即使 cpu 是空闲的,进程也不能完全使用整个 cpu 资源。

3)示例:

cpulimit 还可以在运行时对进程进行动态限制,使用 -p 选项来指定进程的 PID,下面是一个实例:

cpulimit -l 50 -p 1237

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值