rlimit Linux下限制资源的使用(Limiting Resource Usage)

在Linux环境编程下,我们可以具体的限制一个进程对资源的使用,当进程尝试超过资源使用的限制,它可能会收到一个信号,或是因资源而失败的系统调用。每个进程最初的获得的限制来自父进程,但是后来可以更改这个限制。

有两个关于资源限制的概念:

current limit:为系统规定的上限,也叫做"soft limit",因为进程通常将被限制在这个范围内。

maxinum limit:为一个进程被允许建立current limit的最大值,也叫做"hard limit",因为一个进程无法避开它,一个进程低于他自己的maxinum limit,且只有超级用户可能提高它的maxinum limit。

struct rlimit {
rlim_t rlim_cur;
//The current limit 
rlim_t rlim_max;
//The maximum limit.
};

使用getrlimit,setrlimit,getrlimit64,setrlimit64(定义在<sys/resource.h>)来对上面两个值进行使用。

— Function: int getrlimit (int
resource, struct rlimit *rlp)

   读取类型为resource的限制值,并储存在rlp中。

   返回值为0时成功,-1时失败。失败时可能将errno设置为EFAULT.

— Function: int setrlimit (int
resource, const struct rlimit *rlp)

更新新的current limit 与 maxinum limit限制 ,参数resource为限制的类型(下方有参数表),*rlp带更新的结构体。

同样成功返回0,失败返回-1.将errno设置为EPERM有如下两种情况

1.设置的current limit 超过了maxinum limit的值。

    2.在不是超级用户的情况下设置了maxinum limit。

同时这里只提到

struct rlimit64{

rlim64_t rlim_cur;

//This is analogous to rlimit.rlim_cur, but with a different type. 
rlim64_t rlim_max

//This is analogous to rlimit.rlim_max, but with a different type.

}

下面是具体可以限制的种类也就是resource列表

RLIMIT_CPU   CPU使用时间限制,如果运行时间长于该值,将会收到信号:SIGXCPU 该值以秒计量

RLIMIT_FSIZE   进程可创建文件大小限制,如果进程尝试写更大的文件将会受到信号:SIGXFSZ

RLIMIT_DATA   最大内存使用限制,如果进程尝试分配内存并超出这个范围,分配函数将会失败

RLIMIT_STACK   进程使用栈的大小限制,如果进程尝试扩展它的栈并超过这个值,那个会收到信号SIGSEGV 

RLIMIT_CORE   进程创建core文件大小限制,如果进程结束并且要存储core文件高于该值,那么core文件不会被创建,所以设置这个值为0回保证core文件从不被创建

RLIMIT_RSS   进程所能得到的最大物理内存,这个参数是系统调度程序和内存分配的向导,系统在有盈余时将会给进程更多的内存

RLIMIT_MEMLOCK
  在物理内存中最大被锁内存数

RLIMIT_NPROC
  同一用户ID创建最大进程数,如果已经到达最大进程数再调用fork会失败

RLIMIT_NOFILE
RLIMIT_OFILE   进程可开最大文件数,如果超出最大数将会失败,该值存在在GNU 和 4.4BSD,部分系统没有。

RLIMIT_AS   进程总共可获得的最大内存数,如果进程尝试分配更多内存,那么分配函数将会失败。

RLIM_NLIMITS   所有参数值的限制,以上任何参数值都不能高于该值


— Constant: rlim_t RLIM_INFINITY
该常量被定义为无穷,在调用setrlimit的时候

转载请注明出处谢谢

时间: 2024-12-23 15:44:37

rlimit Linux下限制资源的使用(Limiting Resource Usage)的相关文章

求linux下android/platform-tools/hprof-conv文件的资源

问题描述 求linux下android/platform-tools/hprof-conv文件的资源 为了解决ubuntu下 运行eclipse android项目时的报错DDMS files not found:hprof-conv. 找了好些,都是windows下的hprof-conv.exe. 解决方案 大哥,DDMS在Androi SDK里面自带的,你下载一个Android SDK for Linux包不就可以了么

Linux下备份恢复技术的应用

  本文讲述Linux环境下,如何使用备份的脚本和命令以及商业化的软件来合理高效地保护磁盘数据安全. 备份与恢复系统承担着事前备份与事后恢复的职能.在当前高速发展的网络环境下,任何一个网络上的信息 系统都不可能保证绝对的安全.只要有网络存在,就会有来自网络的形形色色的威胁.为了抵御网络的攻击和入侵,虽然我们引入了日趋成熟的入侵检测系统.防火墙系统等,黑客们的入侵手段也日益高明,他们总能找到这些系统的安全漏洞及不足进行入侵,因而网络入侵所引起的安全事件呈逐年增加之势. 在这种情况下,我们难以保证网

关于linux下的嵌入式文件系统以及flash文件系统选择

嵌入式linux下常见的文件系统 • RomFS:只读文件系统,可以放在ROM空间,也 可以在系统的RAM中,嵌入式linux中常用来作 根文件系统 • RamFS:利用VFS自身结构而形成的内存文件系 统,使用系统的RAM空间• JFFS/JFFS2:为Flash设计的日志文件系统 • Yaffs:专门为Nand Flash设计 • proc:为内核和内核模块将信息发送给进程提 供一种机制,可以查看系统模块装载的信息 • devFS:设备文件系统 Linux上的Ext2fs • 支持4 TB

linux网络编程-Linux下epoll并发数量达到1987个后涨不上去

问题描述 Linux下epoll并发数量达到1987个后涨不上去 Linux下epoll并发数量达到1987个后涨不上去(达到1987个链接后,无法接受新链接,并非最大开文件句柄限制所导致) 我在linux下写来一个简单的epoll server程序,在局域网中另一台windows计算机采用多线程的形式链接server,但是大概epoll链接了1987个套接字后,再也不能增加新链接了(并非最大文件句柄数量所限制),不清楚所什么原因,跪求解答,谢谢各位好心人. server代码: #include

Linux下Tomcat与Apache Web服务器整合

apache|web|web服务|web服务器 1.引言      基于Web技术的Internet/Intranet近年来已经得到了广泛的应用,Intranet是以TCP/IP协议为基础.以Web为核心的企业内部网,用户通过低成本.简单易用的客户浏览器就能随时随地到企业的Web站点上查阅自己所需的数据.浏览器客户端操作界面的一致性避免了C/S模式客户端程序的多样性,而服务器端的开放和基于标准的连接方案使企业很方便地通过Internet同外界联系:同时,Web信息动态的.交互式的发布方式从根本上

Linux下Tomcat与Apache服务器的整合之一

apache|服务器 引言 基于Web技术的Internet/Intranet近年来已经得到了广泛的应用,Intranet是以TCP/IP协议为基础.以Web为核心的企业内部网,用户通过低成本.简单易用的客户浏览器就能随时随地到企业的Web站点上查阅自己所需的数据. 浏览器客户端操作界面的一致性避免了C/S模式客户端程序的多样性,而服务器端的开放和基于标准的连接方案使企业很方便地通过Internet同外界联系:同时,Web信息动态的.交互式的发布方式从根本上改变了企业的服务质量,增加了企业的商业

linux下创建线程内存泄漏,php的json

  这次还是把遇到的几个问题整理一下,希望再遇到的同学能轻松解决.另外最近博客的feeds延迟更新的原因也会一起说明一下. 1.linux下创建线程导致内存泄漏 今天在外网发布了一个server之后,用top发现virt的使用量一直在涨,而且一次涨8m.于是可以断定有内存泄漏了,经过排查,最终确定原因出在多线程的问题上: 代码如下: 1 2 3 4 5 6 pthread_t thread_id; int ret=pthread_create(&thread_id, NULL, flush_th

Linux下Tomcat与Apache Web服务器的整合

1.引言基于Web技术的Internet/Intranet近年来已经得到了广泛的应用,Intranet是以TCP/IP协议为基础.以Web为核心的企业内部网,用户通过低成本.简单易用的客户浏览器就能随时随地到企业的Web站点上查阅自己所需的数据.浏览器客户端操作界面的一致性避免了C/S模式客户端程序的多样性,而服务器端的开放和基于标准的连接方案使企业很方便地通过Internet同外界联系:同时,Web信息动态的.交互式的发布方式从根本上改变了企业的服务质量,增加了企业的商业机会.在许多用户看来,

linux下查看cpu信息的方法

#Cat /proc/cpuinfo linux下 /proc/cpuinfo 文件会显示cpu的信息 processor 会从0开始记数,继续下去多个cpu flags 如果有 ht 说明支持超线程技术 判断物理CPU的个数可以查看physical id 的值,相同则为同一个物理CPU processor : 4 vendor_id : GenuineIntel cpu family : 15 model : 4 model name : Intel(R) Xeon(TM) CPU 3.00G