
jvm
文章平均质量分 92
空无c
这个作者很懒,什么都没留下…
展开
-
运维:你们 JAVA 服务内存占用太高,还只增不减!告警了,快来接锅
先点赞再看,养成好习惯某天,运维老哥突然找我:“你们的某 JAVA 服务内存占用太高,告警了!GC 后也没释放,内存只增不减,是不是内存泄漏了!”然后我赶紧看了下监控,一切正常,距离上次发版好几天了,FULL GC 一次没有,YoungGC,十分钟一次,堆空闲也很充足。运维:“你们这个服务现在堆内存 used 才 800M,但这个 JAVA 进程已经占了 6G 内存了,是不是你们程序出啥内存泄露的 bug 了!”我想都没想,直接回了一句:“不可能,我们服务非常稳定,不会有这种问题!”.原创 2021-05-24 13:45:31 · 5794 阅读 · 14 评论 -
JDK/Dubbo/Spring 三种 SPI 机制,谁更好?
先点赞再看,养成好习惯SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。本文主要是特性 & 用法介绍,不涉及源码解析(源码都很简单,相信你一定一看就懂)SPI 有什么用?举个栗子,现在我们设计了一款全新的日志框架:super-logger。默认.原创 2021-04-13 09:28:30 · 581 阅读 · 0 评论 -
求你了,GC 日志打印别再瞎配置了
先点赞再看,养成好习惯生产环境上,或者其他要测试 GC 问题的环境上,一定会配置上打印GC日志的参数,便于分析 GC 相关的问题。但是可能很多人配置的都不够“完美”,要么是打印的内容过少,要么是输出到控制台,要么是一个大文件被覆盖,要么是……本文带你一步一步,配置一个完美的 GC 日志打印策略打印内容为了保留足够多的“现场证据”,最好是 GC 相关的信息打印完整。而且你的程序真的不差你GC时打印日志I/O消耗的那点性能打印基本 GC 信息打印 GC 日志的第一步,就是开启 GC 打印的参数.原创 2021-04-12 09:02:47 · 1916 阅读 · 0 评论 -
别再纠结线程池大小/线程数量了,没有固定公式的
可能很多人都看到过一个线程数设置的理论:CPU 密集型的程序 - 核心数 + 1I/O 密集型的程序 - 核心数 * 2不会吧,不会吧,真的有人按照这个理论规划线程数?线程数和CPU的小测试抛开一些操作系统,计算机原理不谈,说一个基本的理论(不用纠结是否严谨,只为好理解):一个CPU核心,单位时间内只能执行一个线程的指令**那么理论上,我一个线程只需要不停的执行指令,就可以跑满一个核心的利用率。来写个死循环空跑的例子验证一下:测试环境:AMD Ryzen 5 3600, 6 - Co原创 2021-04-06 23:24:22 · 684 阅读 · 0 评论 -
一个JDK线程池BUG引发的GC机制思考
问题描述前几天在帮同事排查生产一个线上偶发的线程池错误逻辑很简单,线程池执行了一个带结果的异步任务。但是最近有偶发的报错:java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@a5acd19 rejected from java.util.concurrent.ThreadP...原创 2019-11-25 21:27:58 · 522 阅读 · 0 评论 -
JVM的那些常用参数以及命令
简介java启动参数共分为三类其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用调试参数打印启动参数可以查看默认参数java -XX:+Print...原创 2019-10-11 22:51:09 · 378 阅读 · 0 评论 -
Arthas 的高级操作 - Ognl表达式
Arthas 的一个很重要的应用场景,就是查看运行时的数据,但有时需要动态的查看数据,或者数据过多,需要动态筛选,比较复杂的规则就需要靠 OGNL 了。下面介绍一些常用的 arthas 中 ognl 的操作,测试代码如下,springboot 工程:@RequestMapping("send")public String send(HttpServletRequest request, Ht...原创 2019-09-27 09:37:56 · 8324 阅读 · 2 评论 -
Java 中的强引用/软引用/弱引用/虚引用以及 GC 策略
在介绍各种引用之前,先简单介绍下垃圾回收什么是垃圾回收垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,防止内存泄露。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。Java 语言出来之前,大家都在拼命的写 C 或者 C++ 的程序,而此时存在一个很大的矛盾,C++ 等语言创建对象要不断的去开辟空间,不用的时候又需...原创 2019-10-06 22:22:50 · 456 阅读 · 0 评论