做销售的 都有什么网站,企业网站建设费用计入哪个科目,网络媒体广告公司,创建网站的工具常用命令 1、jps查看当前 java 进程2、jinfo实时查看和调整 JVM 配置参数3、jstat查看虚拟机统计信息4、jstack查看线程堆栈信息5、jmap查看堆内存的快照信息 JVM 日常调优总结起来就是#xff1a;首先通过 jps 命令查看当前进程#xff0c;然后根据 pid 通过 jinfo 命令查看… 常用命令 1、jps查看当前 java 进程2、jinfo实时查看和调整 JVM 配置参数3、jstat查看虚拟机统计信息4、jstack查看线程堆栈信息5、jmap查看堆内存的快照信息 JVM 日常调优总结起来就是首先通过 jps 命令查看当前进程然后根据 pid 通过 jinfo 命令查看和修改 jvm 参数通过 jstat 命令查看 class 的加载信息以及 GC 信息通过 jstack 命令查看线程堆栈信息通过 jmap 命令查看堆内存信息。 1、jps查看当前 java 进程
jps 是 Java 虚拟机自带的命令行工具用于显示当前运行的所有Java进程及其相关信息包括进程 ID、主类、进程状态等。其基本用法为 jps [options] 其中常用的选项有 -l显示主类的完整路径名。 -p显示进程的当前线程所在的工作进程组。 -s显示进程的启动时间。 -v显示进程的虚拟机信息如JVM版本、GC类型等。 要查看当前所有正在运行的Java进程及其相关信息可以输入命令jps要查看主类的完整路径名可以输入命令jps -l要查看进程的启动命令行参数字符串可以输入命令jps -m需要注意的是由于 jps 命令直接读取 Java 虚拟机的内部数据因此需要确保当前用户具有足够的权限才能使用。
2、jinfo实时查看和调整 JVM 配置参数
jinfo 是 Java 虚拟机自带的命令行工具用于查看和调整Java虚拟机的配置参数和运行状态。它可以用来检查Java虚拟机的内存使用情况、垃圾回收情况、类加载情况等。要使用 jinfo 命令您可以在 Java 程序运行的终端或命令行界面中输入以下命令 jinfo pid [options] 其中pid是Java进程的进程ID可以通过jps命令查看 例如要查看Java虚拟机的内存使用情况可以使用以下命令 jinfo pid -dump:live 这将输出Java虚拟机的运行状态信息包括内存使用情况、线程信息等。 要查看Java虚拟机的堆区信息可以使用以下命令 jinfo pid -printHeapRegions 这将输出Java虚拟机的堆区信息包括堆区的使用情况、空闲情况等。 jinfo 使用实例 使用 jps 查看当前 java 进程 D:jps 10232 Jps 20264 TestJvm 1668 使用 jinfo 实时查看 JVM 参数使用方法jinfo -flag D:jinfo -flag MaxHeapSize 16684 -XX:MaxHeapSize1073741824 D:jinfo -flag MaxHeapSize 20264 -XX:MaxHeapSize4261412864 D:jinfo -flag UseG1GC 20264 -XX:-UseG1GC D:jinfo -flag UseConcMarkSweepGC 20264 -XX:-UseConcMarkSweepGC D:jinfo -flag UseParallelGC 20264 -XX:UseParallelGC 使用 jinfo 可以在不重启虚拟机的情况下动态的修改 jvm 的参数只有被标记为 {manageable}的参数可以被实时修改尤其在线上的环境特别有用。 Boolean 类型使用方法 jinfo -flag [|-]
需要指定参数值的类型使用方法 jinfo -flag value 1、查看进程 16116 是否开启 GC 打印 输出 -XX:-PrintGC 表示没有开启 D:jinfo -flag PrintGC 16116 -XX:-PrintGC 2、使用 jinfo 命令修改进程 16116 开启 GC 打印 D:jinfo -flag PrintGC 16116 3、 修改后再次查看进程 16116 是否开启 GC 打印 输出 -XX:PrintGC 表示开启 D:jinfo -flag PrintGC 16116 -XX:PrintGC 使用 jinfo 查看修改过值的参数使用方法jinfo -flags
3、jstat查看虚拟机统计信息
jstat 是 Java 虚拟机自带的命令行工具用于查看 Java 虚拟机的运行状态和性能统计信息。它可以用来监测 Java 虚拟机的内存使用情况、垃圾回收情况、类加载情况等。ID可以通过jps命令来获取。interval是两次统计之间的时间间隔单位为毫秒count是要统计的次数。 官网链接https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html#BEHHGFAE
jstat 使用方法jstat 间隔时间 统计次数 例如要查看类加载信息可以使用以下命令 jstat -class pid 这将输出Java虚拟机的类加载信息包括已加载的类数、已卸载的类数、当前正在加载的类等。 使用 jstat 查看类加载器的统计信息默认的间隔时间是毫秒如下 例如要查看Java虚拟机的内存使用情况可以使用以下命令 jstat -gcutil pid 这将输出Java虚拟机的垃圾回收器的统计信息包括堆区的使用情况、空闲情况等。 使用 jstat 查看垃圾收集统计信息的摘要如下
4、jstack查看线程堆栈信息
官网链接https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html#BABGJDIF
使用 jstack 方便排查线程问题使用方法jstack pid 1、下面看一个经典的死锁问题
package jvm;import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class LockDemo {// 定义锁对象static Lock LOCK1 new ReentrantLock();static Lock LOCK2 new ReentrantLock();public static void main(String[] args) throws Exception {new Thread(new DeadLock(true), 线程1).start();Thread.sleep(1);new Thread(new DeadLock(false), 线程2).start();}
}//模拟死锁
class DeadLock implements Runnable {private boolean flag;public void run() {if (flag) {while (true) {synchronized (LockDemo.LOCK1) {System.out.println(Thread.currentThread().getName() 获得LOCK1锁);synchronized (LockDemo.LOCK2) {System.out.println(Thread.currentThread().getName() 获得LOCK2锁);}}}} else {while (true) {synchronized (LockDemo.LOCK2) {System.out.println(Thread.currentThread().getName() 获得LOCK2锁---);synchronized (LockDemo.LOCK1) {System.out.println(Thread.currentThread().getName() 获得LOCK1锁---);}}}}}DeadLock(boolean flag) {this.flag flag;}
} 我们通过 jstack 命令查看一下线程的堆栈信息 D:jps 5288 Jps 7896 LockDemo 16684 D:jstack 7896 在堆栈信息的最后可以发现死锁的产生如下 2、利用 jstack 定位某个进程中 CPU 占用高的线程问题 步骤一使用 top 命令查看 CPU 占用高的进程假设找到 %CPU 占比高的进程 PID 为 17896。小技巧top 显示界面输入大写 P结果按 CPU 占用降序排序输入大写 M结果按内存占用降序排序。【大写 P 可以在 caps lock 状态输入 p或者按 Shiftp】
步骤二使用 top -H -p 命令查看某个进程内部 CPU 占用高的线程 top -H -p 17896假设找到 %CPU 占比高的线程 PID 为 17935
步骤三使用 printf “%x\n” 命令转换线程 PID 为16进制printf “%x\n” 17935 16进制结果为 460F
步骤四使用 jstack 命令查看 CPU 占用高的线程信息jstack 17896 | grep 460F -A 50
5、jmap查看堆内存的快照信息
使用 jmap -heap pid 查看堆内存信息启动程序时配置 JVM 参数-Xms30M -Xmx30M 1、dump 出堆内存信息
手动 dump 使用方法-dump:formatb,filefilename
注意-dump:formatb,是固定格式如果设置 dump 文件到某个文件夹下则该文件夹必须存在 D:jmap -dump:formatb,filed:/dump/heap.hprof 11092 Dumping heap to D:\dump\heap.hprof … Heap dump file created 生成的 heap.hprof 文件可以结合工具来分析后面介绍。 自动 dump 使用方法启动程序时配置以下的 JVM 参数当内存溢出时会自动在指定的目录生成 dump 文件这个一般在生产环境很有用。 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPathd:/dump/heap.hprof 2、演示 OOM 时自动 dump
package jvm;import java.util.ArrayList;
import java.util.List;//测试代码
public class TestHeap {public static void main(String[] args) {ListHeap list new ArrayListHeap();while (true) {list.add(new Heap());}}
}class Heap {String HeapName Java Heap 测试;
}由于生成内存快照文件会占用大量的磁盘空间因此在使用时需要注意磁盘空间的的使用情况。
JVM 调优工具