频繁 YGC的一段代码

简介: 假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。

问题背景:系统启动后,啥事没干,不停的YGC,并且YGC能回收彻底。
排查流程:
(1)top + shift  jstack  
输出 、jmap 输出、 没发现异常
(2)
线程数量非常多,关闭cache、关闭查询统计输出,依然出现ygc
(3)
怀疑reader reopen没有关闭、资源泄露,输出reader计数,没有发现异常
(4)
调整jvm参数,依然没有效果
(5)
代码步步打开,最后发现无意发现问题,原来实时add 操作也有统计输出,关掉这部分,ygc解决。

最终定位原因:
   
线程生成了大量 new String 对象了。String对象内存杀手!!!!慎用!lucene4.0 string对象,无疑是非常大的好处。面向byte 层的cachebyteterm!!!

代码如下,逻辑功能:等间隔输出统计信息。
public class PerfTracer {
   private AtomicInteger counter;
   private long startTime;
   private long intervalTime = 1 * 60 * 1000;
   private Log logger;
   private String name;
 
   public PerfTracer(String name,Log logger) {
       this.logger = logger;
       this.name = name;
       this.startTime = System.currentTimeMillis();
       this.counter = new AtomicInteger(0);
   }
 
   public void increment() {
       counter.incrementAndGet();
       if((System.currentTimeMillis() - startTime) >= intervalTime){
           this.onTime();
       }
   }  
   public void reset() {
       counter.set(0);
       this.startTime = System.currentTimeMillis();
   }
   protected String exportLog() {
       return "[" + name+"-statistics] " + (counter.get() / (intervalTime/1000)) + "-tps";
   }  
   protected void onTime() {
       logger.warn(this.exportLog());
       this.reset();
   }
}
调用
....//
其他代码
       perfTracer = new PerfTracer("DefaultRealTimeService-Write-CommitLog", log) {
           protected void onTime() {
               log.warn(this.exportLog());
               log.warn(getStatistics());
               this.reset();
           }
       };
       Thread printThread = new Thread(new PrintLogTask(perfTracer));
       printThread.start();
...//
其他代码

public String getStatistics() {
       StringBuilder sb = new StringBuilder();
       sb.append("CoreName:{").append(coreName).append("}  ");
       sb.append("1000ms: {").append(below1000.get()).append("}").append("  ");
       sb.append("1000ms~2000ms: {").append(below2000.get()).append("}").append("  ");
       sb.append("2000ms~5000ms: {").append(below5000.get()).append("}").append("  ");
       sb.append("5000ms++: {").append(above5000.get()).append("}").append("  ");      
       return sb.toString();
   }

 

目录
相关文章
|
存储 关系型数据库 MySQL
MYSQL 单表可以放多少数据是怎么计算出来的
MYSQL 单表可以放多少数据是怎么计算出来的
529 2
|
8月前
|
消息中间件 缓存 算法
G1原理—10.如何优化G1中的FGC
本文主要探讨G1垃圾回收器中的FGC(Full GC)优化问题,分析其触发原因及优化策略。首先,通过一个实际案例(Kafka发送重试+`subList`导致List不断增大)展示FGC的产生过程及其影响。其次,对比G1与ParNew + CMS的FGC触发机制,指出G1的FGC更严重的原因,包括更大的堆内存管理需求、苛刻的触发条件以及复杂的RSet处理。最后,介绍FGC相关参数优化思路,如调整`-XX:G1HeapRegionSize`、`-XX:G1ReservePercent`等参数,以提升垃圾回收效率,减少FGC的发生频率。总结强调避免FGC的核心在于让垃圾回收速度匹配垃圾产生速度。
G1原理—10.如何优化G1中的FGC
|
SQL 缓存 分布式计算
SparkSQL与Hive metastore Parquet转换
Spark SQL为了更好的性能,在读写Hive metastore parquet格式的表时,会默认使用自己的Parquet SerDe,而不是采用Hive的SerDe进行序列化和反序列化
SparkSQL与Hive metastore Parquet转换
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
ICLR 2025 | EDiT:一种基于 Local SGD 策略的大模型高效分布式训练方法
蚂蚁 AI Infra 团队在深度学习最核心之一的训练框架方向上持续投入与创新,实现了提升资源利用率、加速训练、提升训练稳定性等目标。我们提出的 EDiT 方法,即为其中一项工作。
|
4月前
|
消息中间件 供应链 前端开发
如何开发供应商管理系统中的订单协同板块(附架构图+流程图+代码参考)
在现代企业供应链管理中,订单协同是连接采购、销售、供应商与库存的重要环节。本文详解供应商管理系统中订单协同板块的设计与实现,涵盖功能模块、业务流程、技术架构及代码示例,帮助企业提升供应链效率,降低库存风险,优化订单管理流程。
|
7月前
|
存储 Java Maven
Maven系统级别依赖:解决部署时Jar包缺失问题
以上就是关于Maven系统级别依赖解决部署时Jar包缺失问题的解答,希望对你有所帮助。在软件开发中,遇到问题并解决问题是常态,希望你能够善用这些工具,解决你遇到的问题。
474 28
|
10月前
|
存储 Prometheus Cloud Native
分布式系统架构6:链路追踪
本文深入探讨了分布式系统中的链路追踪理论,涵盖追踪与跨度的概念、追踪系统的模块划分及数据收集的三种方式。链路追踪旨在解决复杂分布式系统中请求流转路径不清晰的问题,帮助快速定位故障和性能瓶颈。文中介绍了基于日志、服务探针和边车代理的数据收集方法,并简述了OpenTracing、OpenCensus和OpenTelemetry等链路追踪协议的发展历程及其特点。通过理解这些概念,可以更好地掌握开源链路追踪框架的使用。
1076 41
|
8月前
|
人工智能 安全 API
AI 解决方案的安全控制设计与实施
AI 解决方案的安全控制设计与实施涵盖数据安全、模型安全、系统安全及合规治理四大领域。通过数据加密、访问控制、差分隐私等手段保障数据安全;采用对抗训练、联邦学习确保模型安全;利用容器化部署、可信执行环境维护系统安全;并遵循 GDPR 等法规,进行红队测试和应急响应,确保 AI 全生命周期的安全性与合规性。
|
前端开发 搜索推荐 开发者
【Flutter前端技术开发专栏】Flutter中的自定义主题与暗黑模式
【4月更文挑战第30天】本文介绍了如何在Flutter中自定义主题和实现暗黑模式。通过`ThemeData`类定义应用的外观,包括颜色、字体和样式。示例展示了如何设置主色、强调色及文本、按钮主题。暗黑模式可通过`darkTheme`属性启用,结合`ThemeData.dark()`方法定制。利用`MediaQuery`监听系统亮度变化,动态调整暗黑模式状态。Flutter的这些特性有助于开发者创建独特且用户友好的界面。
697 0
【Flutter前端技术开发专栏】Flutter中的自定义主题与暗黑模式
|
存储 算法 安全
软考中级-软件设计师知识点
软考中级-软件设计师知识点
756 0