zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Duilib 入门教程: 怎么创建一个自定义的窗口
    从屏幕右下角升起的弹窗
    最小化窗口至右下角
    MFC 使程序不在任务栏显示
    创建数据库
    sqlite入门基础(一):sqlite3_open,sqlite3_exec,slite3_close
    VC++、MFC中最好的开源项目
    在MFC中,利用GDI绘制橡皮筋效果-直线,圆,椭圆,矩形
    WCHAR char CString等常用类型互转
    CGAL 计算机几何算法库
  • 原文地址:https://www.cnblogs.com/alphablox/p/3113556.html
Copyright © 2011-2022 走看看