当前位置: 技术问答>linux和unix
请教:线程数量的限制
来源: 互联网 发布时间:2016-11-13
本文导语: 1 . 程序在运行过程中会启动新线程并又会结束掉,时间长了导致system()调用失败,报Cannot allocate memory。 2 . 添加代码故意多启动10几个线程,肯定重现上述问题。 3 . 程序中是通过封装线程类来启动和管理线程的...
1 . 程序在运行过程中会启动新线程并又会结束掉,时间长了导致system()调用失败,报Cannot allocate memory。
2 . 添加代码故意多启动10几个线程,肯定重现上述问题。
3 . 程序中是通过封装线程类来启动和管理线程的。我在构造函数中加计数,统计正常有21-27左右。
4 . /proc/pid/status 显示 Threads 通常有3、5、7、8数量。
5 . ulimit 显示 stack(kb) 1024。改为20480(kb) 后没有任何反应。
6 . 程序刚启动是 VSZ 值为 200m 多点。按照2的方式达到了400m左右。物理内存有400M。出错时启动其他程序没有问题。
感觉系统资源还有很多,好像这个进程本身的什么限制。各位帮我看看是怎么回事,谢谢!
2 . 添加代码故意多启动10几个线程,肯定重现上述问题。
3 . 程序中是通过封装线程类来启动和管理线程的。我在构造函数中加计数,统计正常有21-27左右。
4 . /proc/pid/status 显示 Threads 通常有3、5、7、8数量。
5 . ulimit 显示 stack(kb) 1024。改为20480(kb) 后没有任何反应。
6 . 程序刚启动是 VSZ 值为 200m 多点。按照2的方式达到了400m左右。物理内存有400M。出错时启动其他程序没有问题。
感觉系统资源还有很多,好像这个进程本身的什么限制。各位帮我看看是怎么回事,谢谢!
|
ulimit改大了只会允许更少的线程啊
|
这个和堆栈没有关系,是system函数的问题,
system函数会启动一个新的进程,进程的创建是拷贝当前的进程,当当前进程占用资源比较大的时候,就会出现Cannot allocate memory这个问题
system函数会启动一个新的进程,进程的创建是拷贝当前的进程,当当前进程占用资源比较大的时候,就会出现Cannot allocate memory这个问题
|
5 . ulimit 显示 stack(kb) 1024。改为20480(kb) 后没有任何反应
没有反应是什么意思?没有好转?
没有反应是什么意思?没有好转?
|
没有资源分配给当前的进程了
|
没有资源