SlideShare a Scribd company logo
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
*nix 操作系统,用 C++ 做例子 函数  (void fun() {}) 类  (class mod{};) 模块 (mod.cpp) 可执行文件(编译器,机器指令) 应用程序包括数据文件 OS 启动,系统进程(抢占式调度 ) IPC 通讯 监控工具 (Top) Erlang 和操作系统的类比
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 根据业务的特点 定时来做 快速打扫战场 释放资源
数据组织 进程和物理世界的对象 1:1  多用 ets tuple, list, array dict,  process dict 无锁结构 有限的调度器 每个调度器一个 slot
如何测量
测量什么 热点 Erlang 代码的热点 Erts 的热点 OS 的热点 延迟 调度排队 抖动 不是绝对的公平
测量工具 OS 层面 systemtap oprofile dstat top iptraf wireshark proc fs
Erlang 工具集 etop pman instrument lockcounter dbg erlang:statistics module:info  (inet, ets,…) erts_debug
Erlang 工具集 monitor os_monitor profile *prof 系列 snmp  appmon
可视化消息跟踪系统 Et_viewer Trace 机制
优化最佳实践
硬件和操作系统 物理内存 越多越好 大部分时候是瓶颈 >64G 过分? 操作系统 推荐 RHEL 5.X 资源倾斜给应用系统
编码 尽量多用 list comprehension ,让编译器来优化 多利用 iolist 和 gather write  Binary 注意 >256 才是引用计数的 Hipe_bif  也是个选择 避免昂贵的 BIF now() io_lib:format
CPU 亲缘性 Taskset 大量减少锁的竞争 Futex Spinlock Scheduler erl -sct db
Futex VDSO TCP/IP 协议栈 Socket 快速回收 大文件句柄数微调 send_file  tcp_defer_accept 操作系统 native 特性
提供内部状态的信息 完善的日志系统 Erlang 的一贯传统 调优的依据 关键参数可动态调整 便于观测效果 过程工具化、自动化 test server, common test, eunit 高压力测试 tsung 可诊断的系统
尽可能的利用 ERTS 的优势 port 整合不同的语言和系统 性能苛刻 可以考虑用 driver 改写关键部分 尽可能的利用高级特性如 {packet, 2}, http* 设计的协议什么的尽可能的方便 Erlang 处理 推荐工业标准的协议  asn.1  leex 和 yecc
资源竞争 锁还是存在的  只是下移到了 ETRS 不同的调度器间操作都需要锁 锁减少再减少 设计方面考虑业务并行 每 CPU 调度器并行 数据结构并行
广告时间 提供服务器架构、诊断、优化咨询服务 联系我 主页 :  http:// yufeng.info 邮件 :  e [email_address]
谢谢 提问时间

More Related Content

PDF
Oprofile linux
PDF
[嵌入式系統] 嵌入式系統進階
PPT
實作 Linux Driver 移植在樹莓 Pi 上:Linux One wire sensor & I2C framebuffer Driver Po...
PPTX
Free rtos简介
PDF
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
PPTX
2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)
PPTX
Linux期末 效能調教(kernel trnning)
PPT
89S51電路板
Oprofile linux
[嵌入式系統] 嵌入式系統進階
實作 Linux Driver 移植在樹莓 Pi 上:Linux One wire sensor & I2C framebuffer Driver Po...
Free rtos简介
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)
Linux期末 效能調教(kernel trnning)
89S51電路板

What's hot (14)

PDF
全端物聯網探索之旅 - 重點整理版
PDF
[嵌入式系統] MCS-51 實驗 - 使用 IAR (1)
PPT
Erlang Emulator Implementation
PPT
Godson x86
PPT
RoBoard 與 Lego NXT Sensors 之連接
PPT
Ch2 80x86计算机组织结构
PPT
3D Printer 關鍵軟體控制技術之分析與探討 @ COSCUP 2014
PPTX
Raspberry pi 基本操作
PPT
18 cpu02
PDF
3D Printer 韌體原始碼解析心得 (以 Marlin 為對象)
PPT
Raspberry Pi 智能風扇
PPTX
艾鍗學院-單晶片韌體-CC2500通訊實驗
PDF
ch7-pv1-modules
PDF
ch13-pv1-system-calls
全端物聯網探索之旅 - 重點整理版
[嵌入式系統] MCS-51 實驗 - 使用 IAR (1)
Erlang Emulator Implementation
Godson x86
RoBoard 與 Lego NXT Sensors 之連接
Ch2 80x86计算机组织结构
3D Printer 關鍵軟體控制技術之分析與探討 @ COSCUP 2014
Raspberry pi 基本操作
18 cpu02
3D Printer 韌體原始碼解析心得 (以 Marlin 為對象)
Raspberry Pi 智能風扇
艾鍗學院-單晶片韌體-CC2500通訊實驗
ch7-pv1-modules
ch13-pv1-system-calls
Ad

Viewers also liked (12)

PPT
Erlang全接触
PDF
Inside Erlang Vm II
PDF
My Sql Proxy
PPT
高级服务器设计和实现1
PPT
Erlang low cost_clound_computing
PPTX
高性能集群服务器(Erlang解决方案)
DOCX
mnesia脑裂问题综述
PPTX
了解网络
PPT
淘宝商品库MySQL优化实践
PPT
Systemtap
PPTX
Erlang分布式系统的的领域语言
PPT
C1000K高性能服务器构建技术
Erlang全接触
Inside Erlang Vm II
My Sql Proxy
高级服务器设计和实现1
Erlang low cost_clound_computing
高性能集群服务器(Erlang解决方案)
mnesia脑裂问题综述
了解网络
淘宝商品库MySQL优化实践
Systemtap
Erlang分布式系统的的领域语言
C1000K高性能服务器构建技术
Ad

Similar to Erlang Optimize (20)

PPT
Erlang高级原理和应用
PPT
基于Erlang的
PPT
Erlang开发及应用
PPT
Hp刀片机测试
PPT
Aix操作系统培训文档
PPT
高级服务器设计和实现2
PPT
系统性能分析和优化.ppt
PPTX
Linux Tracing System 浅析 & eBPF框架开发经验分享
PPT
17 cpu01
PDF
系統程式 -- 第 10 章
PDF
Java应用性能测试与分析
PDF
Java线上应用问题排查方法和工具(空望)
PPTX
Baidu LSP and DISQL for Log Analysis
PPT
01 课程介绍与计算机系统概述
PPT
MogileFS
PPT
Lamp优化实践
PDF
Oracle Security 101
PDF
高性能LAMP程序设计
DOCX
Linux性能监控cpu内存io网络
PDF
STM32F4 for 智慧型電動輪椅系統Part1
Erlang高级原理和应用
基于Erlang的
Erlang开发及应用
Hp刀片机测试
Aix操作系统培训文档
高级服务器设计和实现2
系统性能分析和优化.ppt
Linux Tracing System 浅析 & eBPF框架开发经验分享
17 cpu01
系統程式 -- 第 10 章
Java应用性能测试与分析
Java线上应用问题排查方法和工具(空望)
Baidu LSP and DISQL for Log Analysis
01 课程介绍与计算机系统概述
MogileFS
Lamp优化实践
Oracle Security 101
高性能LAMP程序设计
Linux性能监控cpu内存io网络
STM32F4 for 智慧型電動輪椅系統Part1

More from Feng Yu (19)

PPTX
Cpu高效编程技术
PPTX
Erlang开发实践
PPTX
了解集群
PPT
低成本和高性能MySQL云架构探索
PPTX
了解应用服务器
PPTX
我为什么要选择RabbitMQ
PPTX
利用新硬件提升数据库性能
PPTX
了解内存
PPT
MySQL和IO(上)
PPTX
MySQL和IO(下)
PPTX
了解Cpu
PPTX
了解IO协议栈
PPTX
了解IO设备
PPTX
Flash存储设备在淘宝的应用实践
PPT
SSD在淘宝的应用实践
PPTX
Rethink db&tokudb调研测试报告
PPT
开源混合存储方案(Flashcache)
PDF
PPT
Tsung 压力测试工具
Cpu高效编程技术
Erlang开发实践
了解集群
低成本和高性能MySQL云架构探索
了解应用服务器
我为什么要选择RabbitMQ
利用新硬件提升数据库性能
了解内存
MySQL和IO(上)
MySQL和IO(下)
了解Cpu
了解IO协议栈
了解IO设备
Flash存储设备在淘宝的应用实践
SSD在淘宝的应用实践
Rethink db&tokudb调研测试报告
开源混合存储方案(Flashcache)
Tsung 压力测试工具

Erlang Optimize

Editor's Notes