1:问题现象:

运行的instance一段时间(20h)就下降,重启之后消费正常然后又不行了;原以为是ons版本1.2.7改成laest1.7.7.final;没效果;经验之觉:肯定是代码没优化好:

处理流程一:单纯以为应该是gc没做好;有big Object ;./jmap发现了MsgContent;查project使用 ConcurrentHashMap<String ,MsgContent>一直add没有remove;so 添加remove并且就加上value = null;利于gc发现没太大效果;

public static ConcurrentHashMap<String ,MsgContent> map = new ConcurrentHashMap<String ,MsgContent>();
//遍历map中的value,然后查看value中的time值是不是超过了两分钟,是的话就删除掉对应的key
public static void removeInvalidKey(ConcurrentHashMap<String,MsgContent> map){for (MsgContent value : map.values()) {if (System.currentTimeMillis()-value.getTime() > 2 * 60 * 1000) {MsgMatch.map.remove(value.getUid());value = null;//强制把对象设置null,check object被gc回收(System.gc())}}}
 num     #instances         #bytes  class name
----------------------------------------------1:        651850      208798320  [C2:        651267       15630408  java.lang.String3:         71571       10226008  <constMethodKlass>4:         71571        9172944  <methodKlass>5:          6020        6965584  <constantPoolKlass>6:         20793        5553840  [I7:        153195        4902240  java.util.HashMap$Entry8:         24879        4784448  [B9:        189633        4551192  java.util.concurrent.ConcurrentLinkedDeque$Node10:          6020        4496624  <instanceKlassKlass>11:          5076        4044384  <constantPoolCacheKlass>12:         78356        2507392  java.util.concurrent.ConcurrentHashMap$HashEntry13:         64274        2506768  com.xxx.xxx.access.mysql.entity.MsgContent

处理流程二:经过流程一;instance能正常跑(30h),还没找到病原体;没办法去找thread Stack快照:发现线程runable一个地方(这时jvm已经小露病源了)如图:

"ConsumeMessageThread_7" prio=10 tid=0x00007f6498008000 nid=0x43 runnable [0x00007f6558c82000]java.lang.Thread.State: RUNNABLEat java.util.concurrent.ConcurrentLinkedDeque.contains(ConcurrentLinkedDeque.java:1085)at com.xxx.xxxx.access.alimq.EvMsgRtListener.consume(EvMsgRtListener.java:169)at com.aliyun.openservices.ons.api.impl.rocketmq.ConsumerImpl$MessageListenerImpl.consumeMessage(ConsumerImpl.java:97)at com.aliyun.openservices.shade.com.alibaba.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService$ConsumeRequest.run(ConsumeMessageConcurrentlyService.java:417)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)at java.util.concurrent.FutureTask.run(FutureTask.java:262)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run(Thread.java:745)Locked ownable synchronizers:- <0x000000070841ea38> (a java.util.concurrent.ThreadPoolExecutor$Worker)"ConsumeMessageThread_5" prio=10 tid=0x00007f6498004000 nid=0x42 runnable [0x00007f6558d83000]java.lang.Thread.State: RUNNABLEat java.util.concurrent.ConcurrentLinkedDeque.contains(ConcurrentLinkedDeque.java:1085)at com.xxx.xxxx.access.alimq.EvMsgRtListener.consume(EvMsgRtListener.java:169)at com.aliyun.openservices.ons.api.impl.rocketmq.ConsumerImpl$MessageListenerImpl.consumeMessage(ConsumerImpl.java:97)at com.aliyun.openservices.shade.com.alibaba.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService$ConsumeRequest.run(ConsumeMessageConcurrentlyService.java:417)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)at java.util.concurrent.FutureTask.run(FutureTask.java:262)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run(Thread.java:745)Locked ownable synchronizers:- <0x000000070841f708> (a java.util.concurrent.ThreadPoolExecutor$Worker)

代码此处:

此处的queue是一个定时任务;涉及到遍历及remove key操作,因为ConcurrentLinkedDeque此处操作会严重拖耗性能,每一次重构需要重新排序;详细参考JAVA集合框架中的常用集合及其特点、适用场景、实现原理简介

此时问题发现注释解决:总结一下:之前多次遇到过同样场景:运行一段时间cpu飙升;消费能力下降;:也是涉及到远程调用http SocketTimeout(5000)  ---》5000修改为1s;缩短时间,避免长时间进行响应阻塞,thread运行

CloseableHttpClient httpclient = HttpClients.createDefault();HttpPost http = new HttpPost(url);/*** setConnectTimeout:设置连接超时时间,单位毫秒。* setConnectionRequestTimeout:设置从connect Manager获取Connection 超时时间,单位毫秒* setSocketTimeout:请求获取数据的超时时间,单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用*/RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(1000).setSocketTimeout(5000).build();http.setConfig(requestConfig);HttpEntity inEntity = EntityBuilder.create().setText(json).setContentType(ContentType.APPLICATION_JSON).build();http.setEntity(inEntity);CloseableHttpResponse response = httpclient.execute(http);

ps:提到这缓存;设计缓存要清楚各个组件性能及优缺点:

简单一点用hashMap;上文就提到清理无效的数据时;如何彻底gc防止数据过多导致溢出;一个好的替代方案是weakHashMap;是使用弱引用维护一张哈希表;but 作为专业缓存,功能上略有不足;详见:WeakHashMap和HashMap的区别;更详细的:话说ReferenceQueue

ali的ons mq运行一段时间后消费下降并导致堆积问题查验相关推荐

  1. 虚拟机运行一段时间后 自动挂起解决方法

    1.电源选项设置问题:请检查虚拟机的电源选项设置,确保其不会在一段时间后自动进入待机模式.您可以通过以下步骤更改电源选项设置: a. 在 Windows 操作系统中,打开控制面板,然后选择" ...

  2. FlinK运行一段时间后任务任务自己挂掉的问题排查

    最近在做自定义实时报表,由于在前期测试Flink发现Flink拥有比较好的性能,并且天然支持窗口,所以在实时计算的时候,我们选择Flink在做计算框架.在所有的代码完成,代码准备上线的时候,发现Fli ...

  3. Tomcat运行一段时间后访问变慢分析历程

    主要查看三方面: 查看程序中的Session是否定时清空了 查看mysql是否有没有close的连接 查看Tomcat的内存设置,根据下列设置 环境运行一天或者几天,网站访问就很卡,手机端app访问页 ...

  4. 编写的Matlab程序在运行一段时间后速度会变慢

    我们用matlab编写程序进行数据运算的时候经常会遇到这种情况,就是编写完立马运行,运行速度会非常快,我们感到很满意.但是运行一段时间后,速度就不是那么理想了,恨不得推他一把.这是什么原因呢?通过一段 ...

  5. cefsharp项目开发浏览器运行一段时间后cefsharp.browsersubprocess崩溃问题

    基于cefsharp项目用C#开发的程序在windows 系统上运行一段时间老是出现崩溃卡死的情况 如下图: 经过多次测试和调查 发现是在部分机器上才出现该问题 ,其他机器连续运行一周也无错误出现 研 ...

  6. unity打出apk包在模拟器上运行一段时间后卡顿卡死

    笔者在开发unity游戏时,打出的apk包在模拟器上跑一段时间后卡顿卡死. 具体情况为,用安卓模拟器跑游戏,然后用电脑跑其他比较耗cpu的应用,一段时间后游戏帧数逐渐降低,直到0.000几帧,相当于游 ...

  7. VMware 打开运行一段时间后卡死,CPU占比增至100%

    1.电脑系统环境 版本:Windows 10 版本号:21H2 虚拟机镜像:Ubuntu18.04 VMware版本:Workstation 16 Pro 问题描述 打开虚拟机后可以正常运行,运行大约 ...

  8. EasyNVR运行一段时间后出现停止现象是什么原因?如何解决?

    EasyNVR平台优秀的视频能力在于通过RTSP/ONVIF协议,将前端接入设备的音视频资源进行采集,并转码成适合全平台.全终端分发的视频流格式,包括RTMP.RTSP.FLV.HLS.WebRTC等 ...

  9. 运行一段时间后,RestTemplate请求报400错误

    问题描述 本地调用远端接口无误,部署到服务器上调用刚开始也无误,随着时间的推移,调用次数的增加,再次调用时报 400 Bad Request 错误. 问题代码 private String sendR ...

最新文章

  1. 【Leetcode】刷题之路3(python版)
  2. 【学习笔记】和式(《具体数学》第二章)
  3. 像写SQL一样编写Java数据应用-TinySqlDsl
  4. Linux2.6内核--对块IO层操作的讨论
  5. 移动端微信页面的一些自己爬的坑
  6. 利用XML实现通用WEB报表打印(转载)
  7. Cpp 对象模型探索 / 类引入虚函数有哪些成本?
  8. 机器学习笔记十之聚类
  9. C、C++ 不得宠,微软正开发新的编程语言!
  10. python避坑_Django搭建项目实战与避坑细节详解
  11. jQuery常用属性过滤选择器
  12. 网吧管理软件常见漏洞四节课
  13. 如何快速找到微信支付的商户号和商户密钥?望相互转告!
  14. mysql磁盘空间碎片回收
  15. als算法参数_矩阵分解之交替最小二乘ALS
  16. 关闭 Eureka 的自我保护机制
  17. Python:实现max non adjacent sum最大非相邻和算法(附完整源码)
  18. PMBOK(第六版) 学习笔记 ——《第五章 项目范围管理》
  19. 你以为SSL是安全的吗?
  20. mysql from 嵌套查询,MySQL嵌套查询实例详解

热门文章

  1. 如何打包文件及其所在目录
  2. 庄子在宥原文及翻译鸿蒙,《庄子   在宥》原文及译文(5)(转载)
  3. linux系统找不到共享文件夹
  4. sql注入解析(四)避开过滤
  5. Visual Assist X 10.9.2406.0 官方版 + 补丁
  6. 从16K跳槽到20K,最后算下来年薪却还降了,我笑了····
  7. 实现收藏本网站的功能
  8. kyo酱的博客--回溯法
  9. Active Directory证书服务的安装与配置
  10. 第02章 一个实例初识WorkBench分析流程-卡扣结构的动作分析