Eric 发布的文章

ZGC

Java 11开始, 引入了一个新的实验性质的垃圾收集器 Z Garbage Collector. 它能处理几 GB 到几 TB 的 heap, 保证 stop the world 的时间不超过10ms, 并且这个时间不随着 heap 的大小而增加.

官方主页: https://wiki.openjdk.java.net/display/zgc/Main

java debug JPDA (JavaTM Platform Debugger Architecture)

Java 是在 VM 里面运行的语言, 同时要做到平台无关性, 所以它有自己的 debug 接口和实现.
官方关于 JPDA 的链接: https://docs.oracle.com/javase/6/docs/technotes/guides/jpda/
jpda.png

上面的图很容易理解, VM 具体实现和 backend 接口直接使用 JVM TI 来作为通信接口.
Debugger 和 Debuggee 之间定义了协议: JDWP (这类似于 HTTP).
Debugger 自己的和后端通信以及自己的 UI 使用 JDI(这类似与 HTML)

如何远程 debug:
从 Java 9 开始:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=127.0.0.1:8000 myApp
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000 myApp

Java 9 之前:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 OurApplication

Java 5 之前:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 myApp

参数列表:
a list of options:

  1. transport is the only fully required option. It defines which transport mechanism to use. dt_shmem only works on Windows and if both processes run on the same machine while dt_socket is compatible with all platforms and allows the processes to run on different machines

  2. server is not a mandatory option. This flag, when on, defines the way it attaches to the debugger. It either exposes the process through the address defined in the address option. Otherwise, JDWP exposes a default one

  3. suspend defines whether the JVM should suspend and wait for a debugger to attach or not

  4. address is the option containing the address, generally a port, exposed by the debuggee. It can also represent an address translated as a string of characters (like javadebug if we use server=y without providing an address on Windows)

客户端最简陋的可以使用 jdk 自带 jdb.
更多信息参考: https://www.baeldung.com/java-application-remote-debugging

SRE重案调查组 第六集 | 剖析Java的非常规线程死锁问题

这是本人发表在 eBay 微信公众号 eBay技术荟 上的 一系列文章, 原文地址如下. 编辑非常给力, 请查看原文, 这里只是供搜索引擎访问.
https://mp.weixin.qq.com/s/r__X4sYj6PLjPDWDulJAAw

如果原文由于某种原因不存在了, 请查看这个pdf 版本: SRE重案调查组 第六集 | 剖析Java的非常规线程死锁问题

导读

本文将分享eBay SRE部门遇到的某个非常规Java应用程序死锁问题。SRE侦探们将从最表象的问题入手,逐步分析,并重现代码,提出该类问题的解决方案,最后总结Java常规及非常规死锁问题的分析及定位,希望能对同业人员有所启发。

- 阅读剩余部分 -

SRE重案调查组 第五集 | 为什么我的服务器又双叒不响应了?!

这是本人发表在 eBay 微信公众号 eBay技术荟 上的 一系列文章, 原文地址如下. 编辑非常给力, 请查看原文, 这里只是供搜索引擎访问.
https://mp.weixin.qq.com/s/-CTHVLxgzTn79vOqEe_CQQ

如果原文由于某种原因不存在了, 请查看这个pdf 版本:SRE重案调查组 第五集 | 为什么我的服务器又双叒不响应了?!.pdf

导读

在SRE的日常工作中,经常会碰到很多典型问题。其中一种便是:为什么我的服务器不响应了? 

原因可能是服务器软件或硬件损坏,应用程序未启动,网络防火墙,服务器配置等基本的环境问题,也有可能是与应用程序关联比较紧密的代码问题。后者不易发现,又或是长期累积的结果,查起来不像环境问题那么直接。这里列举几个发生在生产环境的真实案例,希望对大家诊断类似的问题有所启发。

- 阅读剩余部分 -