栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

JDK自带的命令行工具

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDK自带的命令行工具

文章目录
  • 前言
  • 一、jps-查看虚拟机进程状况
  • 二、jstat-查看虚拟机统计信息的监控工具
    • 1.使用格式
    • 2.使用案例
    • 三、jinfo-动态修改参数值
  • 四、jmap-将java堆内存做快照
  • 1、使用方式
    • 2、查看堆的分布情况
    • 3、查看堆里面占用内存最多的对象
    • 4、手动导出Dump文件
    • 5、自动导出dump文件
  • 五、jstack-堆栈跟着工具-线程快照


前言

主要是存放在我们的JDK安装目录下面的bin目录,包含了命令行和图形化的工具


一、jps-查看虚拟机进程状况

JVM Process Status tool
类似于linux的ps命令
1、可以列出正在运行的虚拟机进程,并显示虚拟机执行的主类名称以及进行的本地虚拟机唯一id
2、这个命令的结果作为其他命令的基础,因为需要通过id来确定监控的是哪个虚拟机进程

-q #只显示进程号
-m #显示传递给main方法的参数
-l #显示完整的类路径名
-v #显示传递给jvm的参数

jps -l
17824 org.jetbrains.jps.cmdline.Launcher
15588 org.jetbrains.idea.maven.server.RemoteMavenServer
16728 sun.tools.jps.Jps
11052
12444 com.classloader.ClassLoaderTest
二、jstat-查看虚拟机统计信息的监控工具 1.使用格式

JVM statistics Monitoring tool
查看虚拟机进程中的类加载,内存,垃圾收集,即时编译等运行时的数据

C:Usersdong>jstat -help
Usage: jstat -help|-options
       jstat -
2.使用案例

代码如下(示例):

package com.tool;

import java.util.concurrent.*;


public class ToolTest {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("hello");
        while (true){
            byte[] bs = new byte[1024*1024];
            TimeUnit.SECONDS.sleep(1);
        }
    }
}

可以通过程序的运行来观察,我们的内部的运转过程
对象先到Eden去,然后当Eden区满了之后,会触发一次YoungGC
同时会将Eden区和Surivor区的存活对象移动到另一个Survivor区

三、jinfo-动态修改参数值

1、查看当前进程的参数设置
2、在不重启进程的情况下,动态修改当前进程的参数值

#查看
jinfo -flag 参数 进程号
jinfo -flag PrintGC 12988
#-XX:-PrintGC 表示未开启日志打印
#动态修改,开启打印日志
jinfo -flag +PrintGC 12988
#动态修改,关闭打印日志
jinfo -flag -PrintGC 12988
# 
jinfo -flag +PrintGCDetails 12988

注意!只是开放了部分参数,允许被动态修改

四、jmap-将java堆内存做快照

Memory Map for Java
通过这个命令来将堆内存转储成快照文件,比如我们说dump文件或headdump文件

1、使用方式
jmap
Usage:
    jmap [option] 
        (to connect to running process)
    jmap [option] 
        (to connect to a core file)
    jmap [option] [server_id@]
        (to connect to remote debug server)

where 
2、查看堆的分布情况
jmap -heap pid

3、查看堆里面占用内存最多的对象
jmap -histo:live 进程号 #查看存活的对象
jmap -histo 进程号 #查看所有的对象(存活+垃圾)
#linux
jmap -histo 进程号 | head 10 #查看排名前10的记录
4、手动导出Dump文件
#dump文件是堆内存的映射文件
#所以内存越大,dump文件就会越大
jmap -dump:live,format=b,file=dump.bin 进程号

5、自动导出dump文件
package com.zengzhi.tool;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class ToolTest {
    //静态变量可以作为CGRoots
    //慎用
    private static List list = new ArrayList<>();
    
    public static void main(String[] args) throws InterruptedException {
        System.out.println("hello");
        while (true){
            //为什么到现在还未发生内存溢出?
            byte[] bs = new byte[100*1024*1024];
            //
            list.add(bs);
            TimeUnit.SECONDS.sleep(1);
        }
    }
}

希望当虚拟机发生OOM异常之后,可以将堆内存的信息保存到dump文件中
设置参数:-XX:+HeapDumpOnOutOfMemoryError
生产环境建议开启该参数

五、jstack-堆栈跟着工具-线程快照

Stack Trace for Java
用于生成虚拟机当前的线程快照,一般称为threaddump文件
目的:
线程间发生死锁,死循环,请求外部资源被长期挂起,导致线程长时间挂起停顿

jstack [-l]  #-l 显示线程相关的信息,包括锁的信息

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/859276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号