linux线程内存开销

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

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

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值