如何修改进程中活动的线程最大数?
试验:
系统: Redhat 9
编译器: G++
一个程序主进程中创建1000个线程,启动这1000个线程。
结果:
创建1000个线程成功,启动线程,活动的线程只有254个。想了一下,大概是加上主进程的线程,一个进程活动的最大线程数为255。
请教,如何修改一个进程中活动线程的最大数呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
对呀,我也正想问这个问题的。
我是用Linux9的Apache httpd进程,结果运行一段时候后,当线程到达255个时候,Apache httpd就不好使了,需要认为的重启动httpd进程。正苦恼如何修改这个最大数目。而且有疑问,为什么Apache这么土,很快就能到255呢?难道他不会自己释放一些资源吗?
楼上的,不是Apache土,如果同时有255个用户连接到你的服务器,它怎么可能杀死线程,释放资源?
我想应该linux下应该有命令,可以修改单个线程中活动线程的最大数目,但不知道具体命令是什么
我试了下面的命令,结果不行。
ulimit -n 10000 //修改可以打开的文件数
ulimit -u 10000 //修改可以运行的进程数
修改了之后,创建线程速度变的很慢了,郁闷
我不知道如何修改最大线程数,但是我决得除非测试,正常情况下似乎没有任何理由需要创建1000个线程吧。编程中有一种并发模式叫做线程池,就是用来避免创建过多线程的。
呵呵,我正是想做一个测试程序,模拟1000个--10000个用户登录服务器的情况,结果最多只能同时254个用户登录,达不到预期效果。
楼主看看 sysctl kernel.threads-max=? 吧。
我的是2048。
楼上的兄弟,
我通过下面命令,将threads-max直接改为2048,但还是不行,一个进程可以创建3000个线程(不知道2048到底在什么地方生效的),却依然只有255个线程可以活动
#echo 2048 >; /proc/sys/kernel/threads-max
活动线程?
不是同时只能有一个 process 是 run的么?怎么会有 255 这么多呀!你的机器好多CPU呀!
下面是测试程序部分代码,CSendThread是一个封装了pthread的类,Start()是启动线程命令。
---------------------------------
#include "SendThread.h"
#include <iostream>;
#include <sstream>;
#include <vector>;
using namespace std;
const int VECSIZE = 3000;
vector<CSendThread *>; sendVec(VECSIZE);
for(int ix = 0; ix < sendVec.size(); ix++)
{
sendVec[ix] = new CSendThread();
sendVec[ix]->;Start();
}
for(;
{
sleep(10);
}
---------------------------------------
http://www.chinaunix.net/jh/23/132343.html
这个有用吗