[问]
其实我遇到的问题是需要最多能够创建1000个线程,但是现在这个还距离目标太远了。具体应该怎么修改,能否告诉我?谢谢了。
[答]
要创建1000个线程,可以先执行ulimit -s 2048。
这个问题要用程序的方法解决几乎是不可能的。
因为按RedHat Linux 9.0的posix线程实现,每个线程的父进程都是当前控制台进程,而不是调用pthread_create的那个进程的。而另一方面,在一个进程中能创建的线程个数又主要受堆栈的限制:2G/允许的最大堆栈大小,在i386平台上,控制台进程默认的最大堆栈大小为8M,所以能创建的线程数为2G/8M = 256个。但是,这个8M的限制可以通过命令ulimit修改,从而间接地增大可创建的线程个数。
这样,你的问题演化为“能否通过程序去修改控制台进程的最大堆栈大小参数?”。个人认为这个通过常规方法很难做到。
ulimit
功能说明:控制shell程序的资源。 语 法:ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数目>][-v <虚拟内存大小>] 补充说明:ulimit为shell内建指令,可用来控制shell执行程序的资源。 参 数: -a 显示目前资源限制的设定。 -c <core文件上限> 设定core文件的最大值,单位为区块。 -d <数据节区大小> 程序数据节区的最大值,单位为KB。 -f <文件大小> shell所能建立的最大文件,单位为区块。 -H 设定资源的硬性限制,也就是管理员所设下的限制。 -m <内存大小> 指定可使用内存的上限,单位为KB。 -n <文件数目> 指定同一时间最多可开启的文件数。 -p <缓冲区大小> 指定管道缓冲区的大小,单位512字节。 -s <堆叠大小> 指定堆叠的上限,单位为KB。 -S 设定资源的弹性限制。 -t <CPU时间> 指定CPU使用时间的上限,单位为秒。 -u <程序数目> 用户最多可开启的程序数目。 -v <虚拟内存大小> 指定可使用的虚拟内存上限,单位为KB。 |
修改ulimit 的参数
[root@web230 ~]# ulimit -n
1024
以修改 limit -n 为例
vi /root/.bash_profile
填加 ulimit -HSn 10240 保存退出
source /root/.bash_profile
[root@web230 ~]# ulimit -n
10240
修改成功!