论坛首页 综合技术论坛

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

浏览 4861 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-31  
翻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.
是属于未公开的 。
   发表时间:2007-07-31  
这位老兄研究的不浅。
0 请登录后投票
   发表时间:2007-07-31  
俺以前也是想法设法作memory allocator, 所以知道作这个的艰辛和对系统性能提高的影响。
0 请登录后投票
   发表时间:2007-08-02  
user space的内存管理好像比kernel里的还头疼---我是说freebsd5.0以前的OS

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

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

0 请登录后投票
   发表时间:2007-08-02  
这个是glibc实现的malloc free的问题  和erlang没有关系 不过erlang可以用自己的malloc实现 elib_malloc
0 请登录后投票
   发表时间:2007-08-02  
对 我就是这个意思 绕过glibc
用什么库代替它 可以使得user space的内存管理有能力把内存还给kernel
当然 我自己做是做不出来的 这里必须考虑到mem/CPU使用的平衡
我说的上下文不是erlang
0 请登录后投票
   发表时间:2007-08-02  
我错了 gnumalloc行的通

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

而ptmalloc3也早就在里面glibc了 只不过俺一直用freebsd4.x 不知道这个事实
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics