linux中获取堆栈空间大小的方法

 

#include   <stdio.h> 
#include   <stdlib.h> 
#include   <sys/time.h> 
#include   <sys/resource.h> 
#include   <unistd.h> 
  
int   main() 
{ 
        struct   rlimit   lmt; 
        getrlimit(RLIMIT_STACK,&lmt); 
        printf( "rlim_cur=%u,rlim_max=%u\n ",lmt.rlim_cur,lmt.rlim_max); 
} 
//编译
 [root@fp-web-112 src]# gcc -g getstack.c -o getstack -lpthread
执行
[root@fp-web-112 src]# ./getstack
 rlim_cur=8388608,rlim_max=4294967295

 当前的堆栈空间为8M,但作为扩展,最大可支持4G(理论值)

8388608/1024/=8192/1024=8m

 

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

struct rlimit { 
   rlim_t rlim_cur;
   rlim_t rlim_max;
};

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则只有内核上限。

 

ulimit -c -n -s
ulimit -c -n -s -H
[root@fp-web-112 src]# ulimit -c -n -s
core file size          (blocks, -c) 0
open files                      (-n) 1024
stack size              (kbytes, -s) 8192
  
[root@fp-web-112 src]# ulimit -c -n -s -H
core file size (blocks, -c) unlimited
open files (-n) 4096
stack size (kbytes, -s) unlimited

-H表示显示的是hard limit。从结果上可以看出soft limit和hard limit的区别。unlimited表示no limit, 即内核的最大值。
posted @ 2022-04-07 12:33  jinzi  阅读(885)  评论(0编辑  收藏  举报