java程序启动后就进行了7次younggc_JVM 调优-给你的java应用看看病

java 应用

1 cpu 负载过高

1.1 分析问题

  1. 首先我们通过top 命令进行分析,找出消耗最多cpu的java 进程id 。
  2. 找出对应的进程id 后,我们可以通过 top -Hp 进程id 命令来找出该进程中占用cpu最多的前几个线程id。
  3. 我们使用 jstack -l 进程pid > /tmp/java_pid.log 输出java的堆栈日志到文件 /tmp/java_pid.log。
  4. 我们将刚刚查询到的java进程中占用cpu最多的前几个线程id。进行转化为16进制。
printf "%X" 线程id 
  1. 我们在java堆栈日志文件中找到上面转化为16进制的线程的pid对应的 日志。
  2. 实际操作步骤流程图:
cd81235c56b5e94117f76f67065fd937.gif
  1. 补充:有时可能是我们代码创建线程过多导致的问题:
# 查看该进程有多少线程ps p 9534 -L -o pcpu,pmem,pid,tid,time,tname,cmd|wc -l

1.2 解决方案

我们把对应的线程id的日志拿给我们的开发,进行定位错误,这里容易定位出的错误是:
  1. 线程处于WAITING(等待状态)
  2. 线程BLOCKED(阻塞)
561687140147cc4f62e7e4d8dad1ac64.png

我可以把定位到代码位置,告诉开发,让开发查看对应的代码是否有问题。

2 内存占用过多

​ Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。

c1d0199a63db5cbd359cf7bb8f65a5be.png

这些组成部分一些是线程私有的,其他的则是线程共享的。

线程私有的:

  • 程序计数器
  • 虚拟机栈
  • 本地方法栈

线程共享的:

  • 方法区
  • 直接内存

2.1 从内存回收方面

​ Java 堆是垃圾收集器管理的主要区域,因此也被称作GC堆(Garbage Collected Heap).从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以Java堆还可以细分为:新生代和老年代:再细致一点有:Eden空间、From Survivor、To Survivor空间等。进一步划分的目的是更好地回收内存,或者更快地分配内存。

9637d50319bd7525c353463aa9bc2e9e.png

在 JDK 1.8中移除整个永久代,取而代之的是一个叫元空间(Metaspace)的区域(永久代使用的是JVM的堆内存空间,而元空间使用的是物理内存,直接受到本机的物理内存限制)。关于metaspace的详细讲解看:JVM源码分析之Metaspace解密

​ java 实际的内存使用是这样的,大多数情况下,对象在新生代中 eden 区分配。当 eden 区没有足够空间进行分配时,虚拟机将发起一次Minor GC(新生代GC).将eden 区的一些存活对象移动到Survivor 区,当Survivor区的大小,不够储存eden 区的存活对象时,那么就会将它移动到老年区(Old Generation ),当老年区满了时候将触发一次 Full GC .

​ 在实际工作中,我们可以使用 jmap -heap pid 来查看当前的进程的 java 堆的分布情况。

[root@iz23nb5ujp69 ~]# jmap -heap 11764Attaching to process ID 11764, please wait...Debugger attached successfully.Server compiler detected.JVM version is 25.73-b02using thread-local object allocation.Parallel GC with 2 thread(s)Heap Configuration: MinHeapFreeRatio = 0 #GC后&#
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值