java面试题-JVM问题排查
1.常见的Linux定位问题的工具?
常见的 Linux 定位问题的命令可以分为以下几类:
系统状态命令:包括 top、uptime、vmstat、sar 等命令,用于查看系统整体的状态,如 CPU 使用率、内存使用率、磁盘 I/O 等。
进程状态命令:包括 ps、pstree、pgrep、kill 等命令,用于查看进程的状态,如进程 ID、进程占用的资源等。
网络状态命令:包括 ifconfig、ip、netstat、ss、tcpdump 等命令,用于查看网络接口、网络连接状态、网络流量等。
文件状态命令:包括 lsof、fuser、df、du 等命令,用于查看文件句柄、文件系统状态、磁盘使用情况等。
Java 应用状态命令:包括 jps、jstat、jmap、jstack、jinfo 等命令,用于查看 Java 应用程序的状态,如 Java 进程 ID、内存使用情况、线程状态等。
2.JDK自带的定位问题的工具?
jps
jps (Java Process Status Tool) 是一个命令行工具,用于列出系统中所有正在运行的 Java 进程的进程 ID。可以用于确认 Java 进程是否已经启动,以及进程的 PID,便于后续进行进一步的诊断。
jps 命令常用的参数如下:
-q:只输出进程 ID,不输出类名和参数;
-m:输出主类名和参数;
-l:输出完整的包名、类名和参数。
使用示例:
jps // 输出所有 Java 进程的进程 ID 和类名
jps -q // 只输出进程 ID
jps -m // 输出主类名和参数
jps -l // 输出完整的包名、类名和参数jstat
jstat (JVM Statistics Monitoring Tool) 是一个命令行工具,用于监控 Java 应用程序的各种状态信息,如垃圾回收、类加载、内存、线程等。可以帮助开发人员了解应用程序的实时状态,发现性能瓶颈和内存泄漏等问题。
jstat 命令常用的参数如下:
-gcutil:显示 GC 情况的统计信息,包括 Eden 区、Survivor 区和老年代的使用情况、GC 时间、GC 频率等;
-gcnew:显示新生代的 GC 情况,包括 Eden 区和 Survivor 区的使用情况、GC 时间、GC 频率等;
-gcold:显示老年代的 GC 情况,包括老年代的使用情况、GC 时间、GC 频率等;
-gcpermcapacity:显示永久代的使用情况,包括永久代的使用量、使用率等;
-gcnewcapacity:显示新生代的使用情况,包括 Eden 区和 Survivor 区的使用量、使用率等;
-gccapacity:显示各个区域的容量情况,包括 Eden 区、Survivor 区和老年代的容量、使用量、使用率等;
-class:显示类加载器的加载类的数量、类加载器的数量、已卸载的类的数量等信息;
-compiler:显示 JIT 编译器的编译情况,包括编译任务数、编译失败的任务数、编译耗时等;
-printcompilation:显示 JIT 编译器编译方法的详细信息;
-uptime:显示 JVM 运行时间等信息。
使用示例:
jstat -gcutil 1234 // 监控进程 ID 为 1234 的 JVM 的 GC 情况
jstat -gcnewcapacity 1234 // 监控进程 ID 为 1234 的 JVM 的新生代的使用情况
jstat -class 1234 // 监控进程 ID 为 1234 的 JVM 的类加载器的信息上述命令会每隔 1 秒(1000 毫秒)输出一次 PID 为 <pid> 的 Java 应用程序的 GC 相关信息,一共输出 10 次。
jmap
jmap (JVM Memory Map Tool) 是一个命令行工具,用于生成 Java 应用程序的内存映像,包括堆内存、非堆内存、PermGen/Metaspace 等。可以用于查看内存使用情况、定位内存泄漏等问题。
以下是jmap的常用命令及其作用:
jmap -heap <pid>:打印Java进程的堆内存信息,包括使用的垃圾回收器、堆大小、新生代大小、新生代中Eden区、Survivor区的比例等。
jmap -histo <pid>:输出Java进程中各个类的实例数量和占用空间大小。可以通过该命令查看某个类的实例数量,以及这些实例的内存使用情况。
jmap -dump:live,format=b,file=<filename> <pid>:生成Java进程的堆转储快照。-dump参数指定生成转储快照,live表示只转储堆中存活的对象,format=b表示生成二进制格式的转储快照,file=<filename>指定生成的转储快照文件名。
需要注意的是,jmap会暂停Java进程的运行,生成堆转储快照期间会影响应用程序的性能,应尽量避免在生产环境中使用。同时,由于jmap需要读取Java进程的内存信息,需要具有相应的权限才能使用。
使用示例:
jmap -dump:format=b,file=heapdump.bin <pid>上述命令会生成一个名为 heapdump.bin 的二进制文件,保存了 PID 为 <pid> 的 Java 应用程序的内存信息。
jstack
jstack (JVM Stack Trace Tool) 是一个命令行工具,用于生成 Java 应用程序的线程转储信息,可以帮助开发人员定位死锁等线程相关的问题。
jstack [-l] <pid>其中,-l 表示输出详细的锁信息。<pid> 表示 Java 进程的进程 ID。如果省略 -l 参数,则只输出线程的调用栈信息。
使用示例:
使用jstack命令生成线程快照。
$ jstack 12456 > threads.txt上述命令将生成一个名为threads.txt的文件,其中包含Java进程中所有线程的堆栈跟踪信息。
JStat
JStat 是 JDK 自带的一款命令行工具,用于查看 JVM 的统计信息。它可以查看 JVM 中的垃圾回收信息、类加载信息、线程状态等,帮助开发人员快速了解 JVM 的运行情况。
以下是JStat常用的选项:
-class:监视类装载、卸载情况。
-gc:监视垃圾回收情况。
-compiler:监视JIT编译情况。
-gcutil:输出垃圾回收统计信息,包括堆使用情况、GC时间、各种GC事件等。
-gcnew:输出新生代垃圾回收统计信息。
-gcold:输出老年代垃圾回收统计信息。
-util:输出各种内存池的使用情况。
JStat的使用非常简单,只需要在命令行中输入"jstat"加上相应的选项和JVM进程ID即可。例如:
jstat -gcutil 1234这条命令将输出JVM进程ID为1234的垃圾回收统计信息。JStat输出的结果类似于下面这样:
S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 66.85 29.35 67.92 52.90 2342 27.755 3 0.204 27.959其中,S0和S1是新生代中的两个Survivor区域的使用情况,E是新生代中Eden区域的使用情况,O是老年代的使用情况,P是永久代的使用情况。YGC表示Young GC的次数,YGCT表示Young GC所花费的时间,FGC表示Full GC的次数,FGCT表示Full GC所花费的时间,GCT表示总的GC时间。
相关文章:
java面试题-JVM问题排查
1.常见的Linux定位问题的工具?常见的 Linux 定位问题的命令可以分为以下几类:系统状态命令:包括 top、uptime、vmstat、sar 等命令,用于查看系统整体的状态,如 CPU 使用率、内存使用率、磁盘 I/O 等。进程状态命令&…...
市场上有很多低代码开发平台,不懂编程的人可以用哪些?
市场上有很多低代码开发平台,不懂编程的人可以用哪些?这个问题一看就是外行问的啦,低代码平台主打的就是一个“全民开发”,而且现在很多低代码平台都发展为零代码了,不懂编程也完全可以使用! 所谓低代码开…...
Tina_Linux打包流程说明指南_new
OpenRemoved_Tina_Linux_打包流程_说明指南_new 1 概述 1.1 编写目的 介绍Allwinner 平台上打包流程。 1.2 适用范围 Allwinner 软件平台Tina v3.0 版本以上。 1.3 相关人员 适用Tina 平台的广大客户,想了解Tina 打包流程的开发人员。 2 固件打包简介 固件…...
JVM面试题
JVM 1.jvm的组成部分 类加载器:将javac编译的class文件加载到内存中 运行时数据区:将内存划分成若干个不同的区域。 执行引擎:负责解析命令,提交操作系统执行。 本地接口:融合不同的语言为java所用 2.运行时数据区 方法区&…...
@FeignClient注解
1.在启动类上开启Feign功能 不开会提示找不到所需要的bean Consider defining a bean of type in your configuration SpringBootApplication EnableFeignClients public class AuthApplication {public static void main(String[] args) {SpringApplication.run(AuthApplic…...
一文搞懂如何在 React 中使用 防抖(Debounce)和 节流(Throttle)
在前端的日常开发中,经常会使用到两个函数防抖(Debounce)和节流(Throttle),防抖函数可以有效控制在一段时间内只执行最后一次请求,例如搜索框输入时,只在输入完成后才进行请求接口。…...
Airbyte API
Airbyte API涵盖了Airbyte功能的方方面面,主要分类:Source_definition:来源定义,实现了来源的增删改查功能。Destination_definition:目标定义,实现了目标的增删改查功能。Workspace:工作区管理…...
vue项目使用Electron开发桌面应用
添加npm配置避免安装Electron错误 请确保您的 node 版本大于等于 18. cmd运行: npm config edit 该命令会打开npm的配置文件,请在空白处添加: electron_builder_binaries_mirrorhttps://npmmirror.com/mirrors/electron-builder-binaries/ e…...
std::chrono笔记
文章目录1. radio原型作用示例2. duration原型:作用示例3. time_point原型作用示例4. clockssystem_clock示例steady_clock示例high_resolution_clock先说感觉,这个库真恶心,刚接触感觉跟shi一样,特别是那个命名空间,太…...
接收arp请求并发送回应的实例
本文简单介绍了arp协议,用一个实例查看收到的ARP请求,并对该请求发出ARP回应,实例有完整的源代码,使用C语言在Linux下实现,代码中有详细的注释。 1. ARP协议 ARP(Address Resolution Protocol),地址解析协议;在局域网上通过IP地址获取物理地址MAC的协议,该协议工作在数…...
【高性能计算】TVM使用TE手动优化矩阵乘法算法解析与代码解读
引言 注:本文主要介绍、解释TVM的矩阵优化思想、代码,需要配合代码注释一起阅读。 矩阵乘法是计算密集型运算。为了获得良好的 CPU 性能,有两个重要的优化措施: 提高内存访问的高速缓存命中率。复杂的数值计算和热点内存&#x…...
消息中间件的概念
中间件(middleware)是基础软件的一大类,属于可复用的软件范畴。中间件在操作系统软件,网络和数据库之上,应用软件之下,总的作用是为处于自己上层的应用软件提供运行于开发的环境,帮助用户灵活、高效的开发和集成复杂的…...
窃密恶意软件Raccoon最新样本Stealer v2分析
Raccoon 是一个恶意软件家族,2019 年来一直在地下犯罪论坛中以恶意软件即服务的身份进行售卖。2022 年 7 月,该恶意软件家族发布了 C 语言编写的新版本 Raccoon Stealer v2,打破了以往使用 C 开发的传统。 Raccoon 是一个信息窃密恶意软件&a…...
足球俱乐部管理系统
技术:Java、JSP等摘要:网站是一种主要的渠道。人们通过互联网快速、准确的发布信息、获取信息。而足球俱乐部是足球职业化、专业化的一个标志,是足球运动员以足球谋生时,所被聘用的机构,应运时代发展,规模、…...
2023上半年数学建模竞赛汇总(比赛时间、难易程度、含金量、竞赛官网)
1、美国大学生数学建模竞赛等级:国家级是否可跨校:否竞赛开始时间:2月17日~2月21日综合难度:⭐⭐⭐⭐ 竞赛含金量:⭐⭐⭐⭐⭐竞赛官网:https://www.comap.com/2、MathorCup高校数学建模挑战赛---大数据竞赛…...
【python学习笔记】:PHP7 Null合并运算符
在PHP7,一个新的功能,空合并运算符(??)已被引入。它被用来代替三元运算并与 isset()函数功能结合一起使用。如果它存在并且它不是空的,空合并运算符返回它的第一个操作数;否则返回第二个操作数。 示例 <?php// fetch the value of $_…...
数据结构与算法——3.时间复杂度分析1(概述)
前面我们已经介绍了,研究算法的最终目的是如何花费更少的时间,如何占用更少的内存去完成相同的需求,并且也通过案例演示了不同算法之间时间耗费和空间耗费上的差异,但我们并不能将时间占用和空间占用量化。因此,接下来…...
FPGA学习之日常工作复位电路
最近一个多月没有写博客了,然后最近工作中也遇到一个复位信号的问题。问题是这样的,关于外部复位信号,之前我们的处理方式都是通过PLL产生的Lock信号作为内部的复位信号。但是由于换到A54上面没有IP核,所以只有不用PLL,…...
【洛谷 P1177】【模板】快速排序 题解(快速排序+指针)
【模板】快速排序 题目描述 利用快速排序算法将读入的 NNN 个数从小到大排序后输出。 快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C 选手请不要试图使用 STL,虽然你可以…...
Pthon--自动化实用技巧篇--文件目录处理
为什么要讲这一篇,主要是因为这个在自动化测试框架或者脚本的编写的时候会用到,还是比较方便的。看上述两个函数。getcwd()、chdir()。使用 os.getcwd() 函数获得当前工作目录。使用 os.chdir()函数改变当前工作目录。所以在用chdir()函数的时候别忘记指…...
写论文软件哪个好?2026 实测:真文献 + 实证图表 + 全流程,虎贲等考 AI 才是毕业论文通关王
每到毕业季,“写论文软件哪个好” 就成为本硕生最纠结的问题。市面上工具看似繁多,却大多藏着隐患:通用 AI 编造文献、无实证支撑;小众工具功能碎片化、格式混乱;传统软件效率低、无智能辅助…… 选错软件,…...
从学生成绩表到销售报表:手把手教你用ag-grid列组/行组构建复杂业务表格
企业级销售报表实战:用ag-grid行组与列组构建动态分析系统 当业务数据从Excel迁移到前端可视化系统时,开发团队常面临多维分析的挑战。某零售企业曾因无法实时查看"华东区→浙江省→杭州市"三级维度下的季度销售趋势,导致错失库存调…...
让机房管理告别粗放,每一寸资源都物尽其用
对于机房运维人员而言,U 位管理看似是基础小事,却是决定机房运维效率、资产安全与合规水平的关键。当前,不少企业机房、单位机房仍沿用传统人工管理模式,机柜 U 位全靠记忆、台账全靠 Excel、盘点全靠熬夜,看似节省了成…...
告别手敲!手把手教你给STM32CubeIDE 1.3.0装上Keil同款代码补全插件(附成品包)
5分钟极速配置:为STM32CubeIDE注入Keil级代码补全能力 从Keil切换到STM32CubeIDE的开发者,最不适应的莫过于代码补全功能的缺失。每次输入变量名时手动敲击完整字符的体验,让开发效率大打折扣。本文将分享一种无需Java基础、无需手动编译的插…...
英雄联盟终极助手:League Akari 完整使用指南
英雄联盟终极助手:League Akari 完整使用指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是一个文章写手,你负责…...
CANN/asc-devkit FreeAllEvent API文档
FreeAllEvent 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.c…...
CANN/asc-devkit矢量取倒数API
asc_rcp 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/ca…...
Linux桌面便签神器Sticky:3分钟告别灵感遗忘的终极解决方案
Linux桌面便签神器Sticky:3分钟告别灵感遗忘的终极解决方案 【免费下载链接】sticky A sticky notes app for the linux desktop 项目地址: https://gitcode.com/gh_mirrors/stic/sticky 你是否曾经有过这样的经历?在编码时突然想到一个绝妙的算法…...
Arm SME架构下的矩阵运算优化实践
1. Arm SME架构下的矩阵运算优化概述矩阵乘法作为高性能计算的核心运算,其效率直接影响深度学习推理、信号处理、科学计算等关键领域的性能表现。Arm SME(Scalable Matrix Extension)架构通过引入可扩展的矩阵寄存器(ZA࿰…...
如何用HS2-HF_Patch一键解锁Honey Select 2完整游戏体验
如何用HS2-HF_Patch一键解锁Honey Select 2完整游戏体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF_Patch是一款专为Honey Select 2游戏设计的一站式…...
