千家信息网

Java中怎么监控一个应用的性能

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,Java中怎么监控一个应用的性能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。JVM的参数类型标准参数(Eg.)-help-server
千家信息网最后更新 2025年02月01日Java中怎么监控一个应用的性能

Java中怎么监控一个应用的性能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

JVM的参数类型
  1. 标准参数(Eg.)

    1. -help

    2. -server/-client

    3. -version/-showversion

    4. -cp/-classpath

  2. X参数(非标准化参数)

    1. -Xint: 解释执行

    2. -Xcomp: 第一次使用就编译成本地代码

    3. -Xmixed: 混合模式,jvm自己来决定是否编译成本地代码

  3. XX参数(非标转化参数,相对不稳定,主要用于JVM调优和Debug)

    • XX参数的分类:

    1. -Xmx/-Xms(实际上是XX参数) 设置JVM的最大内存和最小内存,-Xms等价于-XX:InitialHeapSize,-Xmx等价于-XX:MaxHeapSize

    2. -XX:+PrintFlagsInitial 查看JVM运行参数的初始值

    3. -XX:+PrintFlagsFinal 查看JVM运行参数的最终值(=表示默认值,:=表示被用户或者JVM修改后的值)

    4. -XX:+UnlockExperimentalVMOptions 解锁实验参数

    5. -XX:+UnlockDiagnosticVMOptions 解锁诊断参数

    6. -XX:+PrintCommandLineFlags 打印命令行参数

    7. -XX:+HeapDumpOnOutOfMemoryError 当发生内存溢出了,自动Dump Heap Error

    8. -XX:HeapDumpPath=./ 内存溢出HeapDump的日志,./指的是当前运行目录

    9. Boolean类型: -XX:[+|-],例如: -XX:+UseConcMarkSweepGC

    10. 非Boolean类型: -XX:=表示name属性的值是value,例如:-XX:MaxGCPauseMillies=500

  4. jps

    • jps默认能够看到所有的java进程

    • -l参数表示看到具体的Class

    • !!!需要补全所有的参数

  5. jinfo

    • jinfo -flag MaxHeapSize [pid]看到所选择pid的MaxHeapSize的值

    • jinfo -flags [pid]看到所选pid的所有参数值,包括被修改的和没有被修改过的

    • !!!需要补全所有参数

  6. jstat

    • Loaded 类加载的个数

    • Bytes 类加载了多少个kBs

    • Unloaded 类卸载的个数

    • Bytes 类卸载了多少个kBs

    • Time 类加载和卸载总共花费的时间

    • Compiled 完成了多少个编译的任务(把一个方法编译成本地方法)

    • Failed 编译任务失败的次数

    • Invalid 编译任务是无效的次数

    • Time 总的编译时间

    • FailedType 上一次编译失败的编译类型

    • FailedMethod 上一次编译失败的类名称或方法名称

    • S0C\S1C\S0U\S1U S0和S1的总量和使用量

    • EC\EU Eden区总量与使用量

    • OC\OU Old区总量与使用量

    • MC\MU Metaspace区总量和使用量

    • CCSC\CCSU 压缩类空间总量和使用量

    • YGC\YGCT YoungGC的次数和时间

    • FGC\FGCT FullGC的次数和时间

    • GCT 总的GC时间

    • 可以查看如下信息:

    • 所有选项:

    1. -class 查看类装载信息,用法 jstat -class [pid] [interval millseconds] [count] 代表间隔interval毫秒时间打印count次的pid的类装载信息:

    2. -compiler 查看JIT编译的信息,jstat -compiler [pid] [interval millseconds] [count]代表间隔interval毫秒时间打印count次的pid的JIT编译信息信息:

    3. -gc 查看垃圾收集的信息,用法 jstat -gc [pid] [interval millseconds] [count] 代表间隔interval毫秒时间打印count次的pid的gc信息:

    4. -gcutil

    5. -gccause

    6. -gcnew

    7. -gcold

    8. -printcompilation

    9. !!!需要补全所有参数

    10. 类装载信息

    11. 垃圾收集信息

    12. JIT编译信息

  7. JVM的内存结构

    1. 堆区:Young区(Servival区[S0+S1]+Eden区) + Old区,S0和S1是一样大的,在同一时间,S0和S1只会启用一个

    2. 非堆区(Metaspace):操作系统的本地内存,CCS区(启用了短指针之后则存在)+CodeCache区(存放的是JIT的代码信息,JNI的代码信息也在这)

  8. 如何定位内存溢出的问题

    1. 构造一个内存溢出,例如设置下-Xmx32M -Xms32M,构造一个堆内存溢出,只需要一直不停的new对象;设置-XX:MetaspaceSize=32M -XX:MaxMetaspaceSize=32M下构造出一个非堆内存溢出,例如使用ASM不太的构造Class文件。

  9. 内存溢出的区别

    • C++内存溢出主要是指丢失内存指针,Java的内存溢出主要是指一直占用对象不释放

  10. jmap

    • -dump: options有:live-仅仅导出存活的对象,format=b-导出二进制格式,file=代表导出的文件

    1. 可以手动导出Heap日志


看完上述内容,你们掌握Java中怎么监控一个应用的性能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

参数 内存 信息 编译 时间 使用量 总量 代码 代表 方法 次数 类型 任务 全所 对象 问题 装载 运行 性能 应用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 国家网络安全知识书签 广州番禺销售软件开发公司 食品安全问题调查数据库 服务器系统分区 新加坡新电信网络安全实验室 网络安全工程师包就业 网络安全开幕式2020 工控网络安全销售专业术语 苏州海航软件开发创新服务 现代网络技术与课堂教学 数据库启动服务是哪个 软件开发招标属于哪类 网络安全要树立正确的什么观 小学生网络安全分享 学校网络安全的目标是什么 宠物领养系统数据库流程图 哪个城市好找软件开发工作室 杭州软件开发哪个好 金山区银联网络技术诚信为本 网络安全教育美篇 广联达软件开发的风险 软件开发棋牌24小时 上海软件开发大连 大数据库技术预期成果 jsp往数据库添加数据库 北京标准网络技术服务口碑推荐 哪个城市好找软件开发工作室 盛天网络技术有限公司照片 教职工网络安全十不准承诺书 华为场景运行 服务器 手机
0