关于JVM调优与实践

news/2024/11/7 19:57:04/文章来源:https://www.cnblogs.com/kun1790051360/p/18533782

1.如何开始JVM调优

——tomcat内部署war包

修改TOMCAT_HOME/bin/catalina.sh文件

JAVA_OPTS="-Xms512m -Xmx1024m"

——linux环境下jar包启动springboot项目

启动时使用

nohup java -Xms512m -Xmx1024m -jar x.jar --spring.profiles.active=prod &

nohup:在系统后天不挂断地运行命令,退出终端不影响程序运行

java:启动java虚拟机

-Xms512m:堆初始化大小为0.5GB

-Xmx1024m:堆最大大小为1GB

-jar x.jar:指定要运行的jar文件

--spring.profiles.active:表示启动时使用的是生产环境

&:让命令在后台执行,终端退出后命令仍执行

 

2.JVM都有哪些调优参数

JVM调优主要是调整年轻代,老年代,元空间的内存大小以及使用的垃圾回收器类型

# 堆设置
# 初始化内存推荐为物理内存的1/64;最大设置推荐为物理内存1/4
# 堆太小会导致频繁发生年轻代与老年代的垃圾回收,产生STW影响用户体验
# 堆太大也会存在风险,如果发生了fullgc,会产生一个长时间的STW
-Xms:堆的初始化大小
-Xmx:堆的最大大小 # 不指定单位默认为自己,单位有:k,m,g

# 虚拟机栈设置,每个线程默认开启1m内存:存放栈帧、参数、局部变量
-Xss256k 对线程的stack大小设置,一般推荐256/512k

# 调整eden和survivor区,默认情况下为8:2。增大eden区会减少YGC(youngGC)次数,但是STW时间会延长
-XXSurvivorRatio=8 # 表示年轻代的分配比例,该情况就是默认的survivor:eden=2:8
# 年轻代晋升老年代阈值 默认值为15,取值范围0~15
-XX:MaxTenuringThreshold=threshold


# 设置垃圾回收器
-XX:+UseParallelGC
-XX:+userParallelOldGC

-XX:+UseG1GC

 

3.JVM调优用到哪些工具

  • jps:进程状态信息
  • jstack:查看堆栈内的线程信息,这里的pid通过jps可获取
    • jstack [option] <pid>
  • jmap:用于生成堆转内存快照、内存使用情况
    • jmap -heap pid # 用于显示堆的信息
    • jmap -dump:format=b,flie=heap.hprof pid  # 该指令用于生成hprof文件,format=b表示以hprof二进制格式转储Java堆的新出,file=用于指定快照dump文件的名称
  • jstat:JVM统计监测工具,用来显示垃圾回收信息、类加载信息、新生代统计信息
    • jstat -gcutil pid # 以使用百分比的形式对垃圾回收统计
    • jstat -gc pid # 以实际大小的形式对垃圾回收统计

可视化工具

  • jconsole:对jvm的线程、内存、类的监控
  • visualVM:能够监控线程,内存情况,查看方法的CPU时间和内存对象。只有jdk8有,后续版本不自带,需要去官网下载

 

4.内存泄漏排查问题思路

--内存泄漏通常是指堆内存一些大对象不被回收的情况

通过jmap指令获取dump文件/通过vm参数获取dump文件

// vm指令
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/home/app/dumps/

使用visualVM加载dump文件:在文件选项卡中选择装入

通过查看堆信息,定位内存溢出为止

 

5.CPU飙升解决思路

linux通过top指令查看CPU占用排行榜

top

在通过ps查看进程中所有线程信息

ps H -eo pid,tid,%cpu | grep <pid>

通过tid获取16进制转换

printf"%x\n" <tid>

根据16进制tid通过jstack去查看线程nid具体信息

jstack <pid>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么编号应该从 0 开始

在常见的编程语言如 Python、Go、Java 中,序列的下标都是从 0 开始的,为什么不是从 1 开始呢? 迪杰斯特拉在 1982 年的时候就思考过编号起点的问题,那个时候还没有上面这 3 门语言呢。大概思路如下:序列下标是连续的整数,首先要考虑的就是怎么用区间范围表示连续的整数,…

编写高质量代码(手撕代码)

首先上几个面试题:(真难)1. 手写函数实现数组扁平化(只减少一级嵌套)思路:function flatten(arr) {let res = [];arr.forEach((item) => {if (Array.isArray(item)) {item.forEach((e) => res.push(e));} else {res.push(item);}});return res;}console.log(flatte…

LeetCode LCR135[报数]

LeetCode LCR135[报数]题目 链接 LeetCode LCR135[报数] 详情实例题解 思路 通过 pow 函数对10进行幂运算,来获取报数范围 然后循环遍历 通过 push_back 方法将数字加入到容器内 代码 class Solution { public:vector<int> countNumbers(int cnt) {vector<int> iR…

语音 AI 迎来爆发期,也仍然隐藏着被低估的机会丨RTE2024 音频技术和 Voice AI 专场

在人工智能快速发展的今天,语音交互技术正经历一场革命性的变革。从语音识别到语音合成,再到端到端的语音对话系统,这一领域的创新正以前所未有的速度推进。这些进步不仅提升了技术指标,更为实时翻译、虚拟数字人、智能客服等实时互动场景带来了新的可能。本届 RTE2024 大会…

节能攻略,AUTOSAR PN局部网络管理技术!

随着整车功能的不断演进,车上各类用电设备(控制器、执行机构、感知设备等)的用电功耗越来越大,为了降低整车能耗,国内外很多OEM及Tire1都在考虑相关的机制及方案,其中PN局部网络管理机制,以其简单、灵活的特点获得众多落地应用。 随着整车功能的不断演进,车上各类…

AUTOSAR解决方案 — INTEWORK-EAS-CP

INTEWORK-EAS-CP(ECU AUTOSAR Software)是经纬恒润自主研发的符合AUTOSAR标准的软件产品。解决方案涵盖了嵌入式标准软件、AUTOSAR工具链、集成服务和培训等各个方面的内容,旨在为国内的OEM和供应商提供稳定可靠、便捷易用的AUTOSAR平台。 随着汽车电子技术的发展,汽…

多校A层冲刺NOIP2024模拟赛19

讲个笑话: (讨论时间) huge:(叹气)这讨论啊,就是改不了,这换了铃声了,也没…… 众人:现在是讨论时间啊。 huge:(停顿)那刚才大课间那会哇啦哇啦的…… 图书管理 简要题意 给定一个长度为\(n(n\le 10^4)\)的排列,求\(\sum\limits_{l=1}^n\sum\limits_{r=l}^n[r-l为…

hive基础知识分享(二)

继续学习hive的相关知识写在前面 今天继续学习hive部分的知识。 以下是您提供的内容转成的 Markdown 格式: Hive 相关知识 hive中不同的 count 区别select clazz,count(distinct id) as cnt,count(*) as cnt,count(1) as cnt_1,count(id) as cnt_id from students group by cl…

Mysql数据库一

CREATE DATABASE 数据库名;//创建数据库 SHOW databases;//查看数据库列表 USE 数据库名;//选择数据库 DROP DATABASE 数据库名://删除数据库

做好网站后如何让这个网站被更多的人浏览查看?

许多人都有这样一个问题:做好自己的网站,如何让这个网站被更多的人浏览看,查看到呢?有人可能会说简单粗暴的方式:买百度排名,买广告排名。没错,这是一直最直接的方式,但问题是这里的成本还是比较多的,对于之前没有做过SEM的个人和企业来说,在哪里买,买多少合适,买多…

http server

我下载了 https://archive.apache.org/dist/httpd/httpd-2.4.62.tar.gz 请问如何解压配置一个apache server,并配置新增端口30000,转发到nginx 32020端口 ⚠️由于网站限制,Kimi 未能阅读这个网页中的要解压、配置Apache服务器,并设置端口转发到Nginx,你可以按照以下步骤操作…