百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Java常用的性能调优的命令有哪些?

gudong366 2025-06-05 15:52 18 浏览

jps命令

JPS(Java Process Status Tool),Java版本的PS命令,主要是用来查看Java进程相关信息的,如果你需要再服务器上查找Java相关进程可以使用jps命令来查找。如果直接使用Linux的ps命令则还需要配合grep命令来查找Java进程信息。

jps [options] [hostid]

其中options是操作参数

  • -l:表示显示进程ID以及主类名的路径
  • -q:表示显示进程ID
  • -m:显示进程ID以及在启动的时候传入到主函数中的参数信息
  • -v:显示进程ID以及在启动的时候传递的JVM的启动参数。

hostid 表示的对应的服务器ID可以是本机,如果是本机的话可以省略,也可以是相互连通的其他服务器的IP。

当然这些命令参数也可以组合使用如下所示。

[root@localhost ~]# jps -l
27681 swly-api-0.0.1-8081.jar
4789 code-admin.jar
4263 code-admin.jar
397 com.qinhailin.common.config.MainConfig
28317 sun.tools.jps.Jps

jinfo命令

jinfo命令是用来查看JVM参数的命令,也可以用来动态的去修改一些JVM的参数。其用法如下所示

jinfo [option] <pid>

option参数如下

  • no options 可以输出系统的所有系统参数以及使用到的属性
  • -flag:可以打印出指定的参数信息
  • -flag:[+|-] 可以通过这种方式打开或者是关闭某些参数的使用。
  • -flag= :可以使用这种方式来设置参数
  • -flags 打印所有的虚拟机参数以及应用参数
  • -sysprops :打印系统配置参数

查看所有的系统参数

[root@localhost ~]# jinfo 28712

查看所有虚拟机参数

[root@localhost ~]# jinfo -flags 28712
Attaching to process ID 28712, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.291-b10
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=130023424 -XX:MaxHeapSize=2051014656 -XX:MaxNewSize=683671552 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=42991616 -XX:OldSize=87031808 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC 
Command line:  
[root@localhost ~]# 

当然也可以通过如下的这种方式来查看选定的参数

[root@localhost ~]# jinfo -flag PrintGC 28869
-XX:-PrintGC
[root@localhost ~]# 

jstat命令

jstat命令是在JVM调优的时候,使用较多的命令,它主要是用来查看JVM的运行状态信息,包括内存、垃圾回收等信息。使用命令如下,其中VMID是虚拟机的进程ID,interval 表示打印间隔时间,count表示打印次数。

jstat [option] VMID [interval] [count]

option参数说明,也可以通过jstat -help 命令查看帮助文档

  • -class 这个参数主要是对于类加载的信息的统计,包括已经加载、未加载、加载大小加载时间等信息的统计
  • -compiler HotSpt JIT编译器行为进行统计,包时间,大小以及属性方法等信息
  • -gc 垃圾回收堆的行为,包括统计s1/s2的垃圾收集情况,新生代老年代垃圾回收情况等等。
  • -gccapacity 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计
  • -gcutil 垃圾回收统计概述,包括s1、s2、新生代、老年代信息等。
  • -gccause 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因
  • -gcnew 新生代行为统计
  • -gcnewcapacity 新生代与其相应的内存空间的统计
  • -gcold 年老代和永生代行为统计
  • -gcoldcapacity 年老代行为统计
  • -printcompilation HotSpot编译方法统计

命令使用情况如下所示

[root@localhost ~]# jstat -gcutil 28869 1000 3
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00   0.00  47.48  23.89  95.28  93.17     12    0.147     3    0.279    0.426
  0.00   0.00  47.48  23.89  95.28  93.17     12    0.147     3    0.279    0.426
  0.00   0.00  47.48  23.89  95.28  93.17     12    0.147     3    0.279    0.426
[root@localhost ~]# 

关于这些参数可以参考JVM内存模型来理解。

jstack命令

jstack命令是用来查看JVM线程的快照的命令,因为线程在堆栈中的信息是动态的所以只能保存在某一时间的快照来对其进行分析。使用jstack就可以实现这个功能,并且可以分析出线程卡顿,执行不流畅的原因,例如出现了死锁、死循环等操作信息。当然jstack还可以用来查看应用程序崩溃之后所产生的信息文件。

命令如下

jstack [option]

使用参数如下所示

[root@localhost ~]# jstack
Usage:
    jstack [-l] <pid>
        (to connect to running process)
    jstack -F [-m] [-l] <pid>
        (to connect to a hung process)
    jstack [-m] [-l] <executable> <core>
        (to connect to a core file)
    jstack [-m] [-l] [server_id@]<remote server IP or hostname>
        (to connect to a remote debug server)

Options:
    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)
    -m  to print both java and native frames (mixed mode)
    -l  long listing. Prints additional information about locks
    -h or -help to print this help message
[root@localhost ~]# 

例如可以使用如下的命令来查看堆栈信息

[root@localhost ~]# jstack -l 28869

jmap命令

jmap命令可以生成JVM的运行的dump文件,用来查看堆内存对象信息、查看类加载信息以及finalizer的队列信息等等。

命令如下所示

[root@localhost ~]# jmap
Usage:
    jmap [option] <pid>
        (to connect to running process)
    jmap [option] <executable <core>
        (to connect to a core file)
    jmap [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    <none>               to print same info as Solaris pmap
    -heap                to print java heap summary
    -histo[:live]        to print histogram of java object heap; if the "live"
                         suboption is specified, only count live objects
    -clstats             to print class loader statistics
    -finalizerinfo       to print information on objects awaiting finalization
    -dump:<dump-options> to dump java heap in hprof binary format
                         dump-options:
                           live         dump only live objects; if not specified,
                                        all objects in the heap are dumped.
                           format=b     binary format
                           file=<file>  dump heap to <file>
                         Example: jmap -dump:live,format=b,file=heap.bin <pid>
    -F                   force. Use with -dump:<dump-options> <pid> or -histo
                         to force a heap dump or histogram when <pid> does not
                         respond. The "live" suboption is not supported
                         in this mode.
    -h | -help           to print this help message
    -J<flag>             to pass <flag> directly to the runtime system
[root@localhost ~]# 

jhat命令

jhat命令用来分析通过jmap命令生成的dump文件,而且jhat命令内置了应用服务器,通过网页也可以查看到dump中的信息,一般情况下jhat就是用来分析离线情况下的dump文件。

使用命令如下

[root@localhost ~]# jhat
ERROR: No arguments supplied
Usage:  jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>

	-J<flag>          Pass <flag> directly to the runtime system. For
			  example, -J-mx512m to use a maximum heap size of 512MB
	-stack false:     Turn off tracking object allocation call stack.
	-refs false:      Turn off tracking of references to objects
	-port <port>:     Set the port for the HTTP server.  Defaults to 7000
	-exclude <file>:  Specify a file that lists data members that should
			  be excluded from the reachableFrom query.
	-baseline <file>: Specify a baseline object dump.  Objects in
			  both heap dumps with the same ID and same class will
			  be marked as not being "new".
	-debug <int>:     Set debug level.
			    0:  No debug output
			    1:  Debug hprof file parsing
			    2:  Debug hprof file parsing, no server
	-version          Report version number
	-h|-help          Print this help and exit
	<file>            The file to read

For a dump file that contains multiple heap dumps,
you may specify which dump in the file
by appending "#<number>" to the file name, i.e. "foo.hprof#3".

All boolean options default to "true"
[root@localhost ~]# 

总结

上面我们介绍了在JVM性能调优的时候常用的一些Java命令。希望对大家能有所帮助。

相关推荐

梦幻诛仙12职业1亿元宝版本架设教程(包含资源下载)

架设教程:1;上传脚本zx到bin文件夹,给权限chmod-R777/bin2;输入zx安装宝塔面板输入对应序号,中途输入Y继续3;安装好之后,会给个宝塔地址及账号密码,复制地址...

Java零基础入门,科普Java你应该了解什么

最近很多人问我想学Java但是一点基础没有,网上看了一堆学习线路图还是无从下手。今天耗时3小时整理了一套保姆级的Java入门教程,建议收藏按照线路图一点点学习。一、Java的概况Java是1995年6...

01.Java发展历史(java发展历史简要)

1.Java发展历史Java由SunMicrosystems公司(现为Oracle公司)的JamesGosling及其团队在1991年开发,最初命名为"Oak",后改名为"...

Ubuntu16.04.1安装Java8(ubuntu终端安装java)

上篇文章讲解了怎么在Windows下安装Java8《Windows10安装Java8》,这里讲解下怎么在Linux下安装Java。由于之前已经安装了Ubuntu16.04.1《VmwareWorkst...

性能测试能力提升-JVM GC监控和优化

一、背景接着上一篇的知识:性能测试能力提升-JVMGC原理,本篇文章,我们将主要介绍JVMGC监控和优化相关的知识:命令行方式监控GC图形化方式监控GC什么时候需要开始GC优化?GC优化的目的GC...

Spring Boot Jar 包秒变 Docker 镜像实现多环境部署

你是否在互联网大厂后端开发工作中,遇到过这样的困扰?当完成一个SpringBoot项目开发,准备将Jar包部署到不同环境时,却发现各个环境依赖不同、配置复杂,部署过程繁琐又容易出错,不仅耗费...

「JDK 11」关于 Java 模块系统,看这一篇就够了

继2014年3月Java8发布之后,时隔4年,2018年9月,Java11如期发布,其间间隔了Java9和Java10两个非LTS(LongTermSupp...

对Java学习的10条建议(对java的认识和理解)

不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...

JAVA入门教程-第1章 概述(java入门指南)

大道至简-JAVA入门教程在本教程中,你将学习Java语言的基础知识。Java基础内容涵盖:Java基础概念、Java词法结构、Java数组、Java流程控制、Java字符串、Java...

推荐一款Java音频视频编码器,很赞

Jave2是什么JAVE2(Java音频视频编码器)库是ffmpeg项目上的Java包装器。开发人员可以利用JAVE2将音频和视频文件从一种格式转码为另一种格式。在示例中,您可以将AVI文件转换为MP...

【JAVA教程】JAVA入门及开发环境安装

一、Java开发环境概述Java开发需要三个核心组件:JDK(JavaDevelopmentKit)-Java开发工具包,开发、编译、调试Java程序JRE(JavaRuntimeE...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

记Tomcat优化方案(tomcat优化的几种方法)

Tomcat服务吞吐量评估方案问题:评估方案在一台8核16G的linux服务器上,使用tomcat容器部署服务。在正常情况下如何评估这个tomcat服务可处理的连接数,即服务的吞吐量,请在正常情况下考...

JVM GC诡异问题排查,k8s差点害死我……

前言本文将通过一个真实的生产环境案例,详细展示如何系统性地排查和解决JVM垃圾收集问题。这个案例涵盖了从问题发现、分析诊断到最终解决的完整过程,对于理解JVM调优实战具有重要的参考价值。系统背景我们的...

Thorium Reader - 功能强大的跨平台免费电子书阅读器

在日常阅读日益普及的今天,选择一款合适的电子书阅读器至关重要。ThoriumReader作为一款独具特色的阅读应用,正逐渐在众多同类产品中崭露头角,为用户带来了卓越的阅读体验。  跨平台的便捷性...