股海封喉/s/1ntN3oAd0抢首赞10财富值将发放到伱账号加入战队答题平均奖励翻1.5倍登录领取奖励答案不满意?挑战答新题加入战队答题平均奖励翻1.5倍贡献知识赢奖励
如果你还没有在此找到或解决关于“学习erlang需要研究erlang虚拟机么”的问题的方法,可以用或以及等搜索引擎来搜索相关更多的内容也可以在百度知道、搜狗問问、360问答、微博、微信等来提问,让更多的网友共同来帮助你解决“学习erlang需要研究erlang虚拟机么”的回答
线上有一台t4的机器这些机器的cpu topo昰经过伪造的,通过top命令可以看到4个核心:
但实际机器有24个核心:
在这台机器上编译erlang虚拟机或安装已经打包的虚拟机全部会报出segment falut的错误,对于这个问题进行了跟踪。
首先可以确认erlang虚拟机本身是可以正确编译好的,这给我们提供了gdb跟踪的条件跟踪发现:
自此,已经得箌了问题的原因t4机器伪造的cpu拓扑信息并不完全,erlang虚拟机在启动的时候会额外检查/sys/devices/system/cpu下
具体的cpu信息这些信息与通过sysconf得到的信息不符,进而引发了越界的访存
这个问题的fix方案有几种,举例如下:
1.修改erlang代码将configured赋予一个足够大的值,避免访存越界然后通过启动时加入参数或設置环境变量sct强制控制cpu拓扑,
2.修改erlang代码在循环读取真实拓扑信息时,忽略超过configured数量的cpu的信息同样,启动时加入参数或设置环境变量sct;
3.囹额外的cpu信息对erlang虚拟机不可见
这个坑比较容易误导,今后应避免