JVM调优的相关命令

news2024/11/15 21:34:18

        在进行JVM调试时,熟练使用Linux和Java命令是非常重要的,有利于我们快速发现问题,并进行解决。平时常用的命令有:Linux的Top、Top -Hp等;Java的Jps、Jinfo、Jstack、Jstat、Jmap、Jhat等。下面,我将逐一介绍一下:

1. Linux Top命令 -> 查询高内存/高CPU进程号(pid):

  • 作用:选择占用内存 或 CUP占用率 高的进程号(pid)。
  • 相关快捷键:
    • 按住 shift + M 可按内存大小排序
    • 按住 shift + P 可按CPU占用率大小排序

2. Linux Top -Hp -> 查看某进程下所有线程:

  • 命令解释:
    • -H:进入线程模式
    • -p:指定pid
    • pid:进程号

  

3. Jps命令 -> 查找正在运行的java进程:

其他作用:Jps -v -> 查看JVM启动时,显式指定的参数信息:

4. Jinfo命令 -> 查询JVM各项配置信息:

jinfo -flag :

  • -flag :查询具体JVM参数。例如 -flag MaxMetaspaceSize
  • pid 进程id

jinfo :

拓展:它还可以调整JVM配置信息。

5. Jstack命令 -> 查看Java线程堆栈信息:

jstack > /xx/xx/stack.log:生成JVM当前时刻的线程快照,打印Java线程堆栈信息。

jstack -m -> 检查是否有死锁:

主要解决线程间死锁、死循环、请求外部资源导致的长时间等待等问题:

  • 重点关注:WAITING状态、 BLOCKED状态
  • 关注:waiting on (a java.lang.Object)
    • 假如有一个进程中100个线程,很多线程都在waiting on ,一定要找到是哪个线程持有这把锁,怎么找?搜索jstack dump的信息,找 ,看哪个线程持有这把锁,它是一般状态是RUNNABLE。
    • 为什么阿里规范里规定,线程的名称(尤其是线程池)都要写有意义的名称
      • 怎么样自定义线程池里的线程名称?(自定义ThreadFactory)

6. Jstat命令 ->监控Java应用程序的资源和性能:

jstat -options :

  • -class (类加载器) -compiler (JIT) -gc (GC堆状态)
  • -gccapacity (各区大小) -gccause (最近一次GC统计和原因)
  • -gcnew (新区统计) -gcnewcapacity (新区大小)
  • -gcold (老区统计) -gcoldcapacity (老区大小)
  • -gcpermcapacity (永久区大小) -gcutil (GC统计汇总)
  • -printcompilation (HotSpot编译统计)

jstat -gc 500 -> 动态观察GC情况,发现频繁GC:

  • jstat -gc 500 : 每个500个毫秒打印GC的情况

7. Jmap命令:

用法一:下载dump文件:

jmap -dump:format=b,file=D:/test/filename.hprof

jmap -dump:format=b,file=/data/dump.hprof 21210
  • 线上系统,内存特别大,jmap执行期间会对进程产生很大影响,甚至卡顿,所以电商不适合。
    • 解决1:设定了参数HeapDump,OOM的时候会自动产生堆转储文件
    • 解决2:很多服务器备份(高可用),停掉这台服务器对其他服务器不影响
    • 解决3:在线定位(一般小点儿公司用不到)

用法二:打印每个class的实例数目,内存占用,类全名信息:

jmap -histo | head -n 20

Tips:VM的内部类名字开头会加上前缀"*" ;如果使用-histo:live,只统计活的对象数量。

8. Jhat命令 -> 分析dump文件,生成可视化页面:

jhat -J-Xmx30g filename.hprof

jhat -J-Xmx1g -port 442 /data/dump.hprof

9. 查看JVM参数:

9.1 查看已经被用户或者JVM设置过的所有参数命令:

java -XX:+PrintCommandLineFlags -version

9.2 查看JVM 所有参数命令 -> 主要查看修改更新:

java -XX:+PrintFlagsFinal -version

= 等号 是JVM默认加载的参数,有冒号:= 表示人为修改之后的参数

9.3 查看JVM 所有参数命令->查看JVM初始化默认值:

java -XX:+PrintFlagsInitial -version

9.4 查看某一java进程的JVM 配置:

jinfo -flags PID

9.5 查看某个进程JVM的某一参数命令:

jinfo -flag UseG1GC PID

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【技能实训】Day01

文章目录 任务1 项目准备一、开发环境二、系统简介三、项目创建 任务2【任务2.1】菜单项设计及其测试【任务2.2】使用数组存储采集的数据【任务2.3】控制显示采集的数据 任务1 项目准备 一、开发环境 1.JDK8下载及其环境变量配置(JDK8以上版本) 2.IDE :Eclipse 或…

多边形连接器PolygonConnector

PolygonConnector将多个多边形连接在一起 PolygonConnectorTest用于测试PolygonConnector Polygon test_square; Polygon test_square_around

关于IIS安全设置http能访问https不能访问的解决方案

最近折腾IIS,发现网站的http能访问但是https不能访问。 我确认所有关于HTTPS的配置我都配置正确了,结果还是不能访问,一番折腾发现,服务器本身的防火墙和阿里云服务器的安全组规则不是一回事。改完防火墙也没有用,重要…

【前端】网页开发精讲与实战 HTML Day 1

🚀Write In Front🚀 📝个人主页:令夏二十三 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:前端 💬总结:希望你看完之后,能对你有…

OpenCV使用ellipse()函数来绘制一个椭圆

/*** void ellipse(* InputOutputArray img, // 图像* Point center, // 椭圆原心* Size axes, // 椭圆x轴长度的一半,y轴长度的一半* double angle, // 椭圆旋转角度* double startAngle, // 起始角度* double endAngle, // 终止角度* const Scalar& color, // 椭圆颜色*…

整数序列(山东大学考研机试题)

整数序列 题目链接:3717. 整数序列 - AcWing题库 /* 纯暴力 刚开始以为挺难的结果是个暴力题 */ #include<iostream> using namespace std; int main() {int n;cin>>n;int f0;for(int i1;i<n/2;i){int sum 0;for(int ji;j<n/21;j){sumj;if(sumn){f1;for(int…

手机怎么设置四小时后提醒我休息,防止疲劳驾驶?

很多开车的人都知道&#xff0c;连续驾驶4个小时后需要至少休息20分钟&#xff0c;否则很容易出现疲劳驾驶的情况。但在开车的时候需要专注&#xff0c;很容易忘记按时休息&#xff0c;手机怎么设置四小时后提醒我休息&#xff0c;防止疲劳驾驶呢&#xff1f; 其实使用一款支持…

开放式耳机是什么意思?开放式耳机和封闭式耳机哪个好?

开放式耳机相比传统入耳式耳机&#xff0c;开放式耳机不会堵塞耳道&#xff0c;使用时可以开放双耳&#xff0c;不影响与他人的正常交流。还有很多朋友问开放式耳机和封闭式耳机哪个好&#xff1f;开放式耳机有哪些推荐好&#xff1f;等问题。 开放式耳机作为一种新兴的蓝牙耳…

String的hashCode为什么选择31作为乘子?

目录 hashCode()源码val[i] 是中文怎么办&#xff1f;如果是中文char的整数值是多少&#xff1f;注释中的计算方法为什么不用更大的数&#xff0c;比如101作为乘数&#xff1f;为啥用31了&#xff1f; hashCode()源码 先看下String类的源码&#xff0c;31出现在hashCode()方法…

Window操作系统---屏蔽蓝牙绝对音量

绝对音量定义&#xff1a; 关闭绝对音量方法&#xff1a;在系统注册表里修改 在运行输入框中输入&#xff1a;regedit 设置方法&#xff1a; 把DisableAbsoluteVolume的值改为&#xff1a;1

解释齐次坐标和投影几何

以前的翻译文章&#xff0c;存档。翻译自&#xff1a;https://www.tomdalling.com/blog/modern-opengl/explaining-homogenous-coordinates-and-projective-geometry/&#xff0c; 有改动 在本文中&#xff0c;我将尽可能简单地解释齐次坐标(即4D坐标)。在之前的文章中&#xf…

【MySQL练习及单表查询】

一、MySQL练习 一.创建表&#xff1a; 创建员工表employee&#xff0c;字段如下&#xff1a; id&#xff08;员工编号&#xff09; name&#xff08;员工名字&#xff09; gender&#xff08;员工性别&#xff09; salary&#xff08;员工薪资&#xff09; 二.插入数据 1&…

C++primer(第五版)第十四章(重载运算与类型转换)

14.1基本概念 重载运算符和重载其他函数差不多,运算符有多少参数,那么重载运算符就有多少参数.不同的是重载运算符有名字方面的限制,是operator加上运算符号.且除了函数调用运算符()之外,不允许有默认实参. 以上其中逻辑与运算符,逻辑或运算符,逗号运算符,取地址运算符不推荐…

多元分类预测 | Matlab偏小二乘PLS分类预测,多特征输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab偏小二乘PLS分类预测,多特征输入模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可出分类效果图,迭代优化图,混淆矩阵图。 部…

AutoHotkey配置鼠标光标在双屏幕之间瞬移

双屏幕带来的问题 使用双屏幕会带来两个问题&#xff1a;一个是窗口的切换移动不方便&#xff0c;另一个是鼠标的切换移动不方便。 如果需要将屏幕 A 的窗口快速移动到屏幕 B&#xff0c;可以用过 win shift 左右键来实现。 但是令人头疼的一个问题是鼠标还停留在屏幕 A&a…

Python 识别某验消消乐验证码

某验的消消乐验证码识别就很简单了,在一个九宫格里,找出相邻的两个元素交换后,保证有一行或者一列的元素相同,如下图: 如果这一个九宫格是一张图片的话,我们将其分割成9个部分,然后每一格都将其标注为一个类别就行,或者直接从源码中拿到9张图片,最终的话,是转成一个…

Devops系列六(CI篇之jenkinsfile)jenkins将gitlab helm yaml和argocd 串联,自动部署到K8S

一、为什么是jenkinsfile 上文我们说了pipeline&#xff0c;已为本文铺路不少&#xff0c;接下里就是将之串联起来。 先想说下&#xff0c;为什么是jenkinsfile, 因为jenkins job还支持pipeline方式。 这种方式&#xff0c;不建议实际使用&#xff0c;仅限于测试或调试groovy…

2 第一个springboot程序

2.1 创建springboot项目 有两种方法&#xff1a;一种是从官网上下载jar包&#xff0c;然后使用idea的import导入。另一种是直接在idea创建springboot项目。 2.1.1 方法一 进入spring官网&#xff08;Spring | Home&#xff09;。 点击projects的spring boot。 点击overview。 …

【java】空字符串“”和null区别,以及判空的方案

空字符串“” 1、类型&#xff1a;“”是一个空字符串&#xff08;String&#xff09;&#xff0c;长度为0&#xff0c;占内存&#xff0c;在内存中分配一个空间&#xff0c;可以使用Object对象中的方法。&#xff08;例如&#xff1a;“”.toString()等&#xff09; 2、内存分…

【Distributed】分布式监控系统zabbix应用(一)

文章目录 前言一、Zabbix基本概述1. Zabbix 的概念2. Zabbix 的工作原理3. Zabbix 6.0 新特性3.1 Zabbix 可以实现高可用3.2 Zabbix 新增监控系统 4. Zabbix 的构成5. Zabbix 的功能组件5.1 数据库5.2 Web 界面5.3 Zabbix Agent5.4 Zabbix Proxy5.5 Java Gateway 6. Zabbix 和 …