耗内存应用优化实际案例

Author:放翁(文初)

Email:[email protected]

mblog: http://t.sina.com.cn/fangweng

         这里分享的是一个分布式分析系统的Master内存消耗状况的优化,有些比较特定的优化未必适用于其他系统,但是从这一系列优化过程中,应该能带给其他系统在做设计时提前考虑一点优化点。

         下面先描述一下背景,看了背景可以对后续的优化点可以比较清楚一些,注意,部分设计仅适用于大量计算中,会牺牲可维护性来换取性能提升。最后一点优化应该是比较有通用性意义的。

 

背景:

         开放平台每天产生大量的调用日志,希望能够从海量日志中即时的去分析业务指标和系统运行状况。当前实现的是类似MapReduce的设计,不过MasterSlave之间是松耦合的关系,比传统的MapReduce更利于扩展和即时分析(当然和Hadoop的目标是不一致的,规模量及作用也不同,主要用于统计规则易变,需要即时分析,数据量在T以内),同时内嵌了统计规则引擎,使得统计逻辑只需要通过配置即可实现分析定义。具体的部署图和流程图如下:

 

流程如下:

MasterSlave之间没有注册和管理的关系,Slave连接到Master请求任务,从任务中获取数据来源,分析规则配置,获取数据块大小的信息,然后将数据块拉下来分析,最后返回结果给Master。至此,MasterSlave的交互完成。

Master自身主要负责:

1.              任务列表创建和重置(根据配置信息创建任务列表,由于是增量对应用服务器分析,则定期将任务全部重置,可以让Slave增量的对应用服务器去拖取数据分析)。

2.              重置一些分配出去但是较久都没有执行的任务,防止Slave任务执行失败没有反馈而出现死等的现象。

3.              合并Slave传递过来已完成的任务结果集到主干结果集上。

4.              将主干结果集定时输出提供给第三方使用(告警,图形化等),导出中间结果,提供给Master异常重启后回复现场使用。

 

问题:

         由于报表配置增多,单报表的结果数据量大,Master合并多个结果集内存吃紧,不断的GC,最后导致恶性循环。因此优化原先认为任务不重的Master迫在眉睫。

 

优化过程:

1.  合并过程中,主干结果和Slave结果都比较大,在操作后是否可以通过主动clearset null来更快的清理释放资源。(基本没有效果,GC已经做了很多优化

  • 0
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 26
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值