jvm性能问题排查常用命令

JVM监控和调优常用命令jps|jstat|jinfo|jmap|jhat|jstack实战 通过JVM调优,可以提高Java应用程序的性能,减少响应时间,提高吞吐量,以更好地满足用户需求。性能优化可以加快应用程序的执行速度,减少延迟,提高用户体验。:JVM负责管理Java应用程序的内存。正确的内存管理可以避免内存泄漏和内存溢出等问题,确保应用程序在长时间运行时不会耗尽内存或导致性能下降。:垃圾回收是JVM的核心功能之一,它负责释放不再使用的对象并回收内存。通过调整垃圾回收器的参数和策略,可以减少垃圾回收的频率和开销,提高应用程序的响应速度。 阅读详情

1、查看进程下线程信息

ps p 1 -L -o pcpu,pid,tid,time,tname,cmd,pmem,rss,wchan:30,psr,stat

标准格式说明符:

代码头部描述
%mem%MEM进程占用物理内存的百分比
argsCOMMAND输出命令及其全部参数
cmdCMDalias args
commCOMMAND仅输出可执行文件的名字
commandCOMMANDalias args
etimeELAPSED输出进程的运行时间,时间格式如下:[[dd-]hh:]mm:ss(运行时间没有超过一天则不显示dd-,如果运行时间还不到一小时,则显示格式为mm:ss)
euserEUSER输出进程的执行者的用户名(有时是显示执行者的uid)
lstartSTARTED输出进程启动时刻
pidPID输出进程的进程号
psrPSR进程当前被分配的处理器
pmem%MEMalias %mem
rssRSS物理内存的使用大小(单位为KB)
rssizeRSSalias rss
rszRSZalias rss
sS最小状态显示(只显示一个字符)
statSTAT多字符状态显示(显示更详细的进程状态信息)
stateSalias s
unameUSERalias euser
userUSERalias euser
wchan:30wchan:30在内核中的使用方法,正在等待的进程资源;
TIMETIME进程消耗CPU的时间
进程状态代码stat:
D      不可中断睡眠
R      正在运行或可运行(或者位于运行队列中)
S      可中断睡眠
T      已终止、停止或被追踪
X      已死(should never be seen)
Z      已故进程,已终止但还未被其父进程回收、僵尸进程
<      高优先级(对其它用户不友好)
N      低优先级(对其它用户友好)
L      页面锁定在内存
s      含有子进程(is a session leader)进程的领导者(在它之下有子进程)
l      多线程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
+      位于后台的进程组

2、top命令动态查看进程下线程信息

top -H -p 1

在终端界面上:

按f键,进入字段选择界面,

按上下键上下移动,

按d指定排序,

按空格选中、取消展示字段,

按q或esc退出选择。

展示的字段信息同7。

3、垃圾回收统计【按百分比例显示】

jstat -gcutil 1 6000
说明:每6秒一次显示进程号为30149的 java进程垃圾回收统计情况,结果如下图
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

4、垃圾回收统计总览

jstat -gc 1 6000
说明:每6秒一次显示进程号为30149的 java进程的 GC情况,结果如下图
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间

5、堆内存最小、最大、当前量统计总览

jstat -gccapacity 1
NGCMN    NGCMX     NGC     S0C     S1C       EC      OGCMN      OGCMX       OGC         OC          MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC
204800.0 204800.0 204800.0 20480.0 20480.0 163840.0   614400.0   614400.0   614400.0   614400.0      0.0    63872.0  63872.0      0.0      0.0      0.0    149     8

    NGCMN:新生代最小容量
    NGCMX:新生代最大容量
    NGC:当前新生代容量
    S0C:第一个幸存区大小
    S1C:第二个幸存区的大小
    EC:伊甸园区的大小
    OGCMN:老年代最小容量
    OGCMX:老年代最大容量
    OGC:当前老年代大小
    OC:当前老年代大小
    MCMN:最小元数据容量
    MCMX:最大元数据容量
    MC:当前元数据空间大小
    CCSMN:最小压缩类空间大小
    CCSMX:最大压缩类空间大小
    CCSC:当前压缩类空间大小
    YGC:年轻代gc次数
    FGC:老年代GC次数

6、查看java 堆(heap结构)使用情况

jmap -heap 1

7、将堆内存使用的详细情况(heap实例)dump输出到文件

jmap -dump:format=b,file=/data/logs/heapdump.hprof  1
​
jhat -J-Xmx512m /data/logs/heapdump.hprof
​
然后使用MAT分析工具,如jhat命令,eclipse的mat插件。    
有时你dump出来的堆很大,在启动时会报堆空间不足的错误,可以使用如下参数:
jhat -J-Xmx512m <heap dump file>
.\jhat.exe E:\heapdump .hprof

8、查看堆内存中的实例数量及占用内存大小

jmap -histo 1
jmap -histo 1 | head -30
jmap -histo 1 > /data/logs/heaphisto.log
默认按照占用内存大小降序排序
jmap -histo 1|sort -k 2 -g -r | head -30
按照实例数量降序排序取前30个
jmap -histo 1|grep redisson|sort -k 3 -g -r    
按照实例数量降序排序取前30个 搜索redisson
    
#instance 是对象的实例个数 
#bytes 是总占用的字节数 
#class name 对应的就是 Class 文件里的 class 的标识 
B 代表 byte
C 代表 char
D 代表 double
F 代表 float
I 代表 int
J 代表 long
Z 代表 boolean
前边有 [ 代表数组, [I 就相当于 int[]
对象用 [L+ 类名表示  

9、打印内存线程栈信息

jstack  -l  1 > /data/logs/jstack.log

10、jinfo 查看 JVM 参数

jinfo -flags 1

11、vi命令使用

搜索(查找)
​
`/abc`    # 从光标开始处向文件尾搜索abc
`?abc`    # 从光标开始处向文件首搜索abc
​
`n` # 在同一方向重复上一次搜索命令
`N` # 在反方向上重复上一次搜索命令
​
Ctrl + f 向下滚动一屏
​
Ctrl + b 向上滚动一屏
 
12、生产环境下JAVA进程高CPU占用故障排查

​
linux中使用arthas进行jvm内存分析 thread -n 3 -i 1000:列出 1000ms 内最忙的 3 个线程栈。thread -i 1000:统计最近 1000ms 内的线程 CPU 时间。vmoption相关的信息以及修改vmoption信息。执行完成后提示succeed,即可使用。如需展示最忙的前 N 个线程并打印堆栈,使用。thread -b:查看当前阻塞其他线程的线程。选择合适的版本,下载后上传到对于服务器。默认为5s刷新一次。查看当前线程信息,查看线程的堆栈。查看当前程序的jvm信息。查看 JVM 内存信息。 阅读详情

相关推荐

​​JVM深度解析~JVM性能监控工具:jstat、jstack、jmap、VisualVM、JProfiler详解

jstat(Java Virtual Machine Statistics Monitoring Tool)是JDK自带的轻量级统计工具,用于实时监控JVM的​​GC行为、类加载、JIT编译​​等统计信息。它通过采样JVM运行时数据,输出简洁的统计指标,适合快速定位GC异常或类加载问题。jstack(Java Stack Trace)用于生成Java进程的​​线程转储文件​​,记录每个线程的状态、调用栈、锁持有情况等。它是分析线程阻塞、死锁、CPU过高问题的核心工具。jmap。

zjw541806的博客 593

Java进程占用内存过高,排查解决方法

最近收到邮件报警,说内存使作率达到84%。如下图: 解决方法: A:可能是代码原因导致的问题: 1、使用命令:top查看当前进程的状态 2、从上图可以看到PID:916的java进程占用内存较大。定位线程问题(通过命令查看PID 为25894 进程的线程情况),命令:# ps p 916 -L -o pcpu,pmem,pid,tid,time,tname,cmd ...

weixin_30323961的博客 5万+

Android Studio安装常见问题详解——Android Emulator Hypervisor Driver for AMD Processors installation failed.

目录一、问题描述二、解决方案2.1 开启CPU虚拟化2.2 禁用Hyper-V2.3 使用管理员命令行在驱动程序包中执行“silent_install.bat” 一、问题描述 新买的AMD轻薄本,在安装Android Studio时遇到问题: Android Emulator Hypervisor Driver for AMD Processors installation failed. 笔记本配置为: 二、解决方案 2.1 开启CPU虚拟化 设置虚拟化的步骤这里不进行详细介绍了。如果需要,可以自行百

Wendy的博客 4万+

Android内存管理基础

仅作为个人学习笔记,请小心求证。 欢迎访问:https://blog.youkuaiyun.com/weixin_55626853 内存管理概览:https://developer.android.com/topic/performance/memory-overview 内存分配:https://developer.android.com/topic/performance/memory-management Android Studio Profiler:https://developer.android.co..

BC工坊 6946

手把手教你编写PCIe设备驱动:基于Linux内核的实战教程

本文详细介绍了基于Linux内核的PCIe设备驱动开发全流程,包括环境准备、设备探测、中断处理、DMA配置等核心内容。通过实战代码示例和Makefile编写指南,帮助开发者快速掌握PCIe驱动开发技术,实现高性能设备驱动开发与优化。

weixin_30687051的博客 194

FPGA_AD9361实战

1.参考网站。

Pual_Georg的博客 750

Android中ps命令各字段的含义

通过ps命令查看进程的状态,看到如下输出: USER      PID   PPID  VSIZE  RSS   WCHAN              PC       S  NAME u0_a91    3140  356   2220664 85240 SyS_epoll_ 7f97b29798 S com.qiku.cardmanager 12 各字段的意义: 1 . USER:进程uid...

feelinghappy的专栏 682

Android开发者必看:5分钟搞定MQTT客户端连接EMQX服务器(附完整代码)

本文为Android开发者提供了一份快速实现MQTT客户端连接EMQX服务器的实战指南。通过引入Eclipse Paho SDK,详细讲解了从项目配置、权限申请到核心连接、主题订阅与消息发布的完整流程,并附有即拿即用的Kotlin代码,帮助开发者在物联网应用中高效集成轻量级实时通信功能。

weixin_29228781的博客 272

java引起内存溢出解决

1、查看占用内存大的进程(pid): top 2、根据pid查看详细线程占用资源情况: ps p pid -L -o pcpu,pmem,pid,tid,time,tname,cmd 3、通过jstack查看内存使用的堆栈,并将id转换为16进制: printf "%x\n" Tid 6077 4、jstack 24071 >test.txt 5、打开test.txt查找6077所在的代码位置进行排查 内存溢出的解决方案: 第一步,修改JVM启动参数,直接增加内存。(-Xms,-...

小树苗 592

VTK vtkLookupTable vtkScalarBarActor 颜色条

有时需要给数据做一个 vtkScalarBarActor, 我们把显示的数据的一个 坐标系 来显示 颜色条1.以 Z 显示颜色 效果如下。

q610098308的专栏 4041

UG NX二次开发(C#)-读取PMI对象的名称

摘要:本文介绍了在UG NX中通过NXOpen获取PMI对象名称的方法。首先说明PMI对象初始无名称,可通过重命名或属性设置名称。然后提供C#代码示例,展示如何遍历PMI集合获取对象名称,并显示名称和类型信息。适用于需要操作PMI对象的开发人员,欢迎加入技术交流QQ群749492565。(99字)

GimiGimmy 592

cpu飙高检查

1.top查看cpu高的进程 2.ps p进程id -L -o pcpu,pid,tid,time,tname,cmd查看某进程下占用CPU较高的线程 3.将获取的线程号(十进制数)转换成十六进制 printf "%x\n"线程id 4.结合进程号和线程号,利用jstack查到异常代码所在行 jstack -l 进程号| grep十六进制线程号 -A 10 5.将信息输出到文件 jstack -l进程号 > 1538.pid ...

qq_36516841的博客 542

02 HCM CPI SF集成-组织集成(一)

将员工主数据和组织数据从SAP Successfactors Employee CentraI复制到SAPERP或SAP S/4HANA,SAP SF CPI HCM集成

SAP CPI 130

Arthas & JVM 性能排查

全路径类@静态属性。

我的博客 759

LeRobot 入门教程(十七)NVIDIA IsaacLab Arena 集成

LeRobotEnvHub现已集成IsaacLabArena实现GPU加速仿真,支持GR1/G1/伽利略人形机器人实体和多种操作任务。安装需满足CUDA GPU、Ubuntu系统和IsaacSim 5.1.0要求,通过conda环境配置依赖项。系统提供SmolVLA和PI0.5等预训练策略评估功能,支持视频录制和并行环境配置。环境配置选项涵盖机器人实体、任务类型、观测维度等参数,并包含针对CUDA内存、视频录制等常见问题的解决方案。此外,LightWheel AI还通过LW-BenchHub引入了包含268

2506_90492529的博客 1250

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

JVM线上CPU 100%、内存泄露问题排查

原文链接:https://www.toutiao.com/i6881508437667086856/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=1620435813&app=news_article&utm_source=weixin&utm_medium=toutiao_ios&use_new_style=1&req_id=20210508090333

Dream_xun的专栏 2234

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java开发者线上问题排查常用的50个命令

在实际排查过程中,通常需要组合使用这些命令,形成系统性的问题排查流程。记住,成功的线上问题排查不仅依赖于命令的熟练使用,还取决于对Java应用架构、JVM原理和操作系统机制的深入理解。作为Java开发者,建议平时就熟悉这些命令的使用,并在非生产环境进行实践,为真正的线上问题排查做好准备。同时,建立完善的监控系统和日志体系,能让问题排查事半功倍。

风象南的专栏 1291

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java线上故障排查(CPU、磁盘、内存、网络、GC)+JVM性能调优监控工具+JVM常用参数和命令

故障、性能调优、参数命令

usa_washington的博客 2810

JVM-(9)JVM诊断的常用命令以及参数

在上文中我们了解了如何启动 JVM ,以及在启动时如何添加参数,不同于 Java 命令,JVM 诊断命令是用来诊断运行中的 JVM 的。

sql2008help的博客 858

JVM性能调优

此命令可以用来查看内存信息,实例个数以及占用内存大小也可以设置内存溢出自动导出 dump 文件(内存很大的时候,可能会导不出来)

Demo_Null 211

【Arthas】 JVM分析工具——基础使用

1、在地址里选择一个版本下载2、解压之后文件夹里会有包。

piano_diano的博客 1364

7 centos 设置jvmgc_深入理解JVM虚拟机——JVM内存分析命令

欢迎关注专栏《Java架构筑基》——专注于Java技术的研究与分享!Java架构筑基​zhuanlan.zhihu.comJava架构筑基——专注于Java技术的研究与分享!后续文章将首发此专栏!欢迎各位Java工程师朋友投稿和关注JVM内存分析命令工欲善其事,必先利其器!JVM本身和开源界提供了很多丰富的方法和工具来帮助开发者查看和分析JVM内存状况。通过这些分析,可以排查程序中内存问题及调优程...

weixin_39827589的博客 525

一文吃透Arthas常用命令!

Arthas 是Alibaba开源的Java诊断工具,动态跟踪Java代码;实时监控JVM状态,可以在不中断程序执行的情况下轻松完成JVM相关问题排查工作。支持JDK 6+,支持Linux/Mac/Windows。这个工具真的很好用,而且入门超简单,十分推荐。

Tyson0314的博客 1158

JVM学习日记(十四)Day14——性能监控与调优(一)

本文介绍了JVM性能调优的三个关键步骤:发现问题、排查问题和解决问题。通过jps、jstat、jinfo和jmap等JVM工具,可以监控内存使用、GC情况、查看堆转储文件等。重点讲解了如何生成和分析heap dump文件,以及如何通过命令行工具实时监控JVM状态。文章还提供了常用的JVM参数配置建议,如设置HeapDump参数以便在OOM时自动生成内存快照。这些工具和技巧帮助开发者快速定位内存泄漏、GC问题和性能瓶颈,实现有效的JVM调优。

Java球球憋卷啦🥵 1518

JVM面试

JVM面试 1.JVM三大性能调优参数 -Xss:规定每个线程虚拟机栈(堆栈)的大小 -Xms:堆的初始值 -Xmx:堆能达到的最大值 JVM 几个重要的参数: -server -Xmx3g -Xms3g -XX:MaxPermSize=128m -XX:NewRatio=1 新生代(Eden + 2*S)与老年代(不包括永久区)的比值 -XX:SurvivorRatio=8 2个Survivor区和Eden区的比值 -XX:+UseParallelGC -XX:ParallelGCThreads=8 -X

weixin_45755539的博客 330

JVM调优之Arthas

Arthas是Alibaba开源的Java诊断工具,动态跟踪Java代码;实时监控JVM状态,可以在不中断程序执行的情况下轻松完成JVM相关问题排查工作。支持JDK 6+,支持Linux/Mac/Windows。这个工具真的很好用,而且入门超简单,十分推荐。这个类从哪个jar包加载的?为什么会报各种类相关的Exception?我改的代码为什么没有执行到?难道是我没commit?分支搞错了?遇到问题无法在线上debug,难道只能通过加日志再重新发布吗?

上善若泪 633
上一篇: kibana message 显示日志行不全,被截断
下一篇: Java获取本地IP地址
wenyixicodedog
博客等级 码龄8年 87粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值