jvm调优策略

客官°小女子只卖身不卖艺 2022-07-17 02:40 284阅读 0赞

jvm常用调优工具有:Jconsole,jProfile,VisualVM
Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。详细说明参考这里
JProfiler:商业软件,需要付费。功能强大。
VisualVM:JDK自带,功能强大,与JProfiler类似,推荐。
一般情况下调优都会首先看算法,多线程,集群。也就是常说的我们优化,首先要考虑的就是代码的优化,我原来遇到一个问题,一个经常提供服务的系统必须一天自动重启一次,还要手动GC,否则其他的系统就无法调用这个系统的服务,而且抛出的异常也是out of momery,是一个很常见的错误,我们这样开始分析。

代码

首先,我们用VisualVM进行查看发现,将推内存dump下来
这里写图片描述
发现底层实例化了很多hashmap
这里写图片描述
hashmap每次创建都会有缓存,当我们就将hashmap去掉后发现依然会抛出out of memory,只不过时间延长了,比原来没有去掉更晚抛出oom,治标不治根,我们用这个框架的同时,还有其他项目也用了这个框架,但是他们那个项目却没有出现这个问题,于是比较不同,发现我们的项目因为比较大,所以用的标签@ManytoOne比较多,当我们把这个标签用其他的方式替换后,发现不再抛出oom的错误,所以验证了第一点,代码的重要性,我们所有关于调优的出发点都是先看代码,因为代码是多人合作开发,每个人的习惯不同,可能会有各种各样的问题。
有了堆信息查看方面的功能,我们一般可以顺利解决以下问题:

–年老代年轻代大小划分是否合理

–内存泄漏

–垃圾回收算法设置是否合理

多线程

还是通过工具进行查看:
这里写图片描述
根据工具我们可以监控到以下的信息:
线程信息监控:系统线程数量。
线程状态监控:各个线程都处在什么样的状态下

总结

调优是一个比较大的概念,oom的情况有好多,比如是堆溢出?还是栈溢出?再比如stackoverflow,又是怎样发现的?这些情况的发生原因比较多变,我们可以通过工具来分析,但是又有个问题,如果现在是在生产环境上产生这个问题,因为这些工具非常耗资源,所以为了不影响生产环境,那又得用其他方式是检测,怎么做呢?

发表评论

表情:
评论列表 (有 0 条评论,284人围观)

还没有评论,来说两句吧...

相关阅读

    相关 jvm性能策略

    JVM 调优的本质: 并不是显著的提高系统性能,不是说你调了,性能就能提升几倍或者上十倍, JVM 调优,主要调的是稳定。 如果你的系统出现了频繁的垃圾回收,这个

    相关 JVM

    一、JVM调优的监控方法 jvm在对进行问题排查,线程等关注问题,在理解jvm的内存分配和垃圾回收,java类的编译和加载等等理论知识的前提下要学会使用工具去观察jvm中的实

    相关 JVM

    1. 年轻代大小选择 (1) 响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到

    相关 spark JVM

    我们的堆内存分为:新生代,和年老代, 年轻代又分为:Eden区,幸存一区,幸存二区, 每一次访对象的时候,都是放入eden区域,和其中的一个幸存一区中,幸存二区是不放对象的

    相关 JVM

    前提: 某大型跨境电商业务发展非常快,线上机器扩容也很频繁,但是对于线上机器的运行情况,特别是jvm内存的情况,一直没有一个统一的标准来给到各个应用服务的owner。经过6

    相关 JVM

    年轻代大小选择 响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对

    相关 JVM

    JVM调优是所有初级程序员向高级迈入的必经之路,而这个过程又需要许多JVM内存知识。下面就总结一二,和大家分享一下: 1.JVM内存模型 JVM内存模型如下图所示: