Erlang 性能优化总结

本人主要从事游戏后端开发,所以本文只从游戏开发角度分析Erlang使用中应注意的问题和优化点。

  1.  单节点还是多节点

Erlang节点之间的通信是透明的,节点内部和外部之间的调用一致。基于这样的特性,很多人会选用多节点,把各子系统(登陆节点,玩家节点,地图节点,全局节点等)分配到不同的节点中,以支持更多的在线玩家。这样做的出发点是好点是好的,但会引起一列表的问题:登陆、转场逻辑复杂,节点间的消息广播频繁,玩家数据同步、一致问题,内存消耗,运维复杂化等。相比之下,单节点就简单多了,不用考虑节点通信,玩家数据保证一致,运维方便,一机多服。在开启SMP的情间下,单节点的性能已经很好。对页游的业务,同时在线达到5000人已经非常少见,即使达到也是首服当天才会出现,单节点完全可以应付这样的情况,所以没必要用多节点,增加系统复杂性。 继续阅读

发表在 Erlang | 标签为 , , | 2条评论

erlang中的原子(atom)内部实现

Erlang中的atom由通用hash表实现,虚拟机中atom最终的用数值表示,对应表中的下标值。本文通过list_to_atom函数的实现,分析atom在虚拟机中的内部实现。 继续阅读

发表在 erts内核 | 标签为 , , , , | 留下评论

Erlang日志系统

error_logger开启后,默认通过erlang:display/1输出日志,kernel应用启动时会调整日志输出方式,默认会调整为控制台输出。见源码:kernel:start/2 继续阅读

发表在 Erlang | 标签为 , , | 留下评论

Erlang多核编译优化

在文章http://erlangdisplay.iteye.com/blog/1264038中介绍了Erlang并行编译。原理是开启多个进程,每次把文件分配到各进程中编译,等所有进程编译完成后,再进行下一轮编译。
按上面的方式,虽然提升了编译速度,但还存在一个问题。因为每组中的文件大小不一,各自所需的编译时间不同,所以会出现进程空闲等待的问题。

继续阅读

发表在 Erlang | 标签为 , , | 2条评论

Erlang获取record信息

Erlang中的record在编译时会转换为tuple,如 -record(test,{id = 1,name = “test”}),编译后会转换为{test,1,”test”}。在项目中无法动态获取record的字段定义,如果想获得record中的定义,可通过record_fields/1接口获得,但参数只能是atom,不能为变量。record_fields/1在编译时已经生成record字义信息。

有一个折衷的方法,项目中可以动态获得record字义。github上有个开源项目dynarec,在编译时生成record信息的接口函数,
https://github.com/kqqsysu/dynarec

继续阅读

发表在 Erlang | 标签为 , | 留下评论

Linux下安装SVN+Apache

1.安装 httpd, svn,mod_dav_svn

2. 安装完成后,将会生成subversion.conf配置(/etc/httpd/conf.d/subversion.conf),里边已有简要的配置说明了。我们假定SVN的路径为 http://192.168.0.1/repos/stuff来安装SVN库。

3. 创建SVN库,库路径目录为/repo/svn

(开启SELinux的情况下,要设置安全性本文类型为httpd_sys_content_t,否则会出现 permissions denied) 继续阅读

发表在 Linux | 标签为 , , | 留下评论

Linux(Centos)下安装Flex AIR

由于项目的Flash前端需要在Linux下编译发布,所以需要在Centos上安装AIR的编译环境。AIR 的Linux版本只支持到2.6,后面的版本已不再支持Linux平台,所以我们只能安装2.6版本的AIR。

1. 下载AIR安装包AdobeAIRInstaller.bin
http://airdownload.adobe.com/air/lin/download/2.6/AdobeAIRInstaller.bin

添加执行权限

继续阅读

发表在 Linux | 标签为 , , | 2条评论

linux下rc.local中的服务开启失败分析

linux下可以在rc.local中设置开机启动任务。开机时,系统会根据 /etc/inittab中设置的运行级别,开启/etc/rc.d下相应的服务。如多用户启模式为3,则系统会开启/etc/rc.d/rc3.d/下的服务。

/etc/rc.d/rc3.d/的目录列表:

20140323164552

其中K表示需关闭的服务,S表示开启服务,后面的数据表示关闭或开启的顺序。/etc/rc.d/rc3.d/下的服务一般通过软连接,指向到/etc/init.d中。

继续阅读

发表在 Linux | 留下评论