在编写项目项目时难免会遇到oom异常(Out of Memory),线上linux排查可以查看这篇文章
linux上项目cpu非常高排查
本地和远程都能使用到了JMX,JMX(Java Management Extensions)是Java平台的一项管理和监控技术,
1. 本地idea连接jmx
上图这输入VM参数。复制下面的参数,
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8849 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=localhost
这里是为了解释这些参数的意思,不要复制使用。
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8849
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=localhost
-
-Dcom.sun.management.jmxremote
:启用JMX远程管理功能。该参数告诉JVM启用JMX代理以便远程监控和管理。 -
-Dcom.sun.management.jmxremote.port=8849
:指定JMX远程连接的端口号。在这个例子中,JMX远程连接的端口号为8849。当通过JMX工具连接到JVM时,需要指定该端口号。 -
-Dcom.sun.management.jmxremote.authenticate=false
:设置JMX远程连接时是否需要进行身份验证。在这个例子中,身份验证被禁用(false),即不需要提供用户名和密码进行身份验证。 -
-Dcom.sun.management.jmxremote.ssl=false
:设置JMX远程连接是否启用SSL加密。在这个例子中,SSL加密被禁用(false),即JMX连接不会使用SSL加密。 -
-Djava.rmi.server.hostname=localhost
:指定RMI服务的主机名。在这个例子中,RMI服务的主机名被设置为localhost。这个参数用于确保JMX连接可以正确地建立,通信的时候使用的是正确的IP地址或主机名。
设置好之后就启动项目!
设置好之后就启动项目!
找到jdk自带的工具
在jdk下的bin目录中。
填写端口就点确定。
名称是有包名组成
进去之后能看到他堆,cpu,线程等数据的情况。
2.linux上导出快照
使用 jps
命令来列出当前系统中所有Java进程及其对应的进程PID
使用jmap
命令导出Heap dump文件。假设你要导出的Java进程的PID为2976,可以使用以下命令:
jmap -dump:format=b,file=java_heap_dump.hprof 2976
他就会在当前目录生成java_heap_dump.hprof文件,这时就要下载这个文件
下载文件的方法有很多种,如果是宝塔面板或者FinalShell就能直接下载,否则就要去下载ftp服务
3.使用hprof文件
打开本地jdk文件中的bin文件夹,下面有个jvisualvm.exe
点击文件然后点装入
类型选择堆这个。
点击类,能看占用情况。点进去能看到具体实例。看到为什么会占用这么多实例,导致的OOM