作者:遥望星星

JDK 9+ 的新集合工厂方法与不可变集合

Code review 时那行 Arrays.asList 12 月底做代码评审,看到一个新同事写的状态判断: private static final List<String> PAID_STATUS = Collections.unmodifiableList( Arrays.a

遥望星星 遥望星星 发布于 2021-12-23

Log4j2 漏洞应急:一夜之间的全量升级

周五晚上十点,安全组在群里丢了三个 CVE 编号 2021 年 12 月 10 号晚上 22:17,公司安全组群里一条消息,只有三行: CVE-2021-44228 Log4j2 RCE,影响版本 2.0-beta9 至 2.14.1,请各业务线今晚完成自查并反馈。 那时候这个漏洞还没被媒体炒起来,

遥望星星 遥望星星 发布于 2021-12-18

Redisson 分布式锁源码解析

日志里那句 IllegalMonitorStateException 12 月初,结算服务凌晨报警了几次,错误信息很眼熟: java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current th

遥望星星 遥望星星 发布于 2021-12-11

本地缓存 Caffeine 实战与命中率优化

压测报告里那行 P99 把我叫住了 11 月中旬做双十一前的容量压测,商品详情接口 3000 QPS 下 P99 是 42 ms,还算好看。压到 6000 QPS 的时候 P99 直接跳到 180 ms,而且曲线是锯齿状往上爬,不是平稳的。同时 Redis 集群 CPU 到了 61%,带宽 780

遥望星星 遥望星星 发布于 2021-11-30

Redis 6 多线程 IO 与客户端缓存

升级背景:单核 CPU 打满了 11 月初我们把缓存集群从 Redis 5.0.9 升到了 6.2.5。起因很直接:大促前压测,某个分片的 CPU 到了 92%,但机器是 8 核的——也就是说 Redis 把一个核跑满了,剩下 7 个核在旁边看着。 $ redis-cli -h 10.0.4.11

遥望星星 遥望星星 发布于 2021-11-24

Spring 循环依赖到底该不该允许

同事的提问:改成构造器注入就启动失败了 11 月初,组里在推"统一用构造器注入",小杨改完一个服务发现起不来了: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with

遥望星星 遥望星星 发布于 2021-11-19

String 在 JDK 9 之后为什么改用 byte 数组

起因:升级 JDK 11 之后堆少了 500 MB 前面那篇迁移记录里提过,订单服务从 JDK 8 升到 11 之后,稳定态堆占用从 2.6 GB 降到 2.1 GB。我当时只当是 GC 改进的附带效果,直到有同事问"为什么少了这么多",我才认真去查了一下。 答案主要来自 JEP 254:紧凑字符串

遥望星星 遥望星星 发布于 2021-11-10

堆外内存泄漏排查:一次 Direct buffer memory OOM

现象:堆才用了一半,容器就被 OOMKilled 10 月 28 号晚上,网关服务的一个 Pod 被 K8s 杀了。 $ kubectl describe pod api-gateway-5f8b7c9d4-xt2n9 Last State: Terminated Reason:

遥望星星 遥望星星 发布于 2021-10-30

MySQL 索引优化进阶:filesort 与临时表消除

现象:翻到第 1000 页要 8 秒 运营反馈"订单列表翻页越往后越慢"。我们复现了一下,第一页 23 ms,第 100 页 340 ms,第 1000 页 8.2 秒。 SQL 长这样(每页 20 条): SELECT * FROM t_order WHERE user_id = 100372

遥望星星 遥望星星 发布于 2021-10-21

Kafka 消费者组重平衡问题与优化

现象:每次发版,消费停 47 秒 9 月底做容量复盘时,我发现一个奇怪的规律:每次发布,Kafka 消费 lag 都会先涨后落,中间有大约 45 到 60 秒消费完全停住。看消费者日志,那段时间全是这个: 2021-09-28 14:22:31.407 WARN [Consumer client

遥望星星 遥望星星 发布于 2021-10-15