erlang初始化内存申请跟ulimit/limit的关系« 远离尘世的那份宁静

实际上应该是说erlang内存申请跟文件句柄数的关系可能好一点?

前段时间有个项目打算尝试erlang做一些新的开发,让我这边准备 下测试环境,不过erlang对我来说,xx是个新的东西,当然,也还好,这个对我来说,就是安装嘛,估计问题不大,呵,在程序员的开发机和我的 Debian机上都没发现太大问题

当准备放到外服测试环境时,程序员刚跑一起来的那一刻,我PS了一下,发现刚起来erlang就占用了 几百M内存,当时{dy}反应是难道是程序员同时一下load了太多东西了?就提醒程序员留意一下了,不过他们也暂时没发现问题

跑了一个晚 上,第二天程序员同学告诉我提示内存不足,errno是enomem,{dy}反应是这么神奇,然后询问程序同学是否有更详细的debug,当然我也开始从系 统方面去思考这个问题

重新编译了一个lite版的erlang,发现还是一样,要几百M内存

到其它机器再编译一个,发现 这次内存少了,而且少的相当整齐,大概是原来的一半,对比了下这两台机器的区别,两点比较明显的区别是一台是64bit,8G内存,一台是 32bit,4G内存,难道跟系统的内存有关系(这两台的系统参数配置xx一样)?咨询了下程序员同学开发机的内存,及erl占用的内存,发现又不成比例 了,猜测跟系统某参数有关系..

开始just fucking google it,没google到比较直接讲erlang内存申请方式的文章.只好到erlang的源码目录跑了下

grep -r alloc *

看看是否能有所斩获,让我找到一个看起来比较熟悉的关键字max_files,呵

erts/emulator/sys/unix/sys.c:?????? erts_alloc(ERTS_ALC_T_DRV_TAB, max_files * sizeof(struct driver_data));

难 道跟系统{zd0}文件句柄的参数有关?看了一下两台机的limit,

descriptors? 655000

把 这个改成1024,再跑erl,内存降到几十M,看来跟这个有关系了,呵

使用关键字”erlang max_files limit” 让偶搜索到一篇叫<>的文章,里面1.62节提到了这一点

之 后程序同学提示我能不能改小这个limit?系统的限制我就不想改了,也不能乱改了,但改变当前shell的limit还是可行的

CSH

%limit descriptors 1204

BASH/SH

$ ulimit -n 1000

清静~~~~

PS:limit/ulimit更改文件句柄数,不能超过 系统设置的{zd0}文件句柄数

Leave a Reply

郑重声明:资讯 【erlang初始化内存申请跟ulimit/limit的关系« 远离尘世的那份宁静】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——