软件系统性能优化
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法和实现
• 2. 使用合适的数据结构,比如实现快速查 找:
– 有序数组(C中的qsort和bsearch) – Hashmap – 二叉树(AVL、红黑树) – Trie树 – Freelist
算法和实现
• 3. 尽量不要用锁:lock free
– 子进程方式 – CAS
• 4. 使用内存池
– 快速分配和回收 – 避免内存碎片
软件架构
• 时空转换
– 时间换空间 – 空间换时间
• 充分利用cache:
– 自己实现:ATS – memcached、redis
• 支持多核:
– 多线程:ATS – 子进程:squid、 nginx
• 支持高并发:事件驱动 • 充分发挥磁盘IO效率:不做RAID,直接挂载单盘 • 分布式:利用多机资源
• 5. 使用连接池
– 减少建立连接开销
算法和实现
• • • • 6. 7. 8. 9. 减少内存拷贝 慎用正则表达式:尤其是逐个匹配方式 尽量减少重复计算 资源是有限的,节约使用内存!
正则表达式匹配优化例子
• map http://img0[1-8].taobaocdn.com/ http://img0$1.xxx/ • map http://(.*).taobaocdn.com/ http://$1.xxx/ • map http://(.*)/ http://$1.xxx/
软件系统性能优化
余 庆 2013年1月19日
性能优化的范畴
• • • • 硬件 操作系统 数据库 软件
Biblioteka Baidu
硬件选型
• 计算密集型:CPU • IO密集型:硬盘
– 淘宝CDN硬盘选型(混合存储 纯SSD)
操作系统优化
• OS及版本:Linux 2.6.35 通过RPS支持网 卡多队列 • 系统参数调优
淘宝CDN架构优化
• 现状:三层结构 LVS HaProxy ATS • 改进 – 阶段一:二层结构 LVS ATS – 阶段二:硬件负载均衡 ATS
算法和实现
• 1. 选用合适的开发语言
– C or C++ – Java – Erlang – Go – Python、PHP。。。
一个C程序例子
void concat(char *buff, const int bufSize, const char **items, const int count) { memset(buff, 0, bufSize); for (i=0; i<count; i++) { if (i > 0) { *(buff + strlen(buff)) = ‘,’; } snprintf(buff+strlen(buff), bufSize-strlen(buff), “%s”, items[i]); if (strlen(buff) >= bufSize - 1) { break; } } }
C程序性能优化
• 尽量不用动态分配内存
– 数组 – 内存池
• 尽量减少系统调用次数
– Buffer方式 – 增加buffer大小 – 采用cache:比如获取当前时间
• 内存对齐 • 编译优化
优化后代码
void concat(char *buff, const int bufSize, const char **items, const int count) { int len = 0; *buff = ‘\0’; for (i=0; i<count; i++) { if (i > 0) { *(buff + len++) = ‘,’; } len += snprintf(buff+len, bufSize-len, “%s”, items[i]); if (len >= bufSize - 1) { break; } } *(buff + len)= ‘\0’; }
性能优化典型案例
• Nginx • Apache Traffic Server • FastDFS & FastDHT
Q & A
谢谢大家!
– 文件系统调优 – 网络调优
淘宝CDN优化实践
• • • • • • 使用淘宝自己的kernel 网卡驱动升级 内核参数统一设置 irq 绑定:绑定硬件中断到不同 CPU 关闭 irqbalance 关闭网卡 LRO 和GRO
数据库优化
• Server端调优 • SQL 优化
软件性能优化
• 架构 • 算法和实现
C++程序性能优化
• 合理使用inline • 慎用virtual • 慎用STL
Java程序性能优化
• 尽量使用无锁类型数据结构
– StringBuilder、HashMap、LinkList – StringBuffer、HashTable、Vector
• 字符串连接使用StringBuilder或 StringBuffer • 指定初始化大小:HashMap, StringBuilder