Java性能调优工具之JDK命令行

简介: 1.1 jps类似Linux的ps,但是jps只用于列出Java的进程可以方便查看Java进程的启动类,传入参数和JVM参数等直接运行,不加参数,列出Java程序的进程ID以及Main函数等名称jps命令本质也是Java程序...

1.1 jps

类似Linux的ps,但是jps只用于列出Java的进程
可以方便查看Java进程的启动类,传入参数和JVM参数等
直接运行,不加参数,列出Java程序的进程ID以及Main函数等名称


img_01359a2d4dbc2645944bbf3ddc3ad77f.png
jps命令本质也是Java程序

img_9b21ddb42b92f3a168148bc4bdebc91e.png
-m 输出传递给Java进程的参数

img_f4e82704fe5c5764e26887b81532ef9a.png
-l 输出主函数的完整路径

img_b285ffd0fbbc0133981759e9d0c3b14a.png
-q 只输出进程ID

img_17c1fd756cf45fcd4e67ae0f6537be33.png
-v 显示传递给jvm的参数

1.2 jstat

用于观察Java应用程序运行时信息的工具,详细查看堆使用情况以及GC情况


img_fdef26db5fdac9f41d18ecd524e2f241.png
image.png

jstat -class pid:显示加载class的数量,及所占空间等信息。

img_460c8ebe76d49cc2ab25b0778e059f00.png
-compiler -t:显示JIT编译的信息

img_f68a3a7b5ce4e5ceda1a05b887d5c658.png
-gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。

img_74918a5210cff49ad98244154ea25354.png
-gccapacity比-gc多了各个代的最大值和最小值

img_86fe8cf3fc1ce29d61534169292f85f8.png

img_fcd1d2e1cbec762b9b50488fc4342eea.png
-gccause 4768 最近一次GC统计和原因

LGCC:上次GC原因
GCC:当前GC原因
img_46854744e1ad2d756e45a20501944165.png
-gcnew pid:new对象的信息。

img_e0ace59b06529bf7fbd3646134f7f5a4.png

jstat -gcnewcapacity pid:new对象的信息及其占用量。


img_c63625b960617379ead8ad42c5f78a82.png
-gcold 显示老年代和永久代信息

img_8d1d27d32ac8c3c3e8d55824e6c29377.png

img_bc40b87ec9f0e4e8581ecce01a37fb1f.png
-gcoldcapacity展现老年代的容量信息

img_b8fbe1f138c4c2d6cf3abaf9440ebecb.png
image.png

img_430717a4fae280123fba9a5ce175943a.png
-gcutil显示GC回收相关信息

img_8c2c374343c7a325db4aad87d44a5124.png

jstat -printcompilation pid:当前VM执行的信息。

还可以同时加两个数


img_59f26fad1e3fb95adeda7b5d06cb1b69.png
输出进程4798的ClassLoader信息,每1秒统计一次,共输出2次

1.3 jinfo

查看正在运行的Java应用程序的扩展参数,甚至在运行时修改部分参数
jinfo <option> <pid>

jinfo可以查看运行时参数:

jinfo -flag MaxTenuringThreshold 31518
-XX:MaxTenuringThreshold=15

jinfo还可以在运行时修改参数值:

> jinfo -flag PrintGCDetails 31518
-XX:-PrintGCDetails

> jinfo -flag +PrintGCDetails 31518

> jinfo -flag PrintGCDetails 31518

-XX:+PrintGCDetails

1.4 jmap

生成堆快照和对象的统计信息


img_5ba5ba206e9d2ad2eb0b85ed1e054a01.png
-histo 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
img_6daa2e5a42b04179d3c846666c8e1c13.png
-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.

获得堆快照文件之后,我们可以使用多种工具对文件进行分析,例如jhat,visual vm等。

1.5 jhat

分析Java应用程序的堆快照文件,以前面生成的为例

img_885b03527e66d50becdaee33b83006b0.png
jhat heap.hprof

jhat在分析完成之后,使用HTTP服务器展示其分析结果,在浏览器中访问 http://127.0.0.1:7000/即可得到分析结果。
img_e0d1ba84e2fe9cad239b42505cdac736.png

1.6b jstack

导出Java应用程序的线程堆栈
jstack -l <pid>

jstack可以检测死锁,下例通过一个简单例子演示jstack检测死锁的功能。java代码如下:


img_9882a7a95022f3f1ad2aa396ba0492f8.png

img_936ec9f110cbd99c40fc23bdc7bac305.png
使用jps命令查看进程号为11468,然后使用jstack -l 11468 > a.txt命令把堆栈信息打印到文件中

img_19081fc7724d8138ef3fd5852cb85564.png

从这个输出可以知道:
1、在输出的最后一段,有明确的"Found one Java-level deadlock"输出,所以通过jstack命令我们可以检测死锁
2、输出中包含了所有线程,除了我们的north,sorth线程外,还有"Attach Listener", "C2 CompilerThread0", "C2 CompilerThread1"等等;
3、每个线程下面都会输出当前状态,以及这个线程当前持有锁以及等待锁,当持有与等待造成循环等待时,将导致死锁

目录
相关文章
|
6月前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
2009 1
|
5月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
722 4
|
6月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
2063 8
|
7月前
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
534 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
|
8月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
856 1
|
9月前
|
Java 数据安全/隐私保护 计算机视觉
银行转账虚拟生成器app,银行卡转账截图制作软件,java实现截图生成工具【仅供装逼娱乐用途】
本内容提供Java生成自定义图片的示例代码,涵盖基础图像创建、文本添加及保存功能,适合学习2D图形编程。包括教学示例图片生成、文本图层处理和数字水印技术实现方案。
|
8月前
|
Oracle Java 关系型数据库
新手必看:Java 开发环境搭建之 JDK 与 Maven
本文分享了 Java 学习中 JDK 安装配置与 Maven 使用的入门知识,涵盖 JDK 下载安装、环境变量设置、Maven 安装配置及本地仓库与镜像设置,帮助新手快速搭建 Java 开发环境。
937 0
|
9月前
|
安全 Java API
Java最新技术(JDK 11+) 及以上 Java 最新技术之集合框架实操应用详解
本示例基于Java最新技术(JDK 11+),涵盖集合框架的核心功能,结合Java 8+特性(如Stream API、Lambda表达式)与并发编程最佳实践。内容包括:List操作(初始化、Lambda过滤、Stream处理)、Map操作(流式过滤、ConcurrentHashMap原子操作、并行流)、Set操作(TreeSet排序、CopyOnWriteArraySet并发安全)、Queue/Deque操作(优先队列、双端队列)以及高级聚合操作(集合转换、分组统计、平均值计算)。 [代码下载](https://pan.quark.cn/s/14fcf913bae6)
179 4
|
9月前
|
Java 数据安全/隐私保护
银行转账虚拟生成器app,银行卡转账截图制作软件,java实现截图生成工具【仅供装逼娱乐用途】
本项目提供了一套基于Java的图片处理教学方案,包含自定义图片生成、图像水印添加及合法电子凭证生成技术示例。