运维必须知道的JVM知识
文章平均质量分 85
富士康质检员张全蛋
人生实难,唯有自渡。只有接受了真实现的现状和真实的自己,调整好心态,才能脚踏实地的活着,然后去发现角落处的那些惊喜和美好,去相信一切苦难困境都会过去!“即使身处阴沟,也要记得仰望星空”。
展开
-
JVM 如何获取当前容器的资源限制?
结合这个日志和代码,我们也可以看到如何获取容器配额,首先从 /proc/self/mounts 中读取对应的资源的 mount 位置,比如 cpu 就是在 / sys/fs/cgroup/cpu,cpuacct:。一算就知道物理机器有 56 个核心(8+(56-8)*5/8=38),然后使用 +PrintFlagsFinal 看下参数:。运行同样的程序:。另外,jdk 8u191 引入了 PrintContainerInfo 参数:。原创 2024-09-09 11:14:42 · 1538 阅读 · 0 评论 -
JVM 堆内存结构 年轻代 老年代
在新生代中经历了多次(具体看虚拟机配置的阀值)GC后仍然存活下来的对象会进入老年代中。老年代中的对象生命周期较长,存活率比较高,在老年代中进行GC的频率相对而言较低,而且回收的速度也比较慢。旧的一代内存包含那些经过许多轮小型 GC 后仍然存活的对象通常,垃圾收集是在老年代内存满时执行的。老年代垃圾收集称为 主GC(Major GC),通常需要更长的时间。大对象直接进入老年代(大对象是指需要大量连续内存空间的对象)。原创 2024-07-04 20:57:07 · 2028 阅读 · 0 评论 -
JVM 垃圾回收的几种类型 Minor GC、Major GC、Young GC、Old GC、Full GC、Stop-The-World
等。但这些 GC 术语到底指的是什么,它们之间的区别到底是什么?今天我们就来详细说说。原创 2024-07-15 13:59:32 · 2533 阅读 · 0 评论 -
JVM 堆内存分配过程
JVM 在进行 GC 时,并非每次都对堆内存(新生代、老年代;方法区)区域一起回收的,大部分时候回收的都是指新生代。针对 HotSpot VM 的实现,它里面的 GC 按照回收区域又分为两大类:部分收集(Partial GC),整堆收集(Full GC)部分收集:不是完整收集整个 Java 堆的垃圾收集。其中又分为:新生代收集(Minor GC/Young GC):只是新生代的垃圾收集老年代收集(Major GC/Old GC):只是老年代的垃圾收集。原创 2024-07-08 11:23:34 · 2262 阅读 · 0 评论 -
JVM 调优参数
XX:TargetSurvivorRatio表示,当经历Minor GC后,survivor空间占有量(百分比)超过它的时候,就会压缩进入老年代(当然,如果survivor空间不够,则直接进入老年代)。而新生代是用来存放新创建的对象,大小是随着堆大小增大和减少而有相应的变化,默认值是保持堆大小的十五分之一,-Xmn参数就是设置新生代的大小,也可以通过-XX:NewRatio来设置新生代与年老代的比例,java 官方推荐配置为3:8。所以如果设置新生代大小的调整,则需要严格的测试调整。在jdk5以上的版本,原创 2024-07-17 09:19:22 · 2408 阅读 · 0 评论 -
JVM 性能测试分析工具: jps、jstack、jmap、jhat、jstat、hprof 使用详解
今天这篇文章,我们来一起聊聊在做性能测试常用到的性能分析工具。这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖引玉之用。原创 2024-07-31 17:03:04 · 2389 阅读 · 0 评论 -
Java JVM内存分析工具 jmap
jmap(Java Virtual Machine Memory Map)是JDK提供的一个可以生成Java虚拟机的堆转储快照dump文件的命令行工具。除此以外,jmap命令还可以查看finalize执行队列、Java堆和方法区的详细信息,比如空间使用率、当前使用的什么垃圾回收器、分代情况等等。参数:-dump 生成程序的内存转储快照,用法:-dump: [live,] format = b, file = {fileName}原创 2024-07-29 09:28:08 · 4624 阅读 · 0 评论 -
java 性能分析工具jstat讲解
例如,你可以看到在第一次采样时,survivor space 1的使用率是100%,eden space的使用率是76.5%,old space的使用率是68.4%,metaspace的使用率是96.7%,compressed class space的使用率是89.2%。需要注意的是,jstat提供的是实时的性能数据,每次运行jstat时,都会获取最新的数据。一般来说,如果某种类型的垃圾回收发生的次数过多或者花费的时间过长,就说明该类型的垃圾回收可能存在问题,需要优化。原创 2024-08-01 16:53:38 · 2851 阅读 · 0 评论 -
Java内存分析工具MAT(Memory Analyzer Tool)的介绍与使用
我们排查内存泄露问题可以主要看app_Leak_Suspects.zip 这个压缩包下的内容。原创 2024-07-30 09:07:27 · 1885 阅读 · 0 评论 -
linux 安装MAT(MemoryAnalyzerTool),并且分析java dump的方法
当我们的java进程出现异常的时候,我们第一件想做的事情是什么呢?应该就是要分析java的内存了。假如说,我们已经有了一个java内存的dump文件,有哪些的方法,可以对这个导出的dump文件进行分析呢?比如,jhat,mat··· ····但是,其中最能够查明问题的,恐怕就是MAT这个工具了,那么在接下来的部分中,我们就来看看如何在linux环境中,安装、配置mat,并且用这个工具来分析dump文件······原创 2024-08-21 16:16:10 · 2228 阅读 · 0 评论 -
Java程序CPU持续飙高,如何排查?
之后使用jstack定位有问题代码所在的行。jstack后面接上进程的pid,这样就通过jstack跟踪堆栈,通过grep从堆栈中获取相应的信息。要定位这个java进程当中使用cpu最高的线程。使用top -Hp java进程PID。拿到线程的pid之后,将其转化为16进制。这样可以定位在哪个文件,第几行代码。原创 2024-07-18 17:05:40 · 2081 阅读 · 0 评论 -
JVM参数 GC线程数ParallelGCThreads合理性设置
JVM启动参数中很多与线程、内存相关。在生产实践中,对这些参数随意设置或者采用默认值可能会有一些风险,特别是在JDK低版本的容器下,可能出现容器CPU过高,GC频繁等。文章列出了这些参数设置方法,并给出常用容器规格的推荐设置。原创 2024-08-21 17:37:16 · 1937 阅读 · 0 评论 -
Prometheus 监控 Java 应用 JMX Exporter
Java Management Extensions,JMX 是管理 Java 的一种扩展框架,JMX Exporter 基于此框架读取 JVM 的运行时状态。JMX Exporter 利用 Java 的 JMX 机制来读取 JVM 运行时的监控数据,然后将其转换为 Prometheus 可辨识的 metrics 格式,以便让 Prometheus 对其进行监控采集。JMX Exporter 提供启动独立进程及JVM 进程内启动(in-process)两种方式暴露 JVM 监控指标:1.原创 2024-07-17 16:13:56 · 3086 阅读 · 0 评论