Erlang应用优化指南.ppt

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Erlang应用优化指南.ppt

Erlang应用优化指南 余 锋 2009/11/07 优化案例 Erlang应用优化案例 Ehttpd测试 输出“Hello world” 可超过20000并发短链接 Hotwheel 40000广播 Google hotwheel 简单Key/Value查询系统 HTTP echo每秒20000短连接单个CPU Taskset -c 1?? erl +K true +h 99999? +P 99999?? -s ehttpd 优化前后对比 11203 20090 硬件普通桌面双核CPU,2G内存 微调Linux VM和协议栈,32位操作系统 优化和patch了Erlang VM,采用beam.plain 优化了ehttpd程序,采用系统高级网络选项 Hotwheel广播服务 Joel悬赏$2000,挑战20K 成功挑战通过每CPU 40K/s 这个应用代表了大部分网络服务程序的模型,对于整个业界水平的提高很有借鉴意义 简单Key/Value查询系统(身份证查询系统?) 测试硬件 8核心 16G内存 测试结果 并发长链接数1000000 并发查询100000/s 预备知识 优化的层次 选型 操作系统 Erlang VM 语言 集群 业务 Erlang适合做什么 IO 密集型 高度优化完备的IO, 顶尖的C高手20年的耕耘 高性能网络服务器 多年的开发 非常完善 类似于一个操作系统 很好的处理掉了[高性能服务器Seven Sins] 轻松达到C10K CPU利用 先进的SMP调度器更好的利用多核心CPU Erlang和操作系统的类比 *nix操作系统,用C++做例子 函数 (void fun() {}) 类 (class mod{};) 模块(mod.cpp) 可执行文件(编译器,机器指令) 应用程序包括数据文件 OS启动,系统进程(抢占式调度 ) IPC通讯 监控工具(Top) Erlang和操作系统的类比 (cont’d) 函数 fun () - ok end 模块 module mod. mod.erl Beam文件 编译器opcode Application beam+数据文件 Erlang和操作系统的类比 (cont’d) VM bootstrap Erlang进程 (抢占调度 ) 消息 Port IPC 工具集 etop ERTS内部结构 Erlang进程调度原理 调度原则 尽量让一个CPU忙 Logic CPU从低到高 上下文切换 context_switch开销 消息传递的开销 拷贝 malloc/free 垃圾收集 Port调度原理 Port独立调度 和宿主进程同一个调度器 调度的单位是该Port触发的一串IO事件 调度延迟 busy_port 水位线buffer 锁 如何优化 工具方法 理解了Erlang和*nix的相同点 借鉴*nix 的工具和方法 创造工具和方法 操作系统层面的优化 操作系统的选择 32位系统 vs. 64位系统 没有内存空间限制 64位比较慢 RHEL上游厂商致力于高性能操作系统 Vdso RhelRt 重新用ICC编译内核和glibc VM和TCP协议栈的优化 操作系统层面的优化 降低系统的swapness, 避免内存颠簸 资源倾斜,全力服务应用 给我尽可能多的物理内存,越多越好 Erlang运行期层面优化 新版本的OTP致力于SMP方面的改进 更细粒度的锁 更好的内存分配器 Hipe(erlang的jit) 全面启用preloaded otp库 Crack系统 减少无必须的系统调用 参数微调 Effective guide 未公开的特性 调度器绑定 语言层面优化 减少VM GC开销 进程字典 加大min_heap_size Hibernate Cache Lazy eval Record或者tuple变化部分和惰性部分分开 语言层面优化 (cont’d) 模式匹配 相同的标签尽可能的放在一起 排序 二分查找 避免创建无用的中间变量 数据结构设计尽可能的每个调度器一个 erl +”’S’” mod.erl bin_opt_info 直接函数调用 vs. 异步消息 集群层面优化 节点间通讯 inet_tcp 唯一通道,潜在的瓶颈 节点管理成本 net tick 开销不可忽视 节点up、down开销 Ei库用C来赢得速度 Pg2简化管理 业务层面的优化 尽可能的简单 能够并行计算 Small message, big computation 为业务估算要消耗的资源提早分配 内存 CPU 内存和CPU的平衡 部署 计算密集型和IO密集性在同一台物理机器资源互补 Plain vs. SMP plain适合做简单的IO操作 smp适合做密集计算 Hibernate 根

文档评论(0)

kaku + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8124126005000000

1亿VIP精品文档

相关文档