网站首页 > 精选教程 正文
1、JVM调优的参数可以在哪里设置参数值
通常在Linux系统下之间加参数启动sringboot项目
nohup java -Xms512m -Xmx 1024m -jar xxx.jar --spring.profiles.active=prod &
# nohup :用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
# 参数&:让命令在后台执行,终端退出后命令仍旧执行
总结:
war包部署在tomcat中设置
修改TOMCAT_HOME/bin/catalina.sh文件
jar包部署在启动参数设置
nohup java -Xms512m -Xmx 1024m -jar xxx.jar --spring.profiles.active=prod &
2、JVM调优的参数都有哪些
对于JVM调优,主要就是调整年轻代、老年代、元空间的内存空间大小及使用的垃圾回收器类型。
- 设置堆空间大小
设置堆的初始大小和最大大小,为了防止垃圾收集器在初始大小、最大大小之间收缩堆而产生额外的时间,通常把最大、初始大小设置为相同的值。
-Xms:设置堆的初始化大小,如:1024k/m/g
-Xmx:设置堆的最大大小,如:1024k/m/g
如果不指定单位,默认为字节,指定单位,按照指定的单位设置
堆空间设置多少合适?
最大大小的默认值是物理内存的1/4,初始大小是物理内存的1/64
堆太小,可能会频发的导致年轻代和老年代的垃圾回收,会产生stw,暂停用户线程
对内存大肯定是好的,存在风险,假如发了fullGC,它会扫描整个堆空间,暂停用户线程的时间长
设置参数推荐:尽量大,也要考察一下当前计算机其他程序的内存使用情况
- 虚拟机栈的设置
每个线程默认会开启1M的内存,用于存放栈帧、调用参数、局部变量等,但一般256k就够用,通常减少每个线程的堆栈,可以产生更多的线程,但这实际上海受限于操作系统。
-Xss 对每个线程stack大小的调整,-Xss138k
- 年轻代中Eden区和两个Survivor区(幸存区)的大小比例
设置年轻代中Eden区和两个Survivor区的大小比例。该值如果不设置,则默认比例为8:1:1。通过增大Eden区的大小,来减少YGC发生的次数,但有时发现,虽然次数减少了,但Eden区满的时候,由于占用的空间较大,导致释放缓慢,此时STW的时间较长,因此需要按照程序情况调优。
-XXSurvivorRatio=8,表示年轻代中的分配比率;survivor:eden = 2.8
- 年轻代晋升老年代阈值
-XX:MaxTenuringThreashold=threshold
默认为15
取值范围0-15
- 设置垃圾回收收集器
通过增大吞吐量提高系统性能,可以通过设置并行垃圾回收收集器
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-xx:+UseG1GC
3、JVM调优工具
1、命令工具:
jps 进程状态信息
jstack 查看Java进程内线程的堆栈信息
jmap 查看堆转信息
jhat 堆转存储快照分析工具
jstat JVM统计检测工具
2、可视化工具
jconsole 用于对JVM的内存、线程、类的监控
VisualVM 能够监控线程、内存情况
3、阿里工具阿尔萨斯
4、内存泄露排查思路
内存泄露同城是指堆内存,通常是一些大对象不被回收的情况
1、通过jmap或设置jvm参数获取堆内存快照dump
2、通过工具,VisualVM去分析dump文件,VisualVM可以加载离线的dump文件
3、通过查看堆信息的情况,可以大概定位内存溢出是哪行代码处理问题
4、找到对应的代码,通过阅读上下文的情况,进行修复即可
5、CPU飙高的排查方案与思路
5.1、使用top命令查看占用CPU的情况
# 拿到占用高的进程ID top
5.2、通过top命令查看后,可以查看是哪个进程占用CPU较高
一般top命令排在第一位的是占用较高的那个,也可以搜索具体的应用名称
5.3、使用ps命令查看进程中的线程信息
# 通过上步拿到的进程id查询线程ID
ps H -eo pid,tid,%cpu | grep 进程id
5.4、使用jstack命令查看进程中哪些线程出现了问题,最终定位问题
jstack 线程ID
jstack 命令显示内容中是十进制的地址,需要获取到十进制的线程ID,可以通过Linux命令获取,如下:
printf "%x\n" 线程ID
然后就可以通过这个十进制的线程ID在jstack命令结果文档走搜索具体问题信息了。
猜你喜欢
- 2024-11-01 关于启动电容器的匹配 启动电容器怎么接线
- 2024-11-01 冷水机的基本运行参数包括哪些? 冷水机参数含义
- 2024-11-01 Java线程池解读:从入门到精通,核心参数全掌握!
- 2024-11-01 使用Java编写求和的代码 使用java编写求和的代码是什么
- 2024-11-01 稳压器启动电流多大? 稳压器输出多少正常
- 2024-11-01 Java容器化参数配置最佳实践 java容器有哪几种
- 2024-11-01 Java变量 java变量的数据类型分为两种
- 2024-11-01 深入理解JVM运行原理:从内存布局到执行流程的全面解析
- 2024-11-01 丹佛斯VLT2900变频器维修后试运行参数设置方法及教...
- 2024-11-01 Java 21:有什么新变化? java+21:有什么新变化?举例说明
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)