自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张哈希的博客

曾任职于顺丰,华为,网易等公司,从Java小白,成长为资深开发与项目组首席架构师。喜欢源码与开源,曾贡献 MyCat1.6 与 JFRUnit 核心源码,贡献过Spring Cloud,Apache RocketMQ,Apache Bookeeper,Du

  • 博客(8)
  • 论坛 (1)
  • 收藏
  • 关注

原创 通过 JFR 与日志深入探索 JVM - 1. JFR 简介与发展

什么是 Java Flight Record我们都知道,黑匣子是用于记录飞机飞行和性能参数的仪器。在飞机出问题后,用于定位问题原因。JFR(Java Flight Record) 就是 Java 的黑匣子。JFR 是 Java Flight Record (Java飞行记录) 的缩写,是 JVM 内置的基于事件的JDK监控记录框架。这个起名就是参考了黑匣子对于飞机的作用,将 Java 进程比喻成飞机飞行。顾名思义,这个记录主要用于问题定位和持续监控。在线上出问题时,我们一般首要任务是快速恢复,而不是保

2020-12-19 22:49:49 33837 1

原创 通过 JFR 与日志深入探索 JVM - 总览篇

本系列会针对 Java 中高级开发人员以及 JVM 运维人员,帮助大家深入理解 JVM 原理并能学以致用定位线上瓶颈,线上性能问题以及长期持续监控 JVM 。本系列针对 OpenJDK 11 以后的版本,同时也会帮助用户升级到 OpenJDK 11。本专栏会从快速上手 JFR,可视化查看 JFR 引入,之后会详细分析每一个 JFR 事件对应的背后的 JVM 原理以及源码,并且结合 Java 测试代码生成这些 JFR 事件帮助大家更好的理解这些事件产生的原因,以及需要如何去优化,然后会给出一下通过 JFR 定

2020-12-18 17:46:31 33870 1

原创 通过 JFR 与日志深入探索 JVM - TLAB 原理详解

什么是 TLAB?TLAB(Thread Local Allocation Buffer)线程本地分配缓存区,这是一个线程专用的内存分配区域。既然是一个内存分配区域,我们就先要搞清楚 Java 内存大概是如何分配的。我们一般认为 Java 中 new 的对象都是在堆上分配,这个说法不够准确,应该是大部分 new 的对象在堆上分配。还有一部分可能在 栈上分配 或者是 TLAB 中分配。同时,对于一些的 GC 算法,还可能直接在老年代上面分配,例如 G1 GC 中的 humongous allocation

2020-12-17 20:42:38 39970 5

原创 微服务系统架构设计系列 - RateLimiter - 1. 限流器简介与一般算法

Key TakeAways限流器是一种防御性的编程实现方式,防止一个大型的分布式系统在不可预知的大流量到来的时候导致系统大规模故障。限流器可以设置在服务端,主要为了限制资源的使用。放在客户端主要考虑调用压力更加均匀。一般限流器有五种算法,分别是:令牌桶,漏斗桶,固定窗口,滑动日志(指的其实是广义上的滑动窗口),滑动窗口(这里指的是滑动日志+固定窗口结合的一种算法)。什么是限流器?限流器是一种限制某种操作在一定时间内的执行次数(例如每秒钟5次)或者执行量(例如每秒钟1G大小的数据)的机制。哪里会用

2020-12-10 18:56:40 12340 2

原创 JVM 相关 - 深入 JVM 的钥匙 WhiteBox API

什么是 WhiteBox APIWhiteBox API 是 HotSpot VM 自带的白盒测试工具,将内部的很多核心机制的 API 暴露出来,用于白盒测试 JVM,压测 JVM 特性,以及辅助学习理解 JVM 并调优参数。WhiteBox API 是 Java 7 引入的,目前 Java 8 LTS 以及 Java 11 LTS(其实是 Java 9+ 以后的所有版本,这里只关心 LTS 版本,Java 9 引入了模块化所以 WhiteBox API 有所变化)都是有的。但是默认这个 API 并没有编

2020-12-25 17:07:54 34044

原创 2020年度总结 - 不断尝试与反思的一年

2020,转眼间就过去了。这一年,不论是技术上还是生活上,都成长很多,并做了很多之前没有做过的事情。和心爱的人终于要修成正果今年下半年,七夕那天和宝宝求婚。后来 9.25 终于和宝宝在韩国艺匠拍了婚纱照,宝宝和我都很满意。明年如果疫情不影响的话,应该五月份就会和宝宝举办婚礼,期待~跟着创业业务趋于稳定去年离开了网易,开始创业。受上半年疫情影响,导致创业本来的爆发增长期推后了半年左右,幸好老大他们运作得当,保证了各位员工的待遇的前提下,维持业务正常运行。现在业务终于可以够我们活下去的了,公司搬了新

2020-12-22 19:19:53 34438 2

原创 通过 JFR 与日志深入探索 JVM - 2. JFR 基本原理以及快慢因素

全系列目录:通过 JFR 与日志深入探索 JVM - 总览篇我个人有个习惯,对于要用的一个新的框架,新的中间件等等,我一般不太信任它的官网“吹”的优点以及性能测试,我一般会一边使用一边自己测试,并且猜想其内部实现并结合源码搞清楚它的实现原理以及一些“坑”(这些“坑”并不是说这些框架或者中间件有什么毛病,而是因为官网浮夸的“吹”以及有些事情说一半留一半导致用户有误解),在这之后我才敢放心使用。所以呢,我想先将 JFR 实现的基本原理提前说明白,这样可以让大家先有个整体印象,搞明白为何这么配置就对线上 .

2020-12-22 17:36:50 34190

原创 深度探索JFR - JFR定位线上问题实例 - JFR导致的雪崩问题定位与解决

最近发现一个应用,使用默认的 JFR 配置,发生了类似于雪崩的现象,这里记录下,引以为戒。Key takeawaysJFR 的线程堆栈 dump 采集默认周期是everyChunk,也就是每次新建一个Chunk就会采集一次。默认每个Chunk大小为 12M,在线程比较多的时候,堆栈 dump 可能大于 12M,导致 JFR 一直切换新的 Chunk,然后又触发evenryChunk导致无限循环而雪崩。对于 JFR 默认事件采集配置(位于JDK目录/lib/jfr/default.jfc),每个采.

2020-12-02 18:38:52 33764

空空如也

张哈希的留言板

发表于 2020-01-02 最后回复 2020-01-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除