Chinaunix首页 | 论坛 | 博客
  • 博客访问: 216879
  • 博文数量: 43
  • 博客积分: 2501
  • 博客等级: 少校
  • 技术积分: 485
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-07 21:45
文章分类

全部博文(43)

文章存档

2011年(3)

2010年(1)

2009年(21)

2008年(18)

我的朋友

分类: LINUX

2008-03-04 13:43:56

    前几天在网易博客上发了一篇“linux中限制用户进程CPU占用率”的文章,谈到限制进程CPU占用率的问题,给出了一个shell脚本代码如下:

renice +10 `ps aux | awk '{ if ($3 > 0.8 && id -u $1 > 500) print $2}'`

    其中用到ps获取进程信息,其实ps中%CPU一列的意义是进程实际占有CPU时间和它存活时间的比值,这个值能反应进程对CPU的消耗,但不能准确反应进程所占CPU时间占整个系统CPU的百分比。而top输出中的%CPU这一列正是进程所占CPU时间占整个系统CPU的百分比,用于限制进程CPU占用率更加合理,同时%MEM一列还反应了进程占用内存的百分比,可以用于限制进程内存占用率。shell脚本代码如下:

#!/bin/sh

PIDS=`top -bn 1 | grep "^ *[1-9]" | awk '{ if($9 > 50 || $10 > 25 && id -u $2 > 500) print $1}'`

for PID in $PIDS
do
        renice +10 $PID
        echo "renice +10 $PID"
done

    可以将这个脚本放到cron中运行,比如每分钟检查一次,只需以root身份添加crontab项:

#crontab -e
* * * * * limit.sh

    以后每个一分钟就会检查一次,调整占用50%以上CPU或25%内存的进程的nice值,从而使这样的进程优先级变低,被调度的机会减少,同时会向root发邮件提示该进程被调整过。

    不过,限制内存使用最好还是用PAM,RedHat可以在/etc/security/limits.conf中设置。
阅读(4900) | 评论(4) | 转发(1) |
0

上一篇:没有了

下一篇:Linux Kernel Development - Ch3 Process Management

给主人留下些什么吧!~~

chinaunix网友2010-06-25 09:19:33

“而top输出中的%CPU这一列正是进程所占CPU时间占整个系统CPU的百分比”这个理论依据就是错误的。请仔细参考man top 中关于%cpu的描述。 举例,下述cpu空闲率为85-90% ,而top 的输出进程中有如下占用CPU时间: #top -sc ....... PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ P COMMAND 3472 root 25 0 1226m 135m 9736 R 101 1.7 2409:22 5 java

arthurbing2008-05-28 14:18:42

请问您的邮箱或者Q号是?

arthurbing2008-05-28 08:17:09

我的邮箱wsarthur@gmail.com

arthurbing2008-05-28 08:15:27

您好,我对您的文章很感兴趣 我最近正在做一个入侵检测系统,需要对客户机上进程的内存和CPU占用进行监测 请问您的邮箱是?^^