jvm常用命令

vmstat 5

每5秒输出一次服务器状态,关注CPU上下文切换,Context Switch , CS
在这里插入图片描述

jvm相关

在windows下查看Java 的pid

打开Java visualVm,启动一个Junit测试,即可看到pid
然后通过cmd进入到jdk bin目录执行 jstack即可
在这里插入图片描述

在这里插入图片描述

查看pid

ps -ef 查看所有进程
ps -ef | grep java 查看Java进程

jinfo

查看正在运行的java程序的扩展参数,支持在运行时修改部分参数
基本用法:-flag option pid

用法示例
jinfo -flag name pid打印指定jvm参数
jinfo -flag +/- name pid修改jvm的布尔值
jinfo -flag name=value pid修改jvm参数
jinfo -flags pid 打印所有jvm参数

1.java -XX:+PrintFlagsFinal -version | grep manageable
manageable 代表可以修改
打开GC日志,需先执行jinfo -flag +PrintGCDetails,再执行jinfo -flag +PrintGC
在这里插入图片描述
打开PrintGCDetails

$ jinfo -flag PrintGCDetails 11332
-XX:-PrintGCDetails 
$ jinfo -flag +PrintGCDetails 11332
-XX:+PrintGCDetails 

jmap

内存分析,用于生成heap dump文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError,出现OOM的时候自动生成dump文件,
还可以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器

用法示例
jmap -dump:live,format=b,file=/home/logs/jmap.bin pid生成java堆快照,live只dump活跃对象
jmap -heap pid 显示java堆详细信息,包括垃圾收集器,参数配置
jmap -finalizerinfo pid显示F-Queue中等待执行finalizer线程执行finalize方法的对象,只Linux生效
jmap -histo[:live] pid 打印当前java堆中各个对象的数量、大小
jmap -permstat pid 打印java堆永久代的信息,只Linux
-F 强制生成dump
注意事项:

jmap -dump:live 以及 jmap -histo:live都会触发Full GC

jmap原理

通过jmap和jvm之间进行通信,有两种实现方式:attach 和 SA
在JVM中,有一个叫”Attach Listener”的线程,专门负责监听attach的请求,并执行对应的操作,比如jmap -dump和jmap -histo
在这里插入图片描述
jmap -heap 、-permstat、-finalizerinfo则是SA方式,或者加了-F,jmap -histo -F
SA方式,和attach方式不同的是,相关的主要逻辑都在SA中实现,从JVM中获取数据。

attach API是“in-process”,而SA是“out-of-process”的,简单来说,in-process就是调试器(或类似的功能)运行在目标进程内
而out-of-process是调试器跟目标进程是独立的两个进程,通过进程间通信来实现调试
以jstack为例,默认参数下它用的是attach API

jstack 默认 —— attach API —— in-process 运行在目标进程内 ,优点速度快;缺点容易影响目标进程
jstack -F —— SA —— out-of-process 通过进程间通信 ,优点:调试功能与调试目标之间有良好的隔离,即便调试功能自身有问题也不会 影响到目标进程;缺点速度慢

jstat

用于收集hotspot各方面运行数据,可以显示类加载,GC情况,内存等
用法:jstat option pid interval(s/ms) count
例如 jstat -gc 8088 2s 10,每2秒查询一次,查询10次

jstat用法示例
-gc pid显示gc相关的堆信息,查看gc的次数、时间,各个区大小
-compiler pid显示jit编译过的方法
-gcutil pid与gc基本相同,突出使用空间百分比
-gccapacity pid 突出各个区最大最小空间
-gcmetacapacity 显示metaspace的大小
-gcnew 新生代信息
-gcoldcapacity 老生代使用的最大和最小空间
-gccause 显示最后一次或当前正在发生的垃圾回收的诱因
单位字节
S survivor(幸存区), +C总容量,+U 使用多少
YGC 年轻代中gc次数,+T 时间
LGCC 上一次GC原因
MCMN metaspace中初始化(最小)的大小,-X最大,-MN,-MX
CCSC当前压缩类空间大小

jstat -gc 34 2s 10
在这里插入图片描述

jstat -gccapacity 34
在这里插入图片描述

在这里插入图片描述

方法区的大小,并没等于-XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m
在这里插入图片描述

jstack

生成jvm当前时刻线程快照
用法:jstack -l pid
-F 强制输出,-l 显示锁附加信息,-m 如果调用本地方法,显示c++堆栈,但如果Java方法被编译过,则看不到(然而大部分经常访问的Java方法其实都被编译过)

jps

jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。 通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息
用法:jps
-l 输出全名,-v 输出jvm启动参数,-m 输出启动时传给main的参数

$ jps 
34 Bootstrap
1999 Jps

jcmd

可以导出堆、查看Java进程、导出线程信息、执行GC、还可以进行采样分析
jcmd -l = jcmd = jps 查看所有的进程列表信息
需要开启 -XX:NativeMemoryTracking=detail

 jcmd pid VM.native_memory detail -- 查看详细内存信息

 sudo -u admin /java/bin/jcmd 32 VM.native_memory baseline   --建立基线
 sudo -u admin /java/bin/jcmd 32 VM.native_memory detail.diff   -- 和基线内存对比

jhat

分析jmap生成的dump文件,不过不推荐使用
用法:jhat jmap.dump

pmap

用法:pmap -x pid

pmap -x 39 |head -15|sort -r -k2

在这里插入图片描述

JConsole

在这里插入图片描述

Java VisualVM

在这里插入图片描述

perf

perf record -g -p pid 开启监控栈函数调用,手动结束,生成perf.data
执行perf report -i perf.data查看报告

btrace

可以动态地跟踪java运行程序,将跟踪字节码注入到运行类中,对运行代码侵入较小,对性能上的影响可以忽略不计

Linux

查询docker网卡

yum install net-tools
ifconfig

Linux基础操作

    • uptime 系统负载
    • sar yum -y install sysstat
  1. ll -Sl -h 从大到小排序
  2. yum install net-tools 安装软件(docker中)
  3. find / -type f -size +1G 找到大于1G的文件
  4. find / -name * gc * 模糊查询 根目录,无空格
 find / -name '*java*'
  1. pstree -p | wc -l 查询当前整个系统已用的线程或进程数;pstree -p 7368 | wc -l 加具体进程号,单个进程的线程
  2. grep -c ‘cpu[0-9][0-9]*’ /proc/stat 查看CPU核数

查询线程数

  1. pstree -p pid | wc -l
 pstree -p 25922 |wc -l  
 205
  1. cat /proc/pid/status
    在这里插入图片描述
  2. ps -hH -p pid | wc -l
 ps -hH -p 5447 | wc -l
 432

排序

排序 head -10,显示前10条,但是不排序在这里插入图片描述

sort -k2 k是第几个参数,按照从小到大排序
在这里插入图片描述

降序 加 -r:jmap -histo:live 9928 | sort -k2 -r |head -10
在这里插入图片描述

查看内存 free -h
在这里插入图片描述
total:内存总大小。
used:使用了多少内存。
free:除了buff/cache剩余了多少内存。
shared:共享内存。
buff/cache:缓冲、缓存区内存数。
available:真实剩余的可用内存数。
关系:total = used + free + buff/cache
关系:available 包含 free 和 buff/cache 剩余部分,则是真实剩余内存。

CPU相关

vmstat 3 5 每隔3秒,输出5次

重点关注swap
mall在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。

在这里插入图片描述
在这里插入图片描述

free

free -h 系统自动选择合适的单位
在这里插入图片描述

  • 实际可用内存:buffers+cached+free
  • free -h -s 5 每5秒打印一次

top

详解:
第一行: 当前时间,336 days - 运行了336天 ,2 users - 当前2个用户,load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况

第二行:tasks - 系统当前有133个进程,1个运行中,132个休眠,zombie - 僵尸状态

第三行:CPU相关
us — 用户空间占用CPU的百分比。
sy — 内核空间占用CPU的百分比。
ni — 改变过优先级的进程占用CPU的百分比
id — 空闲CPU百分比
wa — IO等待占用CPU的百分比
hi — 硬中断(Hardware IRQ)占用CPU的百分比
si — 软中断(Software Interrupts)占用CPU的百分比

第四行:内存状态
total — 物理内存总量
used — 使用中的内存总量
free — 空闲内存总量
buffers — 缓存的内存量

第五行:swap交换分区
total — 交换区总量
used — 使用的交换区总量
free — 空闲交换区总量
avail Mem — 可用交换取总量

第七行:
依次对应:
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
在这里插入图片描述
需要注意的是:第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了

第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少。

使用技巧:
输入 b ,running状态加亮
输入x 排序加亮
shift+> 移动高亮

ps aux

VSZ–进程的虚拟大小
RSS–驻留集的大小,可以理解为内存中页的数量
在这里插入图片描述

Linux安装命令

  • yum -y install iotop

  • sar yum -y install sysstat

sar

sar -q 2 3
在这里插入图片描述
runq-sz:运行队列的长度(等待运行的进程数)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-1:最后1分钟的系统平均负载(Systemload average)
ldavg-5:过去5分钟的系统平均负载
ldavg-15:过去15分钟的系统平均负载

sar -r 内存使用统计
在这里插入图片描述
%memused:物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比
sar 2 5 每隔几秒输出几次

在这里插入图片描述
#%user 用户态的CPU使用统计
#%nice 更改过优先级的进程的CPU使用统计
#%iowait CPU等待IO数据的百分比
#%steal 虚拟机的vCPU占用的物理CPU的百分比
#%idle 空闲的CPU百分比

【54% 的线程正处于休眠态】–>
这可能是他们都在等一个抢手的资源,也可能是正常的,他们是需要等待某个时机才能继续做,可以通过左侧’休眠态线程’看到更多的信息.
【54% 的线程正在等待一个没有被任何线程持有的监控对象】–>
很有可能是在进行垃圾回收,并阻塞了所有的监控对象’

实际分析

堆外内存

top 显示实际占用7.6G
在这里插入图片描述

jmap -heap pid
在这里插入图片描述
(sudo -u admin /java/bin ) jmap -histo:live 34 | head -10
在这里插入图片描述
继续通过 jmap -dump ,通过mat分析

jmap -heap pid
在这里插入图片描述

参考

https://blog.csdn.net/u011381576/article/details/79635867
https://www.cnblogs.com/yjd_hycf_space/p/7755633.html

浅蓝浅蓝777
关注 关注
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM常用命令
weixin_40381772的博客
01-15 2959
Java虚拟机(JVM)是Java程序运行的基础设施,它负责将Java字节码转换为本地机器代码并执行。在开发过程中,我们经常需要使用一些命令来监控和管理JVM的性能和状态。本文将详细介绍6个常用的JVM命令:jps、jstat、jmap、jhat、jstack和jinfo。
JVM常用命令
yeyiguo的博客
06-16 952
JVM常用命令
一文搞定JVM相关的命令汇总,推荐收藏!
最新发布
Wewe的博客
03-20 353
虽然目前市场上有很多成熟的 JVM 可视化监控分析工具,但是所有的工具其实都依赖于 JDK 的接口和底层相关的命令,了解这些命令的使用对于我们在紧急情况下排查 JVM 相关的线上故障,会有更加直观的帮助。下面我们一起来看看 JVM 常用的命令有哪些。
九、JVM 指令
qq_43530416的博客
06-24 329
(操作码)(操作数)
【杂记】JVM调优
借他一双眼,愿这盛世如先生所愿
03-05 878
JVM调优是对Java程序性能的一种优化方式,通过对JVM运行参数和内存的调整,以达到JVM的最佳性能和资源使用率。通过使用工具对Java程序进行监控、定位以达到调优的效果
jvm常用命令工具
03-24
列举jvm常用的指令,更深入的调试你的应用程序
JVM问题诊断常用命令
03-22
JVM问题诊断常用命令,非常非常值得收藏和深入好好学习学习
基于JVM性能监控命令介绍
08-29
基于JVM性能监控命令介绍了六种常用的JVM性能监控命令,包括jps、jstat、jinfo、jmap、jhat和jstack命令。这些命令可以帮助开发者和运维人员实时监控虚拟机的性能,诊断和解决问题,提高系统的稳定性和可靠性。
jvm详解,jvm内存结构,常用命令
08-17
jvm详解
10.JVM常见命令1
08-04
JVM常见命令 JVM(Java Virtual Machine)是 Java 语言的 Runtime 环境,它提供了多种命令来监控和管理 Java 应用程序的执行情况。在本文中,我们将介绍 10 个常见的 JVM 命令,包括 jps、jstat、jinfo、jmap 和 ...
JVM 查询基本命令
Jesse_tan的博客
10-19 505
jmap -histo 14660 #查看历史生成的实例 jmap -dump:format=b,file=eureka.hprof 14660 堆快照信息 可以用jvisualvm命令工具导入该dump文件分析 jstack + 进程id cpu最高的线程堆栈信息 Jinfo 查看正在运行的Java应用程序的扩展参数 垃圾回收统计 jstat -gc pid 最常用,可以评估程序内存使用及GC压力整体情况 一、常用命令分析 1. jstat -gc pid 可以显示gc的信息,查看
jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
weixin_34232744的博客
07-28 223
文章同步发布于github博客地址,阅读效果更佳,欢迎品尝 运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生产环境出现问题的时候,一方面工具的使用会有所限制,另一方面喜欢装X的我们,总喜欢在...
JVM - 指令集大全
码农研习社
04-22 235
JVM基本指令 iconst_1 int型常量值1进栈 bipush 将一个byte型常量值推送至栈顶 iload_1 第二个int型局部变量进栈,从0开始计数 istore_1 将栈顶int型数值存入第二个局部变量,从0开始计数 iadd 栈顶两int型数值相加,并且结果进栈 return 当前方法返回void getstatic 获取指定类的静态域,并将其值压入栈顶 putstatic 为指定的类的静态域赋值 invokevirtual 调用实例方法 invokespecial 调用
JVM 堆外内存查看方法
Andrew_Chenwq的博客
10-23 1140
1:针对不知道怎么面试,面试没有信心的小伙伴,我们会给你一个offer保障。2:我们会监督你15-20天内把面试体系技术点掌握至少7成,这样足够你去找到满意的工作了。3:我们是面向面试学习指导,不会带你们去写代码,会把项目真实开发的迭代过程和技术细节如何实现业务功能都详细教清楚,你能在面试中流畅表达清楚就行了,项目经验你不用担心(技术老师提供的真实项目经验肯定拿的出手),自己学和别人带着系统学,效率完全不一样。详情请点击这里offer突击训练营,给你一个offer的保障,求职跳槽的看过来!
002-JVM 常用命令
sone 的博客
09-02 358
JVM 常用命令
常用的JVM命令
qq_36559868的博客
07-06 220
个人常用的JVM命令记录以下,方便后面查阅 首先通过-XX:+PrintFlagsFinal查看默认参数配置作一个对比 监控方面的: 1.打印GC详情 -XX:+PrintGCDetails 2.打印GC时间 -XX:+PrintGCDateStamps 3.GC前后打印堆情况 -XX:+PrintHeapAtGC 4.打印GC之间应用运行的时间 -XX:+PrintGCApplicationCurrentTime 5.GC造成的停顿时间 -XX:+PrintGCApplicationStoppedTime
jvm调优常用命令
sprita1的专栏
09-12 271
一、ps+top+jstack,查看线程堆栈信息 1、ps aux|grep mypro 通过ps命令查找进程ID 2、top -Hp pid 获取线程耗费cpu或时间最高的线程号 3、printf "%x\n" 21742 将线程号21742转化16进制 4、jstack pid | grep 54ee 二、ps+top+jmap+jhat,查看线程堆内存使用信息 1、ps a...
jvm调优的常用命令
09-14
JVM调优是优化Java应用程序性能的重要环节,下面是一些常用的JVM调优命令: 1. -Xms: 设置JVM的初始堆大小。 2. -Xmx: 设置JVM的最大堆大小。 3. -Xmn: 设置年轻代的大小。 4. -XX:NewRatio: 设置年轻代与老年代的比例。 5. -XX:SurvivorRatio: 设置Eden区与Survivor区的比例。 6. -XX:MaxTenuringThreshold: 设置对象在Survivor区中经过多少次垃圾回收后进入老年代。 7. -XX:PermSize: 设置永久代的初始大小。 8. -XX:MaxPermSize: 设置永久代的最大大小。 9. -XX:ParallelGCThreads: 设置并行垃圾回收的线程数。 10. -XX:+UseConcMarkSweepGC: 启用并发标记清除垃圾回收器。 11. -XX:+UseG1GC: 启用G1垃圾回收器。 12. -XX:+PrintGCDetails: 输出详细的GC日志信息。 这些命令可以根据应用程序的需求进行调整,通过合理配置可以提高应用程序的性能和稳定性。注意,JVM调优需要根据具体情况进行,不同的应用程序可能需要不同的调优策略。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • java.lang.ref.Finalizer占用高内存 16969
  • 阿里云ONS消息队列入门指南 8149
  • 查看堆外内存 7518
  • Windows查询端口占用 6396
  • bat脚本创建windows定时任务 4857

分类专栏

  • 笔记 1篇

最新评论

  • 查看堆外内存

    CSDN-Ada助手: SpringBoot里有一大堆的O: PO/DAO/DTO/BO/VO, 你能自如地区分他们么?会不会代码抽象太臃肿了?

  • RPermitExpirableSemaphore使用笔记

    窥探者: 懂了,谢谢老哥

  • RPermitExpirableSemaphore使用笔记

    浅蓝浅蓝777: 我大概知道了,你是不是看了 private String tryAcquire(int permits, long ttl, TimeUnit timeUnit) { long timeoutDate = calcTimeout(ttl, timeUnit); return get(tryAcquireAsync(permits, timeoutDate)); } 这个方法是private的,没有对外暴露

  • RPermitExpirableSemaphore使用笔记

    浅蓝浅蓝777: 我记得jdk的semphore 的tryAcquire 的参数是permits,RPermitExpirableSemaphore 的参数都是和时间有关,文章最后也贴了图,你看下,有问题继续交流

  • RPermitExpirableSemaphore使用笔记

    窥探者: tryAcquire的第一个参数不是permits吗,不是waittime呀

大家在看

  • 人工智能—美国加利福尼亚州房价预测实战 1239

最新文章

  • dubbo默认数据包大小修改
  • RPermitExpirableSemaphore使用笔记
  • dubbo问题合集
2022年1篇
2020年2篇
2019年16篇
2018年19篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司永湖网站优化按天收费价格曲靖seo推荐沧州网站推广工具多少钱连云港seo报价大理百度网站优化排名价格潮州百姓网标王推广济源seo排名报价遵义品牌网站设计报价黄南企业网站建设报价深圳网站优化排名价格巴中推广网站报价长沙至尊标王价格洛阳百度网站优化价格河源百度seo公司安康网站优化排名报价襄樊网站优化按天计费价格甘南网站推广系统邵阳百度竞价包年推广多少钱汉中网站优化按天收费公司南通网站建设设计报价张掖营销型网站建设多少钱驻马店网站推广工具公司烟台seo排名哪家好常德百搜标王报价松岗关键词排名包年推广报价同乐品牌网站设计推荐衡水百度爱采购哈密营销型网站建设多少钱抚州seo塘坑品牌网站设计报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化