当前位置: 首页 > news >正文

门头沟网站建设公司赣榆城乡建设局网站

门头沟网站建设公司,赣榆城乡建设局网站,自己注册公司多少钱,做网站新科网站建设视频地址:https://www.bilibili.com/video/BV1Ak4y137oh 学习文章:https://d9bp4nr5ye.feishu.cn/wiki/VQoAwlzrXiLFZekuLIyc1uK5nqc 最近线上频繁的内存告警,同事A通过分析dump文件解决了这个问题,我当然是不会放过这种学习的机…

视频地址:https://www.bilibili.com/video/BV1Ak4y137oh

学习文章:https://d9bp4nr5ye.feishu.cn/wiki/VQoAwlzrXiLFZekuLIyc1uK5nqc


最近线上频繁的内存告警,同事A通过分析dump文件解决了这个问题,我当然是不会放过这种学习的机会。


文章目录

    • 一、分析dump文件
      • 1、下载dump文件
      • 2、查看dump文件
      • 3、分析dump文件
    • 二、扩展:JVM内存结构,回收规则
    • 三、实战

一、分析dump文件


1、下载dump文件

步骤命令描述
找到Java服务jps找到需要观察的Java服务进程。 也可以使用 ps -ef grep java

1. jps 属于JDK提供的命令
2. ps 是Linux提供的命令
生成dump文件jmapjmap -dump:file=/tmp/xdx_dump.bin 1

上面命令的含义就是在 /tmp 目录下生成一个名为 xdx_dump 的文件,格式为 bin,java服务的进程 1
压缩dump文件tar在真实线上生成的 dump 文件都很大,所以我们需要把它压缩成 tar.gz 文件,可以减少6倍以上的大小。

tar -zcvf xdx_dump_one.tar.gz xdx_dump_one.bin

上面命令的含义就是 把当前目录下的xdx_dump_one.bin文件,压缩成 xdx_dump_one.tar.gz 文件

2、查看dump文件


可以通过两种方式获取查看dump文件的软件

  1. 官网下载,可以拿到最新版本。 https://visualvm.github.io/
  2. 在JDK的 home/bin 目录下已经带了这个工具,并且还是中文的。

从服务器上下载压缩后的dump文件,拿到本地后再解压出来,双击打开 visualvm,把解压好的bin文件拖进去。然后你就可以看到堆中的数据信息了。

在这里插入图片描述


3、分析dump文件


在这里插入图片描述


毫无疑问,内存飙升,我们只需要看看当前系统中内存占比最大的是个什么东西,然后想办法干掉它。

在这里插入图片描述


二、扩展:JVM内存结构,回收规则


为了方便理解后面实战的部分,需要准备一点前置知识:JVM内存结构和回收机制。

Hotspot VM将内存划分为不同的三个物理区:新生代、老年代、永久代。其中新生代又被分成Edun区和两个Survivor区。

在这里插入图片描述

描述
新生代大多数对象在这里被创建,其中很多对象的生命周期很短。每次新生代的垃圾回收(又称Minor GC)后只有少量对象存活,所以选用复制算法,只需要少量的复制成本就可以完成回收。

新生代内又分三个区:一个Eden区,两个Survivor区(一般而言),大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到两个Survivor区(中的一个)。当这个Survivor区满时,此区的存活且不满足“晋升”条件的对象将被复制到另外一个Survivor区。对象每经历一次Minor GC,年龄加1,达到“晋升年龄阈值”后,被放到老年代,这个过程也称为“晋升”。显然,“晋升年龄阈值”的大小直接影响着对象在新生代中的停留时间。
老年代在新生代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代,该区域中对象存活率高。老年代的垃圾回收(又称Major GC)通常使用“标记-清理”或“标记-整理”算法。整堆包括新生代和老年代的垃圾回收称为Full GC(HotSpot VM里,除了CMS之外,其它能收集老年代的GC都会同时收集整个GC堆,包括新生代)。
永久代要存放元数据,例如Class、Method的元信息,与垃圾回收要回收的Java对象关系不大。相对于新生代和年老代来说,该区域的划分对垃圾回收影响比较小。

Minor GC 的频率远高于Major GC,所以对象一旦到达老年代,它存活的时间会更长。


三、实战


在我们查看dump文件的时候,发现内存占用前几名(比例很大)都是日志输出的对象。伪代码如下:

List<XdxDTO> list = this.baseMapper.getAllList();
log.info("当前数据为:{}", JSONUtil.toJsonStr(list));

正常来说在方法里面返回的数据都属于局部变量,当方法执行完毕之后就没有引用会被回收。


但使用log输出的时候,它是异步输出的,消费能力不足的时候,就会把任务丢到阻塞队列里面去,如果某个大对象这时候在阻塞队列等待执行,恰好Edun区满了要被回收的时候,日志还没输出相当于还有引用这个数据,就不会被回收,如果系统持续压力过大,经过几轮Minor GC还没用回收,这个对象就会被放老年代,更难以回收了, 从而导致了内存OOM。

http://www.yayakq.cn/news/570464/

相关文章:

  • 专业做家电经销的网站品牌策划公司海报
  • 网页制作与设计实验报告总结哈尔滨网站优化公司
  • 怎么做租号网站松江建设网站
  • 长春哪家网络公司做网站专业食品企业网站建设方案
  • 工艺品网站模板网页设计中文本居中用什么代码
  • 凡科外贸网站建设二手交易网站怎么做
  • 福田网站建设方案服务深圳人才网招聘官方网
  • 完整网站开发教程如何建好一个网站
  • 深圳市网站建设公司两个网站可以做友情链接吗
  • 做网站的不给ftp企业营销型网站应该有哪些内容
  • 龙口网站建设公司果洛wap网站建设哪家好
  • o2o网站建设信息在手机上做网站是什么软件
  • 东阳自适应网站建设浙江省城乡和住房建设厅网站
  • 婚纱摄影网站优化技巧泉州快速优化排名
  • 企业网站推广营销在上阿里云做网站
  • 深圳网站开发兼职国外做爰网站
  • 濮阳高端网站建设如何做网站建设团队建设
  • 尧都区建设厅官方网站网站推广软件ky99
  • 中国白云手机网站建设外网不能访问wordpress
  • 企业网站的建设流程包括网上商店的特点
  • 宜昌网站seo邢台同城
  • 上海制作网站的公司潍坊住房和城乡建设局网站
  • 网站未备案 打不开进入wordpress后
  • 陕西建工第五建设集团有限公司官方网站建筑公司网站怎么设计
  • 找大学生做网站要多少钱衡器行业网站建设模板
  • 做网站需要机吗wordpress 顶 踩 插件
  • pinterest设计网站山东省建设注册管理网站
  • 代做效果图网站好婚庆网站开发目的
  • 网站用花生壳nas做存储做餐饮企业网站的费用
  • 一个网站主机多少钱一年docker wordpress fpm