Erlang应用优化指南 余 锋 2009/11/07.

Slides:



Advertisements
Similar presentations
彰化縣和美鎮 和仁國民小學 本土語言教育暨 台灣母語日訪視 簡 報. 一. 學校概況 校地面積 校地面積廣達三公頃 學生活動空間寬廣!
Advertisements

Erlang 分布式系统的的领域语言 淘宝核心系统资深专家 余锋 淘宝褚霸
高级服务器设计和实现 1 —— 基础与进阶 余锋
第一章 十六世紀中葉以前的臺灣與原住民 第一節 考古發掘與史前文化.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
量化vs質性研究分析 量化vs質性研究分析 報告人:王秀民.
與櫻花有約 櫻花開放時間 櫻花前線 賞花便當 京都機場(附近) 夜櫻 哲學之道.
提升应用内HTML5 的开发和使用体验
姻緣天注定 定婚店 李復言.
唐宋傳奇、筆記小品和史書、論著中的寓言 中碩二 吳佳樺.
兒童期 7 青春期 兩性圓舞曲 乘客:七年級同學 司機:張立杰老師.
Erlang全接触 褚霸 2010/07/20.
美洲集团散拼项目分享 李维迪.
星星知我心 談古話今….. ……..觀星望斗 主講人: 陽光青春美少男.
反垃圾掩埋場相關報告 組長:文煊 組員:鄭侃文 李浩暐 胡育睿 李瑞耘 朱祐賢 林承宇.
"性"不"性"由你 性別平等之探討 北屯國小 張文陵.
組員: 洪暐翔、 賴峻毅 侯家豪、 賴琦穎 指導老師: 王惠鈴 老師
熊貓 設計者:鄧澤怡 班別:6B2 學校:華德學校.
淘宝核心系统资深专家 我为什么要选择RabbitMQ 淘宝核心系统资深专家
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
Oracle数据库 Oracle 子程序.
短文寫作 聖誕的祝福vs 有你(們)真好.
企业级云计算 A Enterprise Cloud Serivce
台中市不動產經紀人職業工會 不動產經紀營業員 複訓班
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
余锋 2009/03/11 Erlang及其应用 余锋 2009/03/11
褚霸 核心系统数据库组 /11/15 Oprofile 系统层面的性能微调工具 褚霸 核心系统数据库组 /11/15.
从现在做起 彻底改变你自己 Sanjay Mirchandani EMC公司高级副总裁、首席信息官.
存储系统.
Inside the Erlang VM Yu Feng 2008/12/20
SOA – Experiment 3: Web Services Composition Challenge
管理信息结构SMI.
大数据管理技术 --NoSQL数据库 HBase 陈 辉 大数据分析技术.
Visual Studio Team System 简介
/8/19 Erlang的高级特性和应用 /8/19.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
/8/19 Erlang的高级特性和应用 /8/19.
Erlang emulator 实现分析 2007/10.
聊聊并发编程 猫头鹰表哥.
数据挖掘工具性能比较.
PaPaPa项目架构 By:Listen 我在这.
2010電資院 「頂尖企業暑期實習」 經驗分享心得報告
Windows 7 的系统设置.
实习前你需要知道的 PRESENTED BY Yisa.
Network Application Programming(3rd Edition)
Inside the Erlang VM Yu Feng 2008/12/20
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
微机系统的组成.
软件设计演进和系列训练营 实践 丁辉 Tel:
VisComposer 2019/4/17.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
信号量(Semaphore).
解决“最后1公里”问题.
核心系统数据库组 了解应用服务器 核心系统数据库组
Chapter 18 使用GRASP的对象设计示例.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
架构师成长感悟 吴隆烽
Google的云计算 分布式锁服务Chubby.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
插入排序的正确性证明 以及各种改进方法.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
Presentation transcript:

Erlang应用优化指南 余 锋 2009/11/07

优化案例

Erlang应用优化案例 Ehttpd测试 Hotwheel 40000广播 简单Key/Value查询系统 输出“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 密集型 高性能网络服务器 CPU利用 高度优化完备的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位系统 RHEL上游厂商致力于高性能操作系统 重新用ICC编译内核和glibc 没有内存空间限制 64位比较慢 RHEL上游厂商致力于高性能操作系统 Vdso RhelRt 重新用ICC编译内核和glibc VM和TCP协议栈的优化

操作系统层面的优化 降低系统的swapness, 避免内存颠簸 资源倾斜,全力服务应用 给我尽可能多的物理内存,越多越好

Erlang运行期层面优化 新版本的OTP致力于SMP方面的改进 Hipe(erlang的jit) Crack系统 参数微调 未公开的特性 更细粒度的锁 更好的内存分配器 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 相同的标签尽可能的放在一起 排序 二分查找 避免创建无用的中间变量 数据结构设计尽可能的每个调度器一个 erl +”’S’” mod.erl bin_opt_info 直接函数调用 vs. 异步消息

集群层面优化 节点间通讯 节点管理成本 Ei库用C来赢得速度 Pg2简化管理 inet_tcp 唯一通道,潜在的瓶颈 net tick 开销不可忽视 节点up、down开销 Ei库用C来赢得速度 Pg2简化管理

业务层面的优化 尽可能的简单 能够并行计算 Small message, big computation 为业务估算要消耗的资源提早分配 内存 CPU

内存和CPU的平衡 部署 Plain vs. SMP Hibernate 计算密集型和IO密集性在同一台物理机器资源互补 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

操作系统native特性 Futex VDSO TCP/IP协议栈 Socket快速回收 大文件句柄数微调 send_file tcp_defer_accept

可诊断的系统 提供内部状态的信息 关键参数可动态调整 过程工具化、自动化 高压力测试 完善的日志系统 Erlang的一贯传统 调优的依据 便于观测效果 过程工具化、自动化 test server, common test, eunit 高压力测试 tsung

尽可能的利用ERTS的优势 port整合不同的语言和系统 性能苛刻 可以考虑用driver改写关键部分 尽可能的利用高级特性如{packet, 2}, http* 设计的协议什么的尽可能的方便Erlang处理 推荐工业标准的协议 asn.1 leex和yecc

资源竞争 锁还是存在的 锁减少再减少 只是下移到了ETRS 不同的调度器间操作都需要锁 设计方面考虑业务并行 每CPU调度器并行 数据结构并行

广告时间 提供服务器架构、诊断、优化咨询服务 联系我 主页: http://yufeng.info 邮件: erlang.help@gmail.com

谢谢 提问时间