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

时间: 2024-10-17 19:21:10

linux上限制用户进程数、cpu占用率、内存使用率的相关文章

Linux环境下进程的CPU占用率

阿里云服务器网站:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=qqwovx6h 文字来源:http://www.samirchen.com/linux-cpu-performance/ 1.Linux 环境下查看 CPU 信息 1.1.查看 CPU 详细信息 通过 cat /proc/cpuinfo 命令,可以查看 CPU 相关的信息: [[email protected]~]$cat/proc/cpuinfo

线上Java程序导致服务器CPU占用率过高的问题排除过程

博文转至:http://www.jianshu.com/p/3667157d63bb,博文更好效果看原版,转本博文的目的就算是个书签吧,需要时候可以定位原文学习 1.故障现象 客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高. 2.CPU占用过高问题定位 2.1.定位问题进程 使用top命令查看资源占用情况,发现pid为14063的进程占用了大量的CPU资源,CPU占用率高达776.1%,内存占用率也达到了29.8% [[

记一次线上Java程序导致服务器CPU占用率过高的问题排除过程

https://blog.csdn.net/u013991521/article/details/52781423 1.故障现象 客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高. 2.CPU占用过高问题定位 2.1.定位问题进程 使用top命令查看资源占用情况,发现pid为14063的进程占用了大量的CPU资源,CPU占用率高达776.1%,内存占用率也达到了29.8% [ylp@ylp-web-01 ~]$ top t

[Linux小技巧] 一行命令让CPU占用率达到100%

for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done 说明: cat /proc/cpuinfo |grep "physical id" | wc -l 能够获得CPU的个数, 我们将其表示为N. seq 1 N 用来生成1到N之间的数字 for i in `seq 1 N`; 就是循环运行命令,从1到N

Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算

目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件 procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps 命令 top命令 单核情况下Cpu使用率的计算 基本思想 总的Cpu使用率计算 计算方法 某一进程Cpu使用率的计算 计算方法 实验数据 某一线程Cpu使用率的计算 计算方法 实验数据 多核情况下cpu使用率的计算 实验一 描述 数据一 数据二 实验二 描述 数据一 数据二 主要问题 Java 系统

解决linux 系统中Mysql 进程占用CPU 300%故障

今日接到同事的电话,说微信公共帐号中的游戏无法登陆,用户不能玩了,麻烦尽快解决. 1.登陆IDC机房查看服务器流量图,流量正常,排除故障与流量无关. 2.登陆微信公共帐号中的游戏所在服务器发现系统互载过高,mysql进程CPU使用率超过300%. 为了快速解决问题直接重启mysql服务后,再查sysql进程CPU使用率依旧高居不下.故障还没有解决,继续寻找原因. 3.登陆mysql数据库,执行show processlist;查看当前正在执行的sql语句,发现几个表出现"sending data

TOP CPU占用率原理及与实时线程的冲突

linux下通过top或vmstat查看系统CPU占用率,在大多数情况下测得的CPU占用率是准确的,但在时间精度较高的实时linux系统中,top测量的CPU占用率可能会不准确,下面结合top原理和实时linux实例分析在实时系统中top的使用情况. 统计CPU占用率的时候,大致统计以下几个时间: 用户时间(User time).系统时间(System time).等待时间(Waiting time).空闲时间(Idle time).Nice时间.硬件终端处理时间等 其中主要计算用户时间.系统时

使用 nice、cpulimit 和 cgroups 限制 cpu 占用率

Linux内核是一名了不起的马戏表演者,它在进程和系统资源间小心地玩着杂耍,并保持系统的能够正常运转. 同时,内核也很公正:它将资源公平地分配给各个进程. 但是,如果你需要给一个重要进程提高优先级时,该怎么做呢? 或者是,如何降低一个进程的优先级? 又或者,如何限制一组进程所使用的资源呢? 答案是需要由用户来为内核指定进程的优先级 大部分进程启动时的优先级是相同的,因此Linux内核会公平地进行调度. 如果想让一个CPU密集型的进程运行在较低优先级,那么你就得事先配置好调度器. 下面介绍3种控制

关于vmstat,top,ps aux查看的cpu占用率不一致的问题

问题: 用vmstat,top,和ps aux三个命令查看进程对cpu的占用率,数值差异很大. 例: 用 vmstat 查看系统cpu空闲率, id是cpu的空闲率,可以看出,空闲率一直在73%以上 用 ps aux 统计两个compress进程的cpu占用率,长时间恒定在15.5%和28.9% 用 top统计两个compress进程的cpu占用率,可以看出是一个动态变化的过程 (命令执行结果后面有显示) 这三个命令查出的cpu利用率不统一 首先,ps aux中两个compress进程占用cpu