`
mryufeng
  • 浏览: 989443 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

erts运行期内存使用情况查看

阅读更多
翻erlang的代码发现erlang对memory的管理非常重视 内置了多种内存allocator:
  • B: binary_alloc
  • D: std_alloc
  • E: ets_alloc
  • F: fix_alloc
  • H: eheap_alloc
  • L: ll_alloc
  • M: mseg_alloc
  • S: sl_alloc
  • T: temp_alloc
  • Y: sys_alloc
多种分配策略:
    1。 Best fit
    2 。 Address order best fit
    3. Good fit
   4. A fit

还要一个erl_mtrace 模块专门收集erts允许期间的内存使用情况 然后通过tcp socket发送到 emem 这个程序中打印到 tty让人观察系统的情况。

emem在lib/tools/目录下 make install的时候默认没有安装。

启动 ./lib/tools/bin/i686-pc-linux-gnu/emem -p 1234

然后用erl -sname foo  +Mit ip:1234就可以观察erlang的内存运作了.

注意erts的文档里面写:
+Mit X
<!----> Reserved for future use. Do not use this flag.
是属于未公开的 。
分享到:
评论
6 楼 jigsaw 2007-08-02  
我错了 gnumalloc行的通

ptmalloc3的效果则更好(不负责任的说,跟gnumalloc比,节省90%的内存)
http://www.malloc.de/en/

而ptmalloc3也早就在里面glibc了 只不过俺一直用freebsd4.x 不知道这个事实
5 楼 jigsaw 2007-08-02  
对 我就是这个意思 绕过glibc
用什么库代替它 可以使得user space的内存管理有能力把内存还给kernel
当然 我自己做是做不出来的 这里必须考虑到mem/CPU使用的平衡
我说的上下文不是erlang
4 楼 mryufeng 2007-08-02  
这个是glibc实现的malloc free的问题  和erlang没有关系 不过erlang可以用自己的malloc实现 elib_malloc
3 楼 jigsaw 2007-08-02  
user space的内存管理好像比kernel里的还头疼---我是说freebsd5.0以前的OS

我现在也有个mem allocator的问题
因为用的还是较老的系统 free 没办法把内存还给kernel
app是个典型的proxy类的service 里面无数的malloc/free
跑久了之后active mem维持在95%

不知道mryufeng有无碰到此问题,是怎么解决的? (gnumalloc无效)

2 楼 mryufeng 2007-07-31  
俺以前也是想法设法作memory allocator, 所以知道作这个的艰辛和对系统性能提高的影响。
1 楼 pi1ot 2007-07-31  
这位老兄研究的不浅。

相关推荐

Global site tag (gtag.js) - Google Analytics