2024-04-19 11:51:09 | 我爱编程网
一、JConsole是什么 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。 二、如何启动JConsole 如果是从命令行启动,使 JDK 在 PATH 上,运行 jconsole 即可。 如果从 GUI shell 启动,找到 JDK 安装路径,打开 bin 文件夹,双击 jconsole 。 当分析工具弹出时(取决于正在运行的 Java 版本以及正在运行的 Java 程序数量),可能会出现一个对话框,要求输入一个进程的 URL 来连接,也可能列出许多不同的本地 Java 进程(有时包含 JConsole 进程本身)来连接。如图所示: 想分析那个程序就双击那个进程。 三、如何设置JAVA程序运行时可以被JConsolse连接分析 本地程序(相对于开启JConsole的计算机),无需设置任何参数就可以被本地开启的JConsole连接(Java SE 6开始无需设置,之前还是需要设置运行时参数 -Dcom.sun.management.jmxremote ) 无认证连接 (下面的设置表示:连接的端口为8999、无需认证就可以被连接) Java代码 -Dcom.sun.management.jmxremote.port=8999 \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=8999 \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false
问题现象:
1. 应用一周左右未重启会出现执行批量特别慢的情况,平时600w数据跑完半小时左右,出问题的应用可能要2个小时甚至更长,重启可以恢复正常,不重启第二天可能还会慢,也有可能会恢复。
1. 出问题的机器,应用,交易不固定,同一台机器某个或某几个应用出问题其他应用正常执行不受任何影响,出问题的应用所有交易执行时间拉长,所有的操作都会变慢,但是能正常跑完。
问题分析:
1. 之前怀疑是网络,I/O问题,现在基本可以排除,因为观察网络和磁盘io占用很小
1. 怀疑是由于内存占用太高导致的,然后机器内存剩余80G左右,应用内存占用均正常。机器CPU占用70%以下
1. 分析heapdump和gc,jstack日志没有发现明显的异常,应用也没有任何报错,无解。
1. 对出问题的应用使用jmap -histo:live [pid]命令,应用会恢复正常,目前测试了出问题的几个应用,都有效果,但是目前还不清楚原因。
1. 应用FullGc非常少,一天能有一次就不错了。younggc也还好,高频的时候也就30s左右一次,每次29ms这样。
1. 怀疑内存泄露,但是从dump来看并没有什么异常,出问题的应用堆栈基本都在执行数据库操作,就是慢,而且出问题的应用CPU占用比较高达到90%以上。
分析CPU占用的方法和手段:我爱编程网
1. top命令:可以查看实时的CPU使用情况。
2. ps -ef命令:可以查看进程以及进程中线程的当前CPU使用情况以及属于当前状态的采样数据。
3. jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。
4. pstack:Linux命令。可以查看某个进程的当前线程栈运行情况
分析内存性能的方法和技巧:
1.top命令:可以查看实时的内存使用情况。
2.jmap -histo:live [pid],然后分析具体的对象数目和占用内存大小,从而定位代码。
jmap -dump:live,format=b,file=xxx.xxx [pid],然后利用MAT工具分析是否存在内存泄漏等等。
2024-03-02 02:58:47
2024-01-01 09:58:48
2024-04-13 00:38:12
2024-03-31 15:14:06
2024-03-21 00:22:13
2024-02-10 22:15:59