黑帽联盟

 找回密码
 会员注册
查看: 1723|回复: 0
打印 上一主题 下一主题

[脚本语言] shell限制CPU和内存占用率

[复制链接]

895

主题

38

听众

3322

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情

    前天 13:01
  • 签到天数: 1643 天

    [LV.Master]伴坛终老

    相信很多人在管理服务器的时候,会看到cpu使用率时不时的上100%,在进行优化无效,公司不给升级更好的硬件配置,那我们只能靠自己来让服务器更加稳定.还有的时候我们的服务器配置不够用,自己也可以试试这种方法,如果你不想加配置的话

    脚本内容:
    vi limit.sh
    1. #!/bin/sh
    2.   UPID=`top -bn 1 | grep "^ *[1-9]" | awk '{ if($9 > 20 || $10 > 25 && id -u $2 > 500) print $1}'`
    3.   for PID in $UPID
    4.   do
    5.   renice +10 $PID
    6.   echo "renice +10 $PID"
    7.   done
    复制代码
    我对上面的脚本进行了修改,可以让其针对整个服务器的进程进行限制.
    修改后的脚本:
    1. #!/bin/sh
    2.   UPID=`top -bn 1 | grep "^ *[1-9]" | awk '{ if($9 > 50 || $10 > 25 ) print $1}'`
    3.   for PID in $UPID
    4.   do
    5.   renice +10 $PID
    6.   echo "renice +10 $PID"
    7.   done
    复制代码
    可以将这个脚本放到cron中运行,让其每分钟检查一次:
    chmod +x limit.sh
    vi /etc/crontab
    */1 * * * * /bin/sh /root/soft_shell/limit.sh

    ps:
    n : 更新的次数,完成后将会退出 top
    b : 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内
    那么top -bn 1 就是获取一次,top的输出结果。
    grep "^*[1-9]" : 是为了直接获取PID号,排除掉表头等信息。
    awk '{ if($9 > 20 || $10 > 25 && id -u $2 > 500) print $1}'  :
    取得cpu使用率大于20%或者内存使用率大于25%,且用户uid大于500的进程pid。

    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    勿忘初心,方得始终!
    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部