![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
文章平均质量分 69
jvm
Andy_Health
永远不要停止奔跑。
展开
-
线上紧急问题,如宕机、卡顿、bug等,如何快速反应和解决,具体解决方案
1原创 2023-04-14 09:08:30 · 158 阅读 · 0 评论 -
Arthas
Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,可以方便的定位和诊断 线上程序运行问题。Arthas 官方文档十分详细,详见:https://alibaba.github.io/arthascurl -O https://arthas.aliyun.com/arthas-boot.jarjava -jar arthas-boot.jar选择1,进入监控程序root@N-B2B-API01:/usr/local/arth原创 2022-05-18 13:57:19 · 167 阅读 · 0 评论 -
jvm导出dump日志,分析内存情况
1. 查看内存情况 toptoppid=18426 占用内存比例很高2. 导出dump日志jmap -dump:format=b,file=heap.hprof 18426当前目录:3. 下载到本地,使用MAT打开进行分析设置MAT内存大小:几种图表现形式:内存泄露检测:这里一个名称叫做 king-thread 的线程,持有了超过 99% 的对象,数据被一个 HashMap 所持有。这个就是内存泄漏的点,因为我代码中对线程进行了标识,所以像阿里等公司的编码规范中原创 2021-07-20 16:17:11 · 7152 阅读 · 1 评论 -
OOM导致JVM退出?
static class OOMObject {} // 为快速发生oom,设置堆大小; VM args: -Xms20m -Xmx20m public static void main(String[] args) throws InterruptedException { new Thread(() -> { List<OOMObject> list = new ArrayList<>(); while (true) {原创 2021-04-01 14:34:55 · 446 阅读 · 2 评论 -
ThreadLocal知识点
1. ThreadLocal 和 ThreadLocalMap 是什么?简单来说,ThreadLocal 是一种操作与线程绑定的共享对象的工具,通过ThreadLocal可以将一些对象保存在线程上,实现同线程不同方法之间的对象共享。线程的上下文由 ThreadLocalMap 组成,它是 ThreadLocal 的静态内部类,存储着线程共享对象。一般来说,我们无需显式创建ThreadLocalMap,也无需为装入ThreadLocalMap 对象设 key 值,因为在 set 方法执行时会创建 Thre转载 2020-11-09 11:00:55 · 375 阅读 · 0 评论 -
JVM - MAT进行内存泄漏检测
MATMAT 工具是基于Eclipse 平台开发的,本身是一个Java 程序,是一款很好的内存分析工具,所以如果你的堆快照比较大的话,则需要一台内存比较大的分析机器,并给MAT 本身加大初始内存,这个可以修改安装目录中的MemoryAnalyzer.ini 文件。概要柱状图MAT 中的Incoming/Outgoing References在柱状图中,我们看到,其实它显示的东西跟jmap –histo 非常相似的,也就是类、实例、空间大小。但是MAT 有一个专业的概念,这个可以显示对象的原创 2020-09-01 16:06:25 · 230 阅读 · 0 评论 -
JVM - 线上节点死机应该怎么处理?linux线上问题排查,jvm命令查找
jvm原创 2020-04-24 15:57:04 · 351 阅读 · 0 评论 -
JVM-性能调优
内存溢出内存溢出的原因:程序在申请内存时,没有足够的内存空间。内存溢出的几种方式:1.栈溢出:方法死循环递归调用(StackOverflowError)、不断建立线程(OurOfMemoryError)2.堆溢出:不断创建对象,分配对象大于最大对的大小(OurOfMemoryError)3.直接内存:分配的本地内存大小大于JVM的限制4.方法区溢出:在经常动态生产大量Class的应用中...原创 2020-03-12 11:04:37 · 199 阅读 · 0 评论 -
JVM-双亲委派模型
对于任意一个类,都需要由加载它的类加载器和类本身一同确立其在java虚拟机中的唯一性。启动类加载器:C++语言实现,是虚拟机自身的一部分,另一种就是所有其他类的类加载器,这些加载器由java实现,独立于虚拟机外部,并且全部继承自抽象类java.lang.ClassLoader。扩展类加载器:这个加载器由sun.misc.Launcher$ExtClassLoader实现,它负责加载<...原创 2020-03-11 10:27:25 · 121 阅读 · 0 评论 -
JVM-垃圾回收算法与垃圾回收器
判断对象是否存活1.引用计数法给对象一个引用计数器,当对象加一个引用时计数器加1,引用失效减1,引用为0的对象可被回收。优点:快,方便,实现简单缺点:对象相互引用时(A.instance=B同时B.instance=A)很难判断是否该回收2.可达性分析(Java中使用)“GC Roots”向下搜索,走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有...原创 2020-03-10 19:00:08 · 297 阅读 · 0 评论 -
JVM-对象分配
划分对象两种方式:1.指针碰撞: Java堆内存规整的情况下使用2.空闲列表:Java堆内存不规整的情况下使用JVM中分配对象:本地线程分配缓冲Thread Local Allocation Buffer, TLAB (Eden 1%)栈----堆中预先分配一块很小私有区域。CAS比较和交换,确保原子性问题。对象内存布局在HostSpot虚拟机中,对象在内存中存储布局可以分为3...原创 2020-03-10 17:59:24 · 287 阅读 · 0 评论 -
JVM-内存结构
jdk-jre-jvm 区别jdk包含jre,jre包含jvmJdk是一个合集,包含一些编译工具Jre是(class)Java运行环境,包含一些插件,包含jvmJvm 是最基础的,做翻译的,class翻译成操作系统上的指令(0101)运行时数据区线程私有:程序计数器、虚拟机栈、本地方法栈线程共享:堆、方法区程序计数器(唯一不会OOM的区域):记录指向当前线程正在执行的字节码指令...原创 2020-03-10 17:17:57 · 138 阅读 · 0 评论