TWJUG@LINE 会议记录:2019年9月5日
Source: Dev.to
前言
大家好,我是 Evan Lin,LINE 台湾的技术布道师。
在 2019‑09‑05 晚上,我很高兴邀请 TWJUG 社区来到 LINE 台北办公室,举办另一次社区聚会。
演讲者
- Shinya Yoshida – LINE 东京办公室
- Yuto Kawamura – 2017 年 Kafka Summit 演讲者
议题
- 面向未来 LINE HBase 的 ZGC
- 神秘的 JVM 暂停导致 Kafka Broker 性能下降
活动链接 – KKTIX:
ZGC for Future LINE HBase – Shinya Yoshida
Shinya Yoshida 负责 LINE 的 HBase 相关处理,他分享了 HBase 在 LINE 服务中的使用方式。
HBase 是在 JVM 上广泛使用的 NoSQL 存储,需要低延迟和高可用性。由于 JVM 的 STW(Stop‑The‑World) 垃圾回收会暂停所有线程,这对高吞吐、低延迟的工作负载来说是一个痛点。演讲涵盖了性能调优技术和观察结果。
GC 基础
垃圾回收主要包括两个阶段:
1. 找到垃圾
- 目标 – 标记可以回收的内存。
- 算法
- 引用计数 – 统计对象的引用数;当计数降为零时,对象即可被回收。
- 跟踪(标记) – 从 GC 根遍历对象图;不可达的对象被视为垃圾。
2. 回收垃圾并碎片整理
- 目标 – 回收内存并压缩堆。
- 算法
- 清扫 / 整理 – 回收不可达对象,然后移动存活对象以消除碎片。
- 复制 – 分配新区域,将存活对象复制过去,丢弃旧区域。虽然会占用更多内存,但通常更快。
现代 GC 算法
上图展示了当今使用的几种 GC 算法:
| 算法 | 特点 |
|---|---|
| G1GC | 基于 Region,旨在实现可预测的暂停时间。 |
| ZGC | 低延迟,可扩展至多 TB 堆;在 Java 11 中仍属实验性。 |
| Shenandoah | 低暂停并发收集器(OpenJDK)。 |
| Parallel/Serial GC | “老”收集器,暂停时间较长但实现简单。 |
选择 GC
- 了解每种收集器的权衡(吞吐量 vs. 暂停延迟、内存开销、硬件需求)。
- 根据硬件和工作负载匹配收集器(CPU 核数、堆大小、延迟要求)。
性能对比(ZGC vs. G1GC)
- 在 大内存配置(128 GB) 下,ZGC 在 更新 和 读取 性能上均优于 G1GC。
- 由于 ZGC 在 Java 11 中仍是 实验性,LINE 仅在内部进行性能测试。后续会分享更多实验结果和正式上线计划。
Kafka Broker 性能下降的神秘 JVM 暂停 – 川村悠人
概览
本节内容由 川村悠人(LINE 高级工程师)分享,讲述一次线上服务中出现的问题的调试过程。Kafka 在 LINE 的消息后台占据非常重要的地位,超过六十个服务使用 Kafka(参见这张 幻灯片)。演讲者展示了一个与 Kafka 相关的故障并解释了完整的调试过程。
现象 / 问题
最初,每条 Kafka 消息都能顺畅处理,但突然在一段时间内出现了以下情况:
- 第 99 百分位生产者延迟的响应时间下降。
- Zookeeper 会话超时。
问题出现时,团队观察到:
- 每个运行线程的 CPU 使用率 飙升。
- GC 暂停时间(STW) 增加;JVM 的 Stop‑The‑World 暂停变得明显更长。
开始缩小范围

根据这些结果,演讲者分享了他的调试经验:
- 假设 – 某些 JVM 层面的事件导致系统变慢。
- 复现 – 他尝试重新创建相同的环境。
关于 STW(Stop‑The‑World)
当 GC 运行时,JVM 会执行两个动作:
- 设置安全点 – 告诉 JVM 开始 GC。
- 安全点同步 – JVM 等待所有运行中的线程暂停。
为了测试 JVM 的安全点同步是否导致了过度延迟,演讲者编写了一个非常长的嵌套循环,使系统不会过早到达安全点。通过观察行为,他能够确认(或否定)自己的假设,并查看问题是否能够复现。
这个过程是迭代的:不断形成假设、编写测试工具、复现问题,最后使用低层观察工具验证假设。
根本原因是什么? 演讲者保密——鼓励读者查看幻灯片以获取完整故事。
参考文献
活动概要
本次聚会深入探讨了 JVM 级别的调试和 Kafka 性能问题。与会者获得了宝贵的知识,并受邀进一步浏览幻灯片并讨论相关发现。
加入 “LINE 开发者官方社区” 以获取第一手的聚会更新和开发者计划的推送通知。
官方账号 ID: @line_tw_dev
关于 “LINE 开发者社区计划”
LINE 于今年年初在台湾推出 LINE 开发者社区计划。该计划投入长期的人力和资源,举办内部和外部、线上和线下的开发者聚会、招聘日、会议等。全年计划超过 30 场活动。
敬请关注更新。详情请参阅持续更新的日程安排:
由 TWJUG 社区为 LINE meetup 编写,2019‑09‑05。



