欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 【JVM】OOM与调优(二)

【JVM】OOM与调优(二)

2024/11/30 14:48:38 来源:https://blog.csdn.net/Cover_sky/article/details/141568853  浏览:    关键词:【JVM】OOM与调优(二)

OOM与调优

6.JVM工具如jps

该命令是纯Java编写的
在这里插入图片描述

-q:只显示Java进程的ID

在这里插入图片描述

-m:输出Java进程的ID + main函数所在类的名字 + 传递给main函数的参数
在这里插入图片描述

-l:输出Java进程的ID+main函数所在类的全限定名(包名+类名)
在这里插入图片描述

-v:输出Java进程的ID+main函数所在类的名称+传递给JVM的参数
应用:可以通过次方式快速查看JVM参数是否设置成功

jps源码的位置

在这里插入图片描述

/openjdk/jdk/src/share/classes/sun/tools/jps

如何识别的Java进程?jps输出的信息全是Java进程的信息,是如何做到的?

Java进程在创建的时候,会生成相应的文件,进程相关的信息会写入该文件中。Windows下默认路径是:
在这里插入图片描述

C:\Users\username\AppData\Local\Temp\hsperfdata_username

Ubuntu环境下,它的路径是

/tmp/hsperfdata_username

在这里插入图片描述

PerfData文件

  • 1.文件创建
    每启动一个Java进程,/tmp/hsperfdata_username就会生成进程号的一个文件,这个文件是一个内存映射文件。有时候不会生成,受参数的影响,
    -XX:-/+UsePerfData默认是开启的,它是通过attach到Java进程中去,它属于寄生在Java进程当中,可以读取Java进程的内存。
    -XX:-/+PerfDisableSharedMem(禁用共享内存)默认是关闭的,即支持内存共享。如果禁用了,依赖于PerfData文件的工具就无法正常进行了
  • 2.文件删除
    正常情况下:默认情况下随Java进程的结束而销毁
    非正常退出:下一次去读目录的时候会检测进程是否存在, 用kill -0 去检测进程是否存活,不存货就会删除该进程号文件,不然就会留下垃圾文件
  • 3.文件更新
    -XX:PerfDataSamplingInterval=50,即内存与PerfData文件的数据延迟为50ms

查看PerfData参数
在这里插入图片描述

7.JVM异常退出

在这里插入图片描述

  • OOM killer
    dmesg -T 日志查看内核日志
  • 堆OOM
    会生成日志,分配内存new的执行流程
  • 元空间OOM
    会生成日志,解析类、类加载器、动态字节码 cglib
  • 直接内存OOM
    unsafe bytbuffer
    都不会生成日志,JVM进程的堆(OS知道)
  • 栈OOM,为什么没有听说过这个地方发生OOM
    开发阶段就会知道栈帧是否会发生OOM了

CPU占用过高如何排查?

  • 1.定位到占用CPU最高的进程
  • 2.定位到目前占用CPU最高的线程ID
top -H -p pid

将线程ID由十进制转换为十六进制

  • 3.定位线程
jstack pid | grep 十六进制线程id -A 30

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com