linux 设置堆栈大小 为无限制

作者&投稿:聊纪 (若有异议请与网页底部的电邮联系)
Redhat Linux中怎样自动设置线程堆栈大小?~

不是可以直接用线程属性进行设置吗?

我写了一个小程序。如下:

#include
#include #define Thread_NUM 5void *MultiThread_soap_serve(){ sleep(5); printf("new pthread!!
");}//PTHREAD_STACK_MIN 经过计算是16K。//64*16K = 1M,线程堆栈应该是够用的。#define MICHAEL_SET_PTHREAD_STACK_SIZE 64int main(){ pthread_attr_t attr; pthread_attr_init(&attr); size_t stacksize = MICHAEL_SET_PTHREAD_STACK_SIZE*PTHREAD_STACK_MIN; //stacksize =PTHREAD_STACK_MIN; //stackaddr=(void*)malloc((N+1)*PTHREAD_STACK_MIN); //pthread_attr_getstack(&attr,&statckattr,&stacksize); //pthread_attr_setstack(&attr,stackaddr,); pthread_attr_setstacksize(&attr,stacksize); int iThreadNum = 0; pthread_t PSoapThread[Thread_NUM]; for ( ; iThreadNum < Thread_NUM ; iThreadNum++ ) { pthread_create(&PSoapThread[iThreadNum],&attr,MultiThread_soap_serve,(void *)NULL); } pthread_attr_destroy(&attr); while(1) { sleep(10); printf("main!!
"); }}

Linux内核栈溢出(stack overflow)问题
最近一段时间在设计和开发一个Linux内核模块,进入到最后的正确性测试与稳定性测试阶段。在这个阶段发现了一个非常有意思的问题,堆栈溢出(stack overflow)。Linux内核堆栈溢出之后直接导致了系统kernel Panic。由于导致stack overflow的原因是递归调用导致的,所以,最后通过调试串口导出的kernel panic信息很快就定位问题所在了,否则这样的问题还真是很难调试和发现。通过这次bug,我们应该记住的是:Linux内核stack资源是有限的,而递归调用将大量消耗stack资源,因此在内核编程中尽量少用递归算法,否则将会导致出乎意料的一些问题。依次类推,为了减少stack资源的消耗,程序的局部变量定义的不要太大,否则也将会消耗大量stack资源,从而导致内核程序的不稳定。

为了解决递归调用导致的问题,我将递归算法改写成了非递归算法,解决了stack overflow的问题。在此介绍一下递归算法改写成非递归算法的一些思想。在项目实现过程中,需要对IO请求进行按顺序排队,因此采用了效率较高并且实现简单的快速排序算法,该算法是一种分治算法,即将排序队列进行切分,分解成一系列的小问题进行求解,针对这种问题,很容易采用递归的办法进行实现,伪代码描述如下:
/* qs_sort实现从小到大的排序 */
Struct bio qs_sort(struct bio_list *list_head, struct bio *bio_tail) {
Struct bio_list *less_list, *large_list;
Struct bio *middle_bio;

/* 递归调用结束点,小问题求解完毕,直接返回最后一个元素 */
If (!list_head) {
Return bio_tail;
}

/* 对队列进行切分,选择一个middle_bio,并且按照middle_bio将其切分成less_list队列和large_list队列 */
Split_list(list_head, less_list, large_list, &middle_bio);

/* 采用递归的方法实现大队列的排序操作 */
Middle_bio->bi_next = qs_sort(large_list, bio_tail);

/* 采用递归的方法实现小队列的排序操作 */
Return qs_sort(less_list, middle_bio);
}

你好。

执行命令ulimit  -a,查看栈大小的限制。

通过使用  ulimit  -s 数字 进行设置。 



在/etc/profile 的最后面添加ulimit -s unlimited 保存,source /etc/profile使修改文件生效

linux查看修改线程默认栈空间大小 :ulimit -s
1、通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下 为10240 即10M
2、通过命令 ulimit -s 设置大小值 临时改变栈空间大小:ulimit -s 102400, 即修改为100M
3、可以在/etc/rc.local 内 加入 ulimit -s 102400 则可以开机就设置栈空间大小
4、在/etc/security/limits.conf 中也可以改变栈空间大小:
#<domain> <type> <item> <value>
* soft stack 102400
重新登录,执行ulimit -s 即可看到改为102400 即100M


霞山区15030034380: linux 设置堆栈大小 为无限制 -
凭将阿魏: 在/etc/profile 的最后面添加ulimit -s unlimited 保存,source /etc/profile使修改文件生效 linux查看修改线程默认栈空间大小 :ulimit -s1、通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下 为10240 即10M2、通过命令 ulimit -s 设置大小值 ...

霞山区15030034380: Linux进程堆的默认大小是多少 -
凭将阿魏: 1、通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下 为10240 即10M 2、通过命令 ulimit -s 设置大小值 临时改变栈空间大小:ulimit -s 102400, 即修改为100M

霞山区15030034380: Redhat Linux中怎样自动设置线程堆栈大小? -
凭将阿魏: 不是可以直接用线程属性进行设置吗?我写了一个小程序.如下:#include #include #define Thread_NUM 5void *MultiThread_soap_serve(){ sleep(5); printf("new pthread!!\n");}//PTHREAD_STACK_MIN 经过计算是16K.//64*16K = 1M,线程...

霞山区15030034380: linux怎样在主线程上设置子线程的堆栈大小 -
凭将阿魏: Thread(ThreadGroup group, Runnable target, String name, long stackSize)分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小.

霞山区15030034380: linux 内核堆栈总大小 怎么决定 -
凭将阿魏: Linux内核栈溢出(stack overflow)问题 最近一段时间在设计和开发一个Linux内核模块,进入到最后的正确性测试与稳定性测试阶段.在这个阶段发现了一个非常有意思的问题,堆栈溢出(stack overflow).Linux内核堆栈溢出之后直接导致了...

霞山区15030034380: Linux c++ 如何自定义程序的堆栈大小 -
凭将阿魏: 函数是C语言的基本构件,是所有程序活动的舞台.函数的一般形式是: type-specifierfunction_name(parameterlist) parameterdeclarations { bodyofthefunction }具体参考:

霞山区15030034380: 一个栈段最大可以设置多大??为什么呢? -
凭将阿魏: 要看你的栈的段寄存器有多少位,有n位,那么最大就可以设置2的n次方个字节

霞山区15030034380: 如何使ulimit -
凭将阿魏: 个人总结:如何设置普通用户的ulimit值1、vim /etc/profile增加 ulimit -n 10240source /etc/profile 重新启动就不需要运行这个命令了.2、修改/etc/security/limits.conf增加* hard nofile 10240 \\限制打开文件数102403、测试,新建普通用户,切换到...

霞山区15030034380: es的句柄数不会自动下降是怎么回事 -
凭将阿魏: 1.由gc引起节点脱离集群 因为gc时会使jvm停止工作,如果某个节点gc时间过长,master ping3次(zen discovery默认ping失败重试3次)不通后就会把该节点剔除出集群,从而导致索引进行重新分配.解决方法:(1)优化gc,减少gc时间.(2)...

霞山区15030034380: linux怎么 设置 activemq jvm 内存参数 -
凭将阿魏: 典型JVM参数设置: java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -Xmx3550m:设置JVM最大可用内存为3550M. -Xms3550m:设置JVM促使内存为3550m.此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存. -...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网