博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

gliethttp

2005年07月毕业于桂林电子工业学院普通本科生的工作笔记--我们chinese人要学的东西还有很多很多,所以兄弟们可都要加油啊...... 欢迎访问~ luther.gliethttp Regards
  gliethttp.cublog.cn

关于作者
姓名:飞镖 luther
职业:摸索中
年龄:1982
邮箱:gliethttp@eyou.com
MSN :gliethttp@eyou.com
位置:北京朝阳区安华西里1区
个性介绍:

0>需要能打,但更需要能挨;
  能打如卫青,能挨如李广.
1>UNIX is basically a simple 
  operating system, but you 
  have to be a genius to 
  understand the simplicity.
2>人以铜为镜,可以正衣冠;以
  史为镜,可以知兴亡;以人为
  镜,可以明得失
3>1只笼子养着两只公鸡,打鸣那
  是一个比一个响
4>要是甘蔗两端一样甜,那谁还
  会辛辛苦苦抢着吃后边那一节
5>审问、慎思、明辨、力行、
  观其人
6>宦海浮沉,世事难测;
  朝中熙熙,多为利来;
  宫中攘攘,多为利往。
7>桃花坞里桃花庵,
  桃花庵下桃花仙; 
  桃花仙人种桃树,
  又摘桃花换酒钱。
  ......
  别人笑我太疯癫,
  我笑他人看不穿; 
  不见五陵豪杰墓,
  无花无酒锄作田。哈哈哈哈哈
8>贵有恒,何必三更起五更勤;
  最无益,只怕一日曝十日寒
9>君不密,则失臣;
  臣不密,则失身;
  几事不密,则成害!
10>汉武帝的人生4目标:
  修身、齐家、治国、平天下

|| << >> ||
我的分类


ulimit和setrlimit轻松修改task进程资源上限值

Resouce limit in linux system


在linux系统中,Resouce limit指在一个进程的执行过程中,它所能得到的资源的限制,比如进程的core file的最大值,虚拟内存的最大值等。

Resouce limit的大小可以直接影响进程的执行状况。其有两个最重要的概念:soft limit 和 hard limit


struct rlimit {
rlim_t rlim_cur; /* Soft limit */
rlim_t rlim_max; /* Hard limit (ceiling for rlim_cur) */
};
soft limit是指内核所能支持的资源上限。比如对于RLIMIT_NOFILE(一个进程能打开的最大文件数,内核默认是1024),soft limit最大也只能达到1024。对于RLIMIT_CORE(core文件的大小,内核不做限制),soft limit最大能是unlimited。
hard limit在资源中只是作为soft limit的上限。当你设置hard limit后,你以后设置的soft limit只能小于hard limit。要说明的是,hard limit只针对非特权进程,也就是进程的有效用户ID(effective user ID)不是0的进程。具有特权级别的进程(具有属性CAP_SYS_RESOURCE),soft limit则只有内核上限。


我们可以来看一下下面两条命令的输出。

sishen@sishen:~$ ulimit -c -n -s
core file size (blocks, -c) 0
open files             (-n) 1024
stack size     (kbytes, -s) 8192
sishen@sishen:~$ ulimit -c -n -s -H
core file size (blocks, -c) unlimited
open files             (-n) 1024
stack size     (kbytes, -s) unlimited

-H表示显示的是hard limit。从结果上可以看出soft limit和hard limit的区别。unlimited表示no limit, 即内核的最大值。


对于resouce limit的读取修改,有两种方法。

  • 使用shell内建命令ulimit
  • 使用getrlimit和setrlimit API

ulimit是改变shell的resouce limit,并达到改变shell启动的进程的resouce limit效果(子进程继承)。
usage:ulimit [-SHacdefilmnpqrstuvx [limit]]
当不指定limit的时候,该命令显示当前值。这里要注意的是,当你要修改limit的时候,如果不指定-S或者-H,默认是同时设置soft limit和hard limit。也就是之后设置时只能减不能增。所以,建议使用ulimit设置limit参数是加上-S。


getrlimit和setrlimit的使用也很简单,manpage里有很清楚的描述。
int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const struct rlimit *rlim);
需要注意的是你在setrlimit,需要检查是否成功来判断新值有没有超过hard limit。如下例:
if (getrlimit(RLIMIT_CORE, &rlim)==0) {

rlim_new.rlim_cur = rlim_new.rlim_max = RLIM_INFINITY;
if (setrlimit(RLIMIT_CORE, &rlim_new)!=0) {
/* failed. try raising just to the old max */
rlim_new.rlim_cur = rlim_new.rlim_max =
rlim.rlim_max;
(void) setrlimit(RLIMIT_CORE, &rlim_new);
}

}

 原文地址 http://blog.163.com/sishen_freecity/blog/static/16017200691343140935/
发表于: 2007-11-25,修改于: 2007-11-25 17:52,已浏览678次,有评论0条 推荐 投诉


网友评论
 发表评论