• jvm内存问题诊断1


    运维网站上有个监控,可以看到我们服务器的内存,我们很惊奇的发现,我们的应用占据了越来越多的内存,而且上线15天以来,一直都在在上升,从最初的2G达到了现在的8G。

    难道这就是传说中的内存泄漏?

    于是一个诊断过程就此开启。

    首先从操作系统入手,我们用的是linux 64位的服务器,在同事的指导下我知道了top的命令。于是我就用ps找到pid,再用

    top –p 1111

    找到了内存结果:

    image

    一看,res 1.9G,注意res的全称是RESIDENT,不是RESERVED。看来确实占了不少内存。

    第二阶段开始。我想看看是什么东西占了内存,于是我用jvisualvm连上去看下。找了下资料,需要tomcat上开启jmx远程连接,看了眼catalina.sh居然已经开启了,当然线上机是有密码的,再仔细一看,密码居然存在一个文件里,刚好我可以看到这个问题。于是我用jvisualvm连了上去:

    image

    heap居然只用了不到1G,当然jvm的内存也不只是heap还有perm,stack什么的,perm我看了只有100M,stack不太好看,但是我只看到200个thread,就算每个占1M,也就200M,不会有决定性的变化。

    第三个阶段,那么有没有可能是我们用了heap之外的内存。nio之类。还好有jmap:

    image

    怎么样,都不大吧,怎么也不会搞到几个G。

    第四个阶段,我决定换个思路。也许我们的程序没有问题。接着发现jvm并不会立刻释放内存,和MaxHeapFreeRatio以及MinHeapFreeRatio有关。但是又发现如果xmx和xms一样,这个选项不生效。这就是说jvm压根儿就不想释放内存,到了xmx再说吧。

    总结一下,用top,jvisualvm,jmap来发现问题,后来发现是jvm参数的问题。

    Technorati Tags: jvm,memory,heap,top,jmap,jvisualvm
  • 相关阅读:
    博客地址
    node学习2
    正则表达式总结
    Git命令操作
    IDEA快捷键
    hibernate多对多(权限管理)
    所有国家的下拉框英文全称
    所有国家的下拉框英文简写
    所有国家的下拉框中文
    poj-1248 Safecracker
  • 原文地址:https://www.cnblogs.com/alphablox/p/3113556.html
Copyright © 2020-2023  润新知