LINUX最大线程数及最大进度数葡京在线开户

在线安装包:https://cid-3ca83445bd7767a0.office.live.com/browse.aspx/.Public/VS2010

查阅最大线程数:

 

cat /proc/sys/kernel/threads-max

ISO:http://download.microsoft.com/download/E/B/A/EBA0A152-F426-47E6-9E3F-EFB686E3CA20/VS2010SP1dvd1.iso

ulimit

 

User limits – limit the use of system-wide resources.

革新内容:http://msdn.microsoft.com/en-us/visualc/gg697159

Syntax
ulimit [-acdfHlmnpsStuv] [limit]

葡京在线开户 1

Options

 

-S Change and report the soft limit associated with a resource. 
-H Change and report the hard limit associated with a resource. 

葡京在线开户 2

-a All current limits are reported. 
-c The maximum size of core files created. 
-d The maximum size of a process’s data segment. 
-f The maximum size of files created by the shell(default option) 
-l The maximum size that may be locked into memory. 
-m The maximum resident set size. 
-n The maximum number of open file descriptors. 
-p The pipe buffer size. 
-s The maximum stack size. 
-t The maximum amount of cpu time in seconds. 
-u The maximum number of processes available to a single user. 
-v The maximum amount of virtual memory available to the process. 

 

ulimit provides control over the resources available to the shell and to
processes started by it, on systems that allow such control.

葡京在线开户 3

If limit is given, it is the new value of the specified resource.
Otherwise, the current value of the soft limit for the specified
resource is printed, unless the `-H’ option is supplied.

When setting new limits, if neither `-H’ nor `-S’ is supplied, both
the hard and soft limits are set.

Values are in 1024-byte increments, except for `-t’, which is in
seconds, `-p’, which is in units of 512-byte blocks, and `-n’ and
`-u’, which are unscaled values.

The return status is zero unless an invalid option is supplied, a
non-numeric argument other than unlimited is supplied as a limit, or an
error occurs while setting a new limit.

ulimit is a bash built in command.

Ulimit命令
安装限制
可以把命令加到profile文件里,也得以在/etc/security/limits.conf文件中定义
限制。
命令参数
-a 展现全部限制
-c core文件大小的上限
-d 进度数据段大小的上限
-f shell所能创制的文件大小的上限
-m 驻留内部存款和储蓄器大小的上限
-s 堆栈大小的上限
-t 每秒可占用的CPU时间上限
葡京在线开户,-p 管道大小
-n 打开文件数的上限
-u 进程数的上限
-v 虚拟内部存款和储蓄器的上限
除可用Ulimit命令设置外,也足以在/etc/security/limits.conf文件中定义限制。
domino type item value
domino是以符号@起始的用户名或组名,*代表拥有用户,type设置为hard or
soft。item指
定想限制的财富。如cpu,core nproc or maxlogins。value是对应的限制值。

系统限制暗中认可值

[root@flyinweb ~]# ulimit -a 
core file size (blocks, -c) 0 
data seg size (kbytes, -d) unlimited 
scheduling priority (-e) 0 
file size (blocks, -f) unlimited 
pending signals (-i) 32764 
max locked memory (kbytes, -l) 32 
max memory size (kbytes, -m) unlimited 
open files (-n) 1024 
pipe size (512 bytes, -p) 8 
POSIX message queues (bytes, -q) 819200 
real-time priority (-r) 0 
stack size (kbytes, -s) 10240 
cpu time (seconds, -t) unlimited 
max user processes (-u) 32764 
virtual memory (kbytes, -v) unlimited 
file locks (-x) unlimited

[root@flyinweb ~]# lsb_release -a 
LSB Version:
:core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch 
Distributor ID: CentOS 
Description: CentOS release 5.2 (Final) 
Release: 5.2 
Codename: Final

linux 系统中单个进度的最大线程数有其最大的限制 PTHREAD_THREADS_MAX

以此限制能够在 /usr/include/bits/local_lim.h 中查看

对 linuxthreads 那么些值一般是 1024,对于 nptl
则从未硬性的限量,仅仅受限于系统的能源

其一体系的能源首要就是线程的 stack 所占有的内存,用 ulimit -s
能够查看默许的线程栈大小,一般意况下,那些值是 8M

能够写一段简单的代码验证最多能够成立几个线程

int main() { int i = 0; pthread_t thread; while (1)
{ if (pthread_create(&thread, NULL, foo, NULL) != 0) return; i
++; printf(“i = %d\n”, i); } }

测验呈现,在 linuxthreads 上最多能够成立 381 个线程,之后就会再次来到EAGAIN

在 nptl 上最多能够成立 382 个线程,之后就会重回 ENOMEM

这一个值和驳斥完全相符,因为 32 位 linux 下的长河用户空间是 3G
的轻重缓急,也正是 3072M,用 3072M 除以 8M 得
384,不过其实代码段和数据段等还要占用部分空中,那么些值应该向下取整到
383,再减去主线程,得到 382。

那干什么 linuxthreads 上还要少三个线程呢?那可太对了,因为 linuxthreads
还供给1个管制线程
http://www.cnblogs.com/roucheng/
为了突破内部存款和储蓄器的限量,能够有二种艺术

1) 用 ulimit -s 1024 减小暗中认可的栈大小
2) 调用 pthread_create 的时候用 pthread_attr_getstacksize
设置2个较小的栈大小

要注意的是,固然如此的也心中无数突破 1024 个线程的硬限制,除非重新编写翻译 C 库

连带内容:

壹 、2.4根本与2.6根本的关键分化 

2.4根本的头名系统上(AS3/ENCOREH9),线程是用轻量进度实现的,各个线程要私吞1个进程ID,在服务器程序上,假诺境遇高点击率访问,会招致进度表
溢出,系统为了掩护溢出的进度表,会有刹车的中止服务地方,而2.6内核就不会发出是因为大批量线程的创制和销毁导致进度表溢出的标题

② 、线程截止必须释放线程堆栈 
正是说,线程函数必须调用pthread_exit()甘休,不然直到主进程函数退出才假释,特别是2.6内核环境,线程创立速度高速,一极大心立即内部存款和储蓄器被
吃光,那一点反倒是2.4基础环境好,因为2.4基石创建的是经过,而且线程创设速度比2.6内核慢几个数据级。尤其提醒,在六21位CPU,2.6内核创制线程的进度更是疯狂,要是太快的话,加上usleep ()暂停一丝丝岁月相比好

③ 、不要编必要锁的线程应用 
唯有这个不须要互斥量的先后才能最大限度的应用线程编制程序带来的裨益,不然只会更慢,2.6内核是抢占式内核,线程间共享抵触时有发生的可能率远比2.4基本环境
高,特别要注意线程安全,否则即正是单CPU也会发生莫名其妙的内部存款和储蓄器不联合(CPU的高速缓存和主存内容不平等),速龙的新CPU为了品质使用
NUMA架构,在线程编制程序中毫无疑问要留心扬长避短。

肆 、单进度服务器最大并发线程数与内部存款和储蓄器 
很有趣,在私下认可的ulimit参数下,不改动内核头文件 
AS3 512M内部存款和储蓄器最多一千并发不止连接 
CentOS4.3 512M内部存款和储蓄器最多300并发不止连接 
就如是CentOS不如AS3,这里关键缘由是ulimit的布局造成,三个连串私下认可的布署差距不小,要想单进度维持更二十多线程接收并发连接,就要尽量压缩
ulimit
-s的参数,插更加多的内部存款和储蓄器条,单进度服务器上3000并发一点都不难,POSIX暗中认可的限定是每经过64线程,但NTPL并非纯正POSIX,不必理会那么些限制,2.6内核下真正的界定是内部存款和储蓄器条的插槽数目(或许还有买内部存款和储蓄器的钱数)

近期几天的编制程序中,注意到在33位x86平台上2.6内核单进度创立最大线程数=VI奥德赛T上限/stack,与总内部存款和储蓄器数关系十分小,三11位x86系统暗中同意的
VIPAJEROT上限是3G(内部存款和储蓄器分配的3G+1G主意),暗中认可stack大小是10240K,因而单进程创立线程暗许上限也就300(3072M /
10240K),用ulimit -s
修改stack到1024K则使上限升到大体3050。小编手下尚无60个人系统,不亮堂2.6内核在陆拾位上单进程创制线程上限(实际上是本人懒得在同事的
机器上装fc4_x86_64)。

前天买了一套廉价的陆拾4个人x86系统(六21个人赛杨+杂牌915主板),安装了CentOS4.3的x86_64版本,跑了一遍上边包车型地铁小程序,获得的结果是:在ulimit
-s 4096的场合下,单进度最大线程数在15000多或多或少,用top看 
VIPAJEROT 的上限是64G,也正是叁拾四人, cat /proc/cpuinfo的结果是:address sizes :
36 bits physical, 48 bits virtual, 和自个儿想象的正式64位系统分化,
作者直接以为陆拾4人系统的内部存款和储蓄器空间也是六十八人的 
附注1: 
单 位里某BSD
FANS用AMD64台式机跑小程序测试线程制造速度(线程创立后及时phread_detach()然后跟随pthread_exit(),共计
100万个线程),同样源码OpenBSD竟然比FreeBSD快了3倍,哪一天OpenBSD也变得疯狂起来了?