linux线程内存开销

1.首先是线程自己栈,程序没设置过,就是默认的,ulimit -s 中的值,现在一般都是10240(单位KB)。

2.跟版本有关,是否有 glibc 的 malloc per thread arenas 特性,有了这个特性,设置不好,一个新线程要增加至少64MB的内存,

  这个主要是用来解决,线程申请堆内存时,互相竞争的问题。每个线程优先在这个空间内申请堆空间

如何判断线程是否采用了 per thread arenas 呢?最简单的看大小嘛,gdb到程序上,每创建一个线程的时候去看/proc//status,

比较虚拟内存增长值,如果大致多了64M+栈空间大小,那就是启用了。

如果还不能确定的话,那就去看/proc//smaps,文件中是否有类似

2adf40021000 (65404 KB)  ---p (00:00 0)

属性是---p,大小是65404KB的段,这个就是arenas,也证明采用了per thread arenas

Arena
arena的数量由系统的核数量决定。

32位系统:
arena的数量 = 2 * 核的数量
64位系统:
arena的数量 = 8 * 核的数量

你可能感兴趣的:(服务器)