- 博客(143)
- 收藏
- 关注
原创 生产环境Java服务出现Heap内存溢出宕机数据恢复
一次 Java 数据服务出现故障,不一定意味着 JVM 里的数据只能随服务一起消失。可以在 K8s 探活失败后保留故障现场,自动生成并上传 Heap Dump,再通过告警通知技术人员。后续利用 MAT 分析堆中仍未落库的业务数据,导出后批量补库;对于 PV、UV、点击量等依赖这些数据的离线聚合,再针对故障时间范围重新计算一次,从而把服务故障和数据恢复串成一个完整的闭环。
2026-09-22 02:37:08
168
原创 MySQL的BufferPool和其他组件缓存抗污染方案
缓存污染产生的原因,以及传统 LRU 在大规模扫描、短时突发访问等场景下面临的问题,分析 InnoDB Buffer Pool 的 old/young 机制,通过延迟晋升降低一次性扫描对热点页面的影响;进一步介绍 Caffeine 的 W-TinyLFU 策略
2026-09-15 03:16:51
203
原创 MySQL的select distinct ..Union all和select..union的区别
MySQL针对union、union all distinct的场景性能优化
2026-09-11 22:20:46
266
原创 线上Java服务服务出现Java Heap Space原因排查
Java堆内存溢出时生成dump文件的方法(-XX参数),以及使用MAT工具分析内存泄漏的过程。发现是Druid连接池的监控模块(sqlStatMap)未清理SQL记录导致900MB内存占用,建议通过关闭监控(spring.datasource.druid.filter.stat=false)解决。分析步骤包括获取dump文件、MAT自动分析、定位问题类、查看源码缺失清理逻辑及验证SQL记录内存占用情况。
2025-06-23 16:44:23
631
原创 Java项目集成Kotlin语法
作为JVM上跑的东西,编译成.class的文件都可以直接衔接集成执行,除了Java外,Kotlin、Scala等都可以集成到Java
2025-03-24 15:33:52
435
原创 Error running ‘WebApplication‘ Error running WebApplication. Command line is too long解决办法
Error running ‘WebApplication‘ Error running WebApplication. Command line is too long解决办法
2025-02-20 11:52:56
472
原创 HTTP、HTTPS区别可靠性及POST为什么比GET安全的探讨
HTTP、HTTPS的执行流程、POST、GET到底哪个安全?都安全还是都不安全?
2025-02-16 16:40:23
1619
1
原创 Java编译.class字节码图示解析
通过上面的定义规则,下图标记了一部分常量池项,每种连续的颜色代表一项从第一项0a开始,CONSTANT_Methodref 0x0A 5 字节(1 + 2 + 2),所以第一行绿色5字节代表这个方法名常量,00 06代表指向第6项指向(第二行黑色框)00 0f表示索引是常量池15项(9行绿色)
2025-01-11 17:20:35
621
原创 G1 FullGC和堆dump MAT工具分析
垃圾回收等参数是非常重要的调试参数,用于捕获内存溢出时的堆内存快照,帮助分析内存泄漏或内存使用问题。建议在开发或生产环境中开启这些参数以备问题分析之需。
2025-01-09 22:33:10
671
原创 360pika—弹性 KV 数据存储系统入门安装使用
360、360游戏、新浪微博、喜马拉雅、美团网、学而思网校、58同城、小米、脉脉等公司都在使用的Pika,不用修改代码平滑从Redis迁移到Pika,对热数据做缓存,将全量数据持久化存储到 RocksDB,并且实现冷热分级存储
2024-12-23 19:03:08
1473
原创 Netty内存分配机制:直接/堆内存、池化/非池解析
自定义ByteBuf可以heap或direct内存,但是通过网络IO返回的ByteBuf无法指定内存类型只能是direct
2024-12-16 12:53:01
838
原创 服务请求QPS上不来?看看有没有正确配置参数
"不改参数,就请求都进不来!" 看似玩笑,实际却是许多系统性能问题的真实写照。不要再抱怨你的服务“扛不住高并发”,先看看是不是被小小的参数限制住了。
2024-12-16 10:24:16
700
原创 Java线程interrupt、wait-notify/all、sleep等方法(源码级分析)
也就是WAIT/TIME WAIT本质上是用一个Object中的等待队列去存储需要等待的线程对象,每一个Object对象都可以充当这个角色,获取这个对象的waitset才能把Thread放入,唤醒相当于再从这个waitset中把线程剔除来再唤醒,这也就是为什么wait notify/all 方法需要synchronized同一个对象了。它清除中断标志是为了避免开发者不小心忽略异常后,线程还带着一个“脏标志”继续运行,导致逻辑混乱,真是贴心的很。由于迭代器用的还是DequeueWaiter,所以这个仍然是。
2024-12-06 19:36:01
818
原创 CentOS查看日志:别用 cat,当心服务器“嘎了”
再强调一遍,日志大,别用 cat,整不好就让服务器“嘎”了! 用 tail 看尾巴,用 less 分页翻,用 grep 定点搜,既稳又快。记住,工作稳当,生活安逸,别给自己找麻烦。
2024-12-02 01:16:54
315
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅