![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
一、JVM调优
文章平均质量分 62
lovesman
这个作者很懒,什么都没留下…
展开
-
十、JVM调优实战——ES集群服务不稳定
1、问题背景线上环境有3台8G内存的服务器搭建的ES集群系统。ES采用CMS垃圾回收器。2、问题现象(1)ES查询服务偶尔会出现超时现象,日志中有“node of configured nodes were available”;(2)一段时间后,ES部分节点会挂掉,整个ES集群的状态由绿色变成黄色;(3)重启后,ES恢复正常,运行一段时间后会出现(2)的现象。3、问题分析(1)ES集群提供的查询服务,非常消耗内存,所以首先想到的就是8G内存无法支撑我们系统千万级别的数据查询。(2)登陆系统原创 2021-08-03 14:16:09 · 1076 阅读 · 0 评论 -
九、大流量电商系统JVM调优案例
一、大流量电商系统模型二、JVM参数设置和JVM内存模型1、JVM参数设置-Xms 3072M -Xmx3072M -Xss1M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M2、JVM内存模型内存模型图说明内存大小设置为3G,默认老年代和年轻代的大小为2:1;所以old区域=2G,年轻代区域=1G;年轻代中:eden:S0=8:1;得出eden区域=800M,S0=S1=100M;垃圾回收过程分析1、new出来的对象先存入eden区原创 2020-07-20 23:51:23 · 493 阅读 · 0 评论 -
八、JVM调优实战——arthas使用
一、下载arthascurl -O https://alibaba.github.io/arthas/arthas-boot.jar二、使用arthas1、启动。 java -jar arthas-boot.jar2、选择进程序号,进入进程信息dashboard可以查看整个进程的运行情况,线程、内存和GC等信息thread 可以查看线程详细情况thread加上线程ID,可以查看线程堆栈thread -b,可以查看线程死锁jad加上类的全限定名,可以反编译ognl命令可以查看线原创 2020-07-28 00:02:52 · 631 阅读 · 0 评论 -
七、JVM调优实战——基本命令使用
一、JPS查看进程id二、Jmap 可以查看内存信息,实例个数以及占用内存1、jmap -histo 7256 > ./log.txt查看内存信息,存入log.txt中。instances:对象实例数;bytes:占用的内存大小;class name:类名2、jmap -heap id 查看进程的堆信息macbook不支持jdk1.8下的该命令。3、jamp -dump:format=b,file=test.hprof id生产环境中设置堆溢出时,自动生成dump文件-XX原创 2020-07-27 23:36:56 · 369 阅读 · 0 评论 -
六、G1垃圾收集器
G1垃圾处理器使用范围:服务器拥有多个服务器,大内存;G1:将JVM堆划分为大小相等的region,最多有2048个reqion,region的角色是变化;可能显示是Eden区域,一次垃圾回收之后就是Old区域了。年轻代默认占比5%,由参数-XX:G1NewSizePercent指定;年轻代最大占比不超过60%,由参数-XX:G1MaxNewSizePercent指定;G1的特殊之处之一是对大对象的处理:大对象就是上图中显示的H区域,H区域判断条件是一个对象的大小>region的一半。举原创 2020-06-30 17:47:39 · 502 阅读 · 1 评论 -
五、CMS垃圾回收器——三色标记算法
CMS(current Mark Sweep):顾名思义,这是一个并发,标记、清除的垃圾回收器,适用于老年代垃圾回收。在jdk1.8中和新生代的ParNew垃圾回收器搭配使用。CMS垃圾回收器主要过程整个过程可以大致分为五个步骤,其中只有初试标记和重新标记需要STW,其他步骤都可以并发执行,可以看出这是一款追求最小停顿时间的垃圾回收器。初始标记标记GCRoot可以直接引用的对象,不再进行深层次扫描,所以速度很快,STW时间很短。并发标记在初始标记的基础上对整个堆中的对象进行逐层扫描,耗时较长原创 2020-07-04 23:15:11 · 1824 阅读 · 0 评论 -
四、JVM垃圾收集算法和垃圾收集器
在说明垃圾回收器之前,我们先快速的浏览一下垃圾回收算法。1、标记-清除算法标记出需要回收的对象,然后清除该对象。不足:(1)回收效率比较低(2)产生大量的不连续的内存碎片2、复制算法解决标记-清除算法效率低的问题,适合在新生代使用3、标记-整理算法垃圾收集器1、Serial收集器-新生代单线程收集器,进行垃圾回收时,必须暂停其他的所有线程,直到它收集结束。2、ParNew收集...原创 2019-12-16 22:50:36 · 381 阅读 · 0 评论 -
三、JVM内存模型
JVM内存总共分为5个部分,下面我们就从这5个部分分别进行介绍:1、程序计数器最小的一块内存区域,它是线程独享的,指向当前线程执行的字节码;字节码解释器工作时,通过改变程序计数器的值来取出下一条需要执行的命令。2、堆(下一篇写写垃圾回收器)是最大的一块内存区域,它是所有线程共享的;几乎所有的对象实例都存放在该区域。我们平时在java中经常提及的jvm垃圾回收,主要涉及的就是这块的内存;因...原创 2019-12-15 22:16:44 · 403 阅读 · 0 评论 -
二、JVM——对象内存分配机制
对象内存分配流程图对象栈上分配JVM通过逃逸分析,发现对象的作用域就在某个方法内,不会被外部访问,就把对象通过标量替换之后存储在栈上。**逃逸分析:**就是分析对象的作用域,是否能够在一个方法范围内;**标量替换:**通过分析确定对象不会逃逸之后,JVM不会创建该对象,而是用该对象的成员变量等价替代该对象。栈上分配依赖逃逸分析和标量替换。package com.ysy.JVM对象创建和内存分配机制深度剖析;/** * @author shanyangyang * @date 2020/原创 2020-07-23 23:31:47 · 389 阅读 · 0 评论 -
一、JVM类加载机制——自定义类加载器
一、java命令执行代码大致流程1、windows调用C++程序实现java虚拟机;2、创建一个引导类加载器(BootstrapClassloader);3、引导类加载器创建JVM启动器launcher,由lunacher类创建其他类加载器(扩展类加载器和应用类加载器)二、类加载的大致过程1、加载,根据path找到class文件;2、验证,校验class内容是否符合规范;3、准备,静态变量赋默认值,常量直接复赋值;4、解析,将符号引用转换为直接引用;符号引用可以理解为“public stat原创 2020-07-02 21:49:04 · 1716 阅读 · 0 评论