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, 即内核的最大值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?