admin管理员组文章数量:1487745
2024年09月编程心得:(GreenPlum 初体验、三招解决 JVM 假死、自研任务调度系统)
2024 年 9 月份,非常忙碌的一个月,笔者收获颇丰,写几点编程心得,和大家分享下。
1 GreenPlum 初体验
相信很多同学都没有接触过 Greenplum 数据库,笔者也是今年 9 月份第一次接触,帮某票务公司优化用户服务。
什么是 Greenplum 数据库 ?
Greenplum 数据库是一种大规模并行处理(MPP)数据库服务器,其架构特别适用于管理大规模分析型数据仓库。
MPP 指有两个或者更多个处理器协同执行一个操作的系统,每一个处理器都有其自己的内存、操作系统和磁盘。Greenplum 使用这种高性能系统架构来分布数 T 字节数据仓库的负载,并且能够使用系统的所有资源并行处理一个查询。
Greenplum 数据库是基于 PostgreSQL 开源技术的,它的本质上是多个 PostgreSQL 面向磁盘的数据库实例一起工作形成的一个紧密结合的数据库管理系统(DBMS),与 Greenplum 数据库交互的数据库用户会感觉在使用一个常规的 PostgreSQL DBMS。
笔者主要解决用户中心的两个问题:
1、报表接口性能较差
2、清洗数据定时任务性能差,以及频发 JVM 假死
经过一个月的磨合,优化了第一个问题中的部分报表接口,并完全解决了第二个问题 ,对于 Greenplum 有三点感触:
- SQL 语法和笔者经常使用的 MySQL 有些差异,比如分页查询 ;
- 框架兼容性,某些 SQL 语句在 mybatis-plus 会出现问题(不会报错,但执行结果不正确), 需要调整 SQL 写法 ;
- Greenplum 处理单条数据的查询和修改性能并不高,但高数量级情况下,批量操作性能比单节点 MySQL 高不少。
2 三招解决 JVM 假死
进入团队的第三天,笔者就发现清洗数据定时任务 JVM 假死了,表现在两个方面:
1、所有的 XXLJOB 定时任务停止了
2、通过 Jstat 命令查看,发现 Eden 区 和 Old 区 都是 100% ,整个 JVM 的内存无法完成 GC , 各个分代始终不发生变化。
笔者总结了穷人版三招解决 JVM 假死:
1、首先通过 JVM 命令 查看真实的内存分配。
代码语言:javascript代码运行次数:0运行复制jmap -heap <pid>
查看年轻代和老年代的内存分配,可以调整下内存的大小,比如:
代码语言:javascript代码运行次数:0运行复制nohup java -jar ${jarName}.jar -Xms8g -Xmn4g -Xmx8g --spring.profiles.active=pro >/dev/null 2>&1 &
2、避免一次性生产大量的大对象
通过观察日志,定位哪个时间段开始 JVM 假死,定时任务到底在做哪些操作。
笔者发现用户中心在 JVM 卡死的那个时间点,多个定时任务都会每次都会加载 5万条数据到 JVM 中 , SQL 语句类似:
代码语言:javascript代码运行次数:0运行复制SELECT *
FROM your_table_name
ORDER BY id asc
LIMIT 50000 OFFSET offset_value;
笔者将定时任务的加载数量从 5 万缩小到了 5000 条 ,修改完成之后,通过 jstat 命令发现 GC 更加平滑了,没有原来那么突兀了。
3、通过缓存机制避免多个对象的产生
经过前两个步骤的优化,JVM 的 GC 丝滑了不少,笔者发现定时任务会频繁调用多个通用方法,这些通用方法每次都会创建多个对象。
比如某个票据已经处理了,但是另外一个批次还需要重复处理这个票据,那么会有非常多冗余的数据库操作和 JVM 对象创建,非常耗费资源。
笔者使用缓存将某些业务结果缓存起来,避免重复执行 。
经过上面三种土方法,长时间困扰公司的频发JVM 假死问题彻底得到解决,当然这里面有非常多的细节,笔者就不展开了,大家了解解决问题的脉络即可。
3 自研任务调度系统(知识星球)
9 月份,笔者在知识星球上开启了一个新的专栏:《自研任务调度系统》。
在笔者的职业生涯里,接触过 TimerTask 、Quartz 、SpringTask、 时间轮 HashWheelTimer 、Elastic-Job 、XXL-JOB、PowerJob、AirFlow 等任务调度了系统,也曾在一家汽车租赁公司自研过基于 XXL-JOB 改造的任务调度系统。
笔者希望这个专栏,可以将当前 Java 世界流行的任务调度方案一网打尽,同时自研一个任务调度系统(支持 10万 + 调度任务),希望能够给予同学们不一样的启发。
专栏文章目录初稿如下图,后续会做一些微调。
自研任务调度系统架构如下图:
目前代码正在开发中:
假如同学们感兴趣,等年底完全开发完成,大家可以来笔者的星球逛逛。
最后,分享一首杰伦的歌给大家,笔者觉得很温暖和励志。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2024-10-16,如有侵权请联系 cloudcommunity@tencent 删除任务调度greenplum编程系统jvm该不该搁下重重的壳. 寻找到底哪里有蓝天 随着轻轻的风轻轻的飘. 历经的伤都不感觉疼 我要一步一步往上爬. 等待阳光静静看着它的脸 小小的天有大大的梦想. 重重的壳裹着轻轻的仰望 我要一步一步往上爬. 在最高点乘着叶片往前飞 让风吹干流过的泪和汗 总有一天我有属于我的天
本文标签: 2024年09月编程心得(GreenPlum 初体验三招解决 JVM 假死自研任务调度系统)
版权声明:本文标题:2024年09月编程心得:(GreenPlum 初体验、三招解决 JVM 假死、自研任务调度系统) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/shuma/1754724662a3178847.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论