TWJUG@LINE 会议记录:2019年9月5日

发布: (2026年1月15日 GMT+8 09:01)
7 min read
原文: Dev.to

Source: Dev.to

前言

大家好,我是 Evan Lin,LINE 台湾的技术布道师。
2019‑09‑05 晚上,我很高兴邀请 TWJUG 社区来到 LINE 台北办公室,举办另一次社区聚会。

演讲者

  • Shinya Yoshida – LINE 东京办公室
  • Yuto Kawamura – 2017 年 Kafka Summit 演讲者

议题

  1. 面向未来 LINE HBase 的 ZGC
  2. 神秘的 JVM 暂停导致 Kafka Broker 性能下降

活动链接 – KKTIX:


ZGC for Future LINE HBase – Shinya Yoshida

Slides

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

  1. 了解每种收集器的权衡(吞吐量 vs. 暂停延迟、内存开销、硬件需求)。
  2. 根据硬件和工作负载匹配收集器(CPU 核数、堆大小、延迟要求)。

性能对比(ZGC vs. G1GC)

  • 大内存配置(128 GB) 下,ZGC更新读取 性能上均优于 G1GC。
  • 由于 ZGC 在 Java 11 中仍是 实验性,LINE 仅在内部进行性能测试。后续会分享更多实验结果和正式上线计划。

Kafka Broker 性能下降的神秘 JVM 暂停 – 川村悠人

Slides

Kafka debugging at LINE

概览

本节内容由 川村悠人(LINE 高级工程师)分享,讲述一次线上服务中出现的问题的调试过程。Kafka 在 LINE 的消息后台占据非常重要的地位,超过六十个服务使用 Kafka(参见这张 幻灯片)。演讲者展示了一个与 Kafka 相关的故障并解释了完整的调试过程。

现象 / 问题

最初,每条 Kafka 消息都能顺畅处理,但突然在一段时间内出现了以下情况:

  • 第 99 百分位生产者延迟的响应时间下降
  • Zookeeper 会话超时

问题出现时,团队观察到:

  • 每个运行线程的 CPU 使用率 飙升。
  • GC 暂停时间(STW) 增加;JVM 的 Stop‑The‑World 暂停变得明显更长。

开始缩小范围

Debugging steps

根据这些结果,演讲者分享了他的调试经验:

  1. 假设 – 某些 JVM 层面的事件导致系统变慢。
  2. 复现 – 他尝试重新创建相同的环境。

关于 STW(Stop‑The‑World)

当 GC 运行时,JVM 会执行两个动作:

  1. 设置安全点 – 告诉 JVM 开始 GC。
  2. 安全点同步 – JVM 等待所有运行中的线程暂停。

为了测试 JVM 的安全点同步是否导致了过度延迟,演讲者编写了一个非常长的嵌套循环,使系统不会过早到达安全点。通过观察行为,他能够确认(或否定)自己的假设,并查看问题是否能够复现。

这个过程是迭代的:不断形成假设、编写测试工具、复现问题,最后使用低层观察工具验证假设。

根本原因是什么? 演讲者保密——鼓励读者查看幻灯片以获取完整故事。

参考文献

活动概要

本次聚会深入探讨了 JVM 级别的调试和 Kafka 性能问题。与会者获得了宝贵的知识,并受邀进一步浏览幻灯片并讨论相关发现。

加入 “LINE 开发者官方社区” 以获取第一手的聚会更新和开发者计划的推送通知。

官方账号 ID: @line_tw_dev


关于 “LINE 开发者社区计划”

LINE 于今年年初在台湾推出 LINE 开发者社区计划。该计划投入长期的人力和资源,举办内部和外部、线上和线下的开发者聚会、招聘日、会议等。全年计划超过 30 场活动。

敬请关注更新。详情请参阅持续更新的日程安排:

由 TWJUG 社区为 LINE meetup 编写,2019‑09‑05。

Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...