CAT性能优化的实践和思考_第1页
CAT性能优化的实践和思考_第2页
CAT性能优化的实践和思考_第3页
CAT性能优化的实践和思考_第4页
CAT性能优化的实践和思考_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CAT性能优化的实践和思考目录- CAT在携程CAT性能优化案例总结和思考2014年底落地监控数据指数级增长- 2019 年- 7W+客户端- 消息树:8,000亿消息/天,900TB/天,峰值流量 3,000万消息/秒- 日志:40,000亿行/天,900TB/天,峰值流量 1.5亿行/秒CAT在携程数据量机器数20152016201720182019/dianping/cat目录- CAT在携程CAT性能优化案例总结和思考CAT的计算模型Transaction Report AnalyzerCat SeverEvent Report AnalyzerRPC Report AnalyzerT

2、ransaction ReportEvent ReportRPCReportMessageTreeMessageTreeMessageTree实时分析内存Report示例CPU满GC频繁CAT服务端常见问题#1 线程模型优化CAT线程模型MessageTreeAnalyzer ThreadReport1 Analyzerhash ( AppId + IP )Analyzer ThreadAnalyzer ThreadAnalyzer ThreadAnalyzer ThreadAnalyzer ThreadReport DataReport2 AnalyzerReport3 AnalyzerRe

3、port DataReport DataReport DataReport DataReport Datahash ( AppId + IP )数据和线程绑定,无锁更新遇到的问题Report1 AnalyzerDataDataData- 应用流量不均导致部分队列堆积- 打散数据:增加队列和线程多次调整后,处理能力反而下降Report1 Analyzerhhaasshh(AAppppIIdd+IIPP)Analyzer ThreadAnalyzer Thread Analyzer ThreadAnalyzer Thread Analyzer ThreadAnalyzer Thread Analy

4、zer ThreadReport DataReportReport DataReportReport DataReportReport Data分析问题Analyzer ThreadReport1 Analyzerhash ( AppId + IP )Analyzer ThreadAnalyzer ThreadReport DataReport DataReport Data- 处理能力下降- 上下文切换频繁- 线程过多队列和线程解耦分析问题Analyzer ThreadReport1 Analyzerhash ( AppId + IP )Analyzer ThreadAnalyzer Thr

5、eadReport DataReport DataReport DataBIOProcessor ThreadSocket ChannelProcessor ThreadSocket ChannelProcessor ThreadSocket ChannelNIOSocket ChannelThread PoolSocket ChannelSocket ChannelSelectorReport1 Analyzerhash ( AppId + IP )Thread PoolReport DataReport DataReport DataSelector新线程模型Report1 Analyze

6、rhash ( AppId + IP )Thread PoolReport DataReport DataReport DataSelectorSelector监听队列数据调度策略充分利用ThreadPool避免同一份队列数据的并发更新新线程模型hash ( AppId + IP )Thread PoolReport DataReport DataReport DataSelectorReport2 Analyzerhash ( AppId + IP )Thread PoolReport DataReport DataSelectorCat ServerReport1 AnalyzerThre

7、ad PoolSelector队列和线程解耦多队列均衡数据减少单个队列的锁竞争CPU核数个线程减少上下文切换提供更灵活的调度策略小结CPU 90%, 数据丢失5%CPU 70%, 数据无丢失Analyzer Threadhash ( AppId + IP)Analyzer ThreadAnalyzer ThreadAnalyzer Threadhash ( AppId + IP )Analyzer ThreadReport DataReport DataReport DataReport DataReport Datahash ( AppId + IP )Report DataReport D

8、ataReport Datahash ( AppId + IP )Report DataReport DataSelectorThread Pool#2 客户端计算CPU再次用满,数据丢失遇到的问题容量不够,加机器优化,节省CPU- 部分服务端计算移到客户端分析问题- 哪些计算适合放在客户端- 不变的逻辑- 服务端CPU使用比较多分析问题Transaction和Event ReportTransaction/Event Report的CPU使用5.3个核2.2个核两个Report共占用7.5个核,23% CPU资源!Transaction/Event Report计算MessageTreeMe

9、ssageTreeMessageTreeClientServer服务端计算1. 遍历每棵MessageTree2. 更新Transaction/Event metricMessageTreeMessageTreeMessageTreeClientServer客户端计算1. 合并多个MessageTree的统计2. 次发送Transaction 1metricsTransaction 2metricsEvent 1metricsEvent 2metricsTransaction 1metricsTransaction 2metricsEvent 1metricsEvent 2metricsTra

10、nsaction 1metricsTransaction 2metricsEvent 1metricsEvent 2metricsTransaction/Event报表客户端计算Transaction Metrics Aggregator定时Event Metrics AggregatorClientMetricsListTransaction Report AnalyzerEvent Report AnalyzerReport 1 AnalyzerReport 2 AnalyzerMessageTreeServer优先发送效果效果客户端影响内存 10M以下CPU 0.1%以下影响- 对于简单

11、、变更少的逻辑可以考虑客户端计算客户端计算复杂度比服务端计算低服务端计算量只和客户端数量及间隔时间有关结#3 Report双缓冲- 每小时前几分钟发生数据丢失遇到的问题网络过来的数据当前小时ReportCat服务端内存使用流量平稳当前小时Report常驻内存跨小时会创建一份新的Report,并把上小时Report持久化到存储Cat Report的生命周期AppIdIPsIPTypesNamesTypeMinutesNameMetricsMinuteTx/Event ReportMap不断创建下层Map,每个Map不断resize从Young区移到Old区,很多没有用的Young GC,Old区

12、不断增加- 不断resize分析问题Clone Report 供下个小时使用YoungReport_CurrentOldReport_17:00Report_16:00Report_15:00Report_14:00YoungOldReport_LastHourReport_Current不断创建下层Map无用Young GCOld区不断增加内存中保留两份 Report 轮换使用效果Full GC 每天20次Full GC 每天3次小结- GC问题尽量少分配内存是否可以复用内存#4 字符反序列化MessageTree的传输MessageTreebyte :ClientServerMessage

13、TreeReport1 AnalyzerReport2 AnalyzerReport2 AnalyzerMessageTreeTransaction 1Event 1Transaction 2Transaction 3Event 2Transaction/Eventtype/nameStringstatusdataStringStringnew String(byte, start, len) for type/name/status/data序列化byte String1次 new String(byte, start, len,“UTF-8”)2次创建char1次字符集解码既消耗内存也消耗

14、CPU- type/namestatusdatabyte String必须?不是所有Report都需要大部分Report只关心是否成功特殊对待成功,其他状态按需lazy做即可按需lazy做即可Server SideMessage TreeTX ATX BTX A.1TX A.2AppId/IPTX AAppId/IPAppIdIPsIPTypesNamesTypeMinutesNameMetricsMinuteTX BTX A.2TX A.1type/name需要byte String?AppIdIPTypeNameReportMapMetricsbyte :2次new char1次cd.de

15、code(bb, cb, true)DiscardMap.getStringServer SideIPTypesNamesTypeMinutesNameMetricsMinutetype/name需要byte String?AppIdIPTypeNameMapMetricsbyte :Discardnew charencd.decode(bb,cb, true)Map.getStringpublic class BytesWrapper byte bytes; int start; int len;?BytesWrapperReportMapAppIdIPs进一步思考Server SideIP

16、TypesNamesTypeMinutesNameMetricsMinuteAppIdIPTypeNameMapMetricsbyte :Map.getStringpublic class BytesWrapper byte bytes; int start; int len;BytesWrapperReportMapAppIdIPsDiscardSIZETYPE DESCRIPTION4(object header)4(object header)4(object header)4(object header)4int BytesWrapper.start4int BytesWrapper.

17、len4byte BytesWrapper.bytes4(object alignment)Instance size: 32 bytesget(Object key)get(byte, int start, int len)进一步思考public class BytesHashMap implements Mappublic V get(byte bytes, int start, int len)Server SideIPTypesNamesTypeMinutesNameMetricsMinuteMapAppIdIPTypeNameMetricsbyte :StringBytesHashMap.getReportBytesHashMapAppIdIPs直接引用网络过来的byte数组做比较 不需要创建String不需要Discardstatusdatabyte String必须?按需lazy做即可不是所有Report都需要大部分Report只关心是否成功特殊对待成功,其他状态按需lazy做即可-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论