DevilKing's blog

冷灯看剑,剑上几分功名?炉香无需计苍生,纵一穿烟逝,万丈云埋,孤阳还照古陵

0%

CAT优化

原文链接

CAT 服务端也可以认为是一个 Lamda 架构的报表系统,通过汇聚客户端上报的原始消息 MessageTree,实时计算出 Transaction、Event、Problem、heartbeat 等报表,保存在内存中; 历史报表序列化后保存到本地并上传到 DB 存储,原始上报数据压缩和建立索引后上传至 hdfs。

tips1: GC 方式从 CMS 改到了 G1,并调大了 heap 到 80G

优化方向:

  • 线程模型优化,减少上下文切换
  • 内存优化
  • JVM/OS/网络优化

CAT 的消息处理和线程模型,Netty Worker 线程生成 MessageTree 后,offer 到每个 Analyzer 专有队列(Blocking Queue)中,由 Analyzer 线程从队列中拉去后处理并生成对应的内存报表。

性能关系

Disruptor > ArrayBlockingQueue > LinkedBlockingQueue

利用Disruptor实现了一个简易的分组队列

dump,”jmap -histo $pid” 内存分析

内存使用率 = 实际数据占用大小 / Retain Size

利用开放地址的map,采用另外一种hash冲突解决的方式,可以减少内存的使用率

采用另外一种collections的实现方式