首页 > 其他分享 >关于JVM调优与实践

关于JVM调优与实践

时间:2024-11-07 19:46:04浏览次数:1  
标签:pid jar 实践 XX 调优 线程 内存 JVM

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>

标签:pid,jar,实践,XX,调优,线程,内存,JVM
From: https://www.cnblogs.com/kun1790051360/p/18533782

相关文章

  • JVM【三】——垃圾回收GC
    堆空间的基本结构        Java的自动内存管理主要针对的是对象内存的回收和对象内存的分配,由于在JVM中存放对象的位置位于堆,是垃圾收集器管理的主要区域,因此堆也叫作GC堆(GarbageCollectedHeap)。在JDK7版本和JDK7版本以前,堆内存被通常分为以下三部分:新生代内存(You......
  • 高级java每日一道面试题-2024年10月29日-JVM篇-简述分代垃圾回收器是怎么工作的?
    如果有遗漏,评论区告诉我进行补充面试官:简述分代垃圾回收器是怎么工作的?我回答:在Java高级面试中,分代垃圾回收器的工作原理是一个重要的考点。下面将详细解释分代垃圾回收器是如何工作的:分代垃圾回收器的基本概念分代垃圾回收器是一种基于对象生命周期的垃圾回收方......
  • React-Router-Dom6 最佳实践
    React-Router-Dom6最佳实践一咻世界都变了​关注 6人赞同了该文章​展开目录 react-router-dom6使用之前只使用过一次react-router,目前官方从5开始就已经放弃了原有的react-router库,统一命名为 react-router-dom了实现......
  • 关于SQL_Errno:1677导致主从复制中断的思考和实践【转】
    1、简单介绍该错误发生的背景:1)数据库版本:MySQL5.7.192)对一个大表修改字段类型DDL(将主键idint变为bigint),为了不影响主库业务,先在从库上执行DDL操作,然后通过主从切换完成最终的大表DDL;在从库执行完DDL后,这时发现复制中断了,报错信息:12Last_SQL_Errno:1677Last_SQ......
  • 大数据治理----初步理解与实践
    目录前言一.什么是大数据治理?二.大数据治理的挑战1.数据标准化与规范化2.数据质量监控与清洗 3.数据隐私与安全管理4.元数据管理5.数据访问控制与共享三.前瞻与未来1.人工智能与机器学习驱动的数据治理2.区块链技术与数据治理3.多云与边缘计算环境下的数......
  • DevOps业务价值流:版本规划的最佳实践
    初入公司,面对瀑布研发模式下的冗长周期与频繁返工,我率先尝试局部敏捷迭代,但成效有限。随后,推动全面敏捷化,从需求阶段即开始规划,虽方向正确,却遭遇版本规划难题。项目经理与产品经理对敏捷理解不深,导致项目频繁延期。为此,我构建详尽版本发布规划流程,亲自带领团队实施,历经半年试运......
  • git基础使用,侧重实践与理解
    为了区分Linux操作系统的命令,git的所有命令都以git开头,后面跟着具体的命令。如gitinit就是初始化仓库。git下载安装、初始配置我们直接略过,直接开始使用新建git仓库(init)通过新文件来新建仓库,一步一步来新建git-learn文件,进入该文件,让git管理该文件(本质是生成一个.git......
  • 深入理解Java虚拟机 --- 初见JVM
    虚拟机是啥?所谓虚拟机(VirtualMachine),就是一台虚拟的计算机它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。大名鼎鼎的VMware就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。程序虚拟......
  • 数智化实践案例 | 高质数据、领先平台、报告加速,赋能决策
    深圳华强集团有限公司自1979年创建以来,乘着改革开放的春风持续推进转型升级,逐步成长为一家以高科技产业为主导的多元化投资控股集团,产业涵盖文化科技、电子信息、产城融合、新能源和产业金融服务等领域。40多年来,华强集团始终把企业的发展愿景与国家崛起、民族复兴的宏伟蓝......
  • 数智化实践案例 | 数据赋能业务决策,探索消费品行业财务数智化转型
    爱慕股份是中国知名品牌企业,公司通过全渠道布局渗透细分市场以获取较好的市场份额。截至2020年12月31日,公司零售网络由2156个线下销售终端和以天猫、唯品会为主的线上渠道所组成,其中公司线下直营终端达1725个,2020年直营渠道贡献营收占比59.28%。公司的线下零售网点......