实际上应该是说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}文件句柄数