Chinaunix首页 | 论坛 | 博客
  • 博客访问: 232331
  • 博文数量: 71
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 817
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-30 08:47
文章分类

全部博文(71)

文章存档

2021年(1)

2020年(2)

2019年(1)

2015年(1)

2014年(26)

2013年(40)

我的朋友

分类: LINUX

2014-10-20 15:09:30

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中设置。
 
本页内容为:linux上限制用户进程数、cpu占用率、内存使用率等,该文章本站转载自网络,如有侵权请告之,我们将会及时将其删除,其正文内容如下:

edit /etc/pam.d/login

#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so shadow nullok use_authtok
session required /lib/security/pam_pwdb.so
session required /lib/security/pam_limits.so

you have to add the last two lines

edit /etc/security/limits.conf

可带参数:
issue=filename:指定其他配置文件,而不是缺省的/etc/issue.
noesc:不对配置文件中的转移字符进行解释。

配置文件说明:
debug:将调试信息写入日志
conf=filename:指定配置文件

配置文件说明:该配置文件每一行(一个条目)的语法如下:

在这里
可以是
用户名
用户组名,采用@group的语法
通配符*,表示任何
可以是
soft-表示软限制,可以超过该限制
hard-表示硬限制,有root设定,内核执行,不可以超过该限制
可以是
core-core文件大小 (KB)
data-最大数据大小(KB)
fsize-最大文件大小(KB)
memlock-最大可用内存空间(KB)
nofile-最大可以打开的文件数量
rss-最大可驻留空间(KB)
stack-最大堆栈空间(KB)
cpu-最大CPU使用时间(MIN)
nproc-最大运行进程数
as-地址空间限制
maxlogins-某一用户可以登录到系统的最多次数
locks-最大锁定文件数目
需要注意的是,如果无限制可以使用”-”号,并且针对用户限制的优先级要比针对组的
优先级高。

实际上,在linux服务器中,用户进程运行很长时间是可以接受的。而占用CPU过高则让其他用户无法忍受,而其很有可能是用户程序有问题,这个时候系统应该自动阻止这样的进程继续消耗系统资源。

最简单的方法就是通过ps发现CPU占用率超过某个限制的用户进程,然后将该进程杀死,这种做法很暴力,而且用户发现他的进程被杀以后很可能又启动进程,这样恶性循环。

有一种折中的方法,不是将目标进程杀死,而是适当调整其nice值,具体见如下shell程序:

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

转载地址:http://blog.sina.com.cn/s/blog_53689eaf0101b5xe.html
阅读(3861) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~