JVM 调优
本文目录
date
slug
jvm-tuning
author
status
Public
tags
技术分享
summary
type
Post
thumbnail
category
💻 Backend
updatedAt
Oct 29, 2023 07:21 AM
JVM调优的原则
当出现性能问题时,我们第一时间应该关注的是代码算法复杂度、数据库瓶颈、中间件的负载、最后才是把重点放到JVM中。JVM只占整体性能的一小部分。
操作系统四大金刚
CPU使用率、内存使用率、网络使用率、磁盘使用率
CPU使用率
- 用户态时间
- CPU 执行应用代码所占时间的百分比
- 系统态时间
- CPU 执行内核代码所占时间的百分比
- 系统态时间与应用相关,比如应用执行 I/O 操作,系统就会执行内核代码从磁盘读取文件,或者将缓冲数据发送到网络,等等。任何使用底层系统资源的操作,都会导致应用占用更多的系统态时间
“性能调优的目的是,在尽可能短的时间内让 CPU 使用率尽可能地高”
磁盘使用率
监控磁盘使用率有两个目的。第一个目的与应用本身有关:如果应用正在做大量的磁盘 I/O 操作,那 I/O 就很容易成为瓶颈
网络使用率
往网络写数据的应用遇到瓶颈,可能是因为写数据的效率太低(吞吐量太低),也可能是因为写入了太多的数据(吞吐量太高)
JVM系统分析工具
jcmd
它用来打印 Java 进程所涉及的基本类、线程和 VM 信息。它适用于脚本,可以像这样执行:
% jcmd process_id command optional_arguments
jcmd help 可以列出所有的命令。jcmd help <command> 可以给出特定命令的语法。
jconsole
提供 JVM 活动的图形化视图,包括线程的使用、类的使用和 GC 活动。
jhat
读取内存堆转储,并有助于分析。这是事后使用的工具。
jmap
提供堆转储和其他 JVM 内存使用的信息。可以适用于脚本,但堆转储必须在事后分析工具中使用。
jinfo
查看 JVM 的系统属性,可以动态设置一些系统属性。可适用于脚本。
jstack
转储 Java 进程的栈信息。可适用于脚本。”
jstat
提供 GC 和类装载活动的信息。可适用于脚本。
jvisualvm
监视 JVM 的 GUI 工具,可用来剖析运行的应用,分析 JVM 堆转储(事后活动,虽然 jvisualvm 也可以实时抓取程序的堆转储)。
这些工具可广泛用于以下领域:
基本的 VM 信息
线程信息
类信息
实时 GC 分析
堆转储的事后处理
JVM 的性能分析
jcmd process_id VM.flags [-all] - 获取JVM生效的调优标志
jinfo -flags process_id - 获取进程中所有标记值
XX:+PrintFlagsFinal - 打印执行时JVM参数