zoukankan      html  css  js  c++  java
  • Linux命令pmap

      jmap可以查看Java程序的堆内存使用情况,pmap可以查看Linux上运行的进程的内存使用情况。

      查看Linux上运行的进程的内存使用情况,可以使用jmap,top,ps命令。

      top命令本身也比较的耗资源,系统负载较大时不建议使用。

      ps命令的使用,可以如下:

      ps -aux | grep init  

    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME     COMMAND
    root 1    0.0 0.0 1584 536 ?    S     s  10:43 0:00 init [3]

      其中RSS 就是这个process 实际占用的物理内存,VSZ 就是process 的虚拟内存,就是process 现在没有使用但未来可能会分配的内存大小。

      ps 出来的结果,是有点不正确的,如果把所有程序的 RSS 加起来,恐怕比你的实际内存还要大呢。为什么呢??因为 ps 的结果,RSS 那部分,是包括共享内存的。

      linux 会把一些shared libraries 载入到内存中,在pmap 的输出中,这些shared libraries 的名字通常是 lib*.so 。如 libX11.so.6.2.0 。这个 libX11.so.6.2.0 会被很多process load 到自己的运行环境中,同时,ps 输出的RSS 结果中,每个process 都包含了这个libX11.so.6.2.0 ,而事实上它只被load 了一次,如果单纯把ps 的结果相加,这样就重复计算了。

      使用pmap可以看到进程实际使用的内存。  

    $ pmap -d 1980
     
    1980:   /usr/bin/yakuake
    Address   Kbytes Mode  Offset           Device    Mapping
    00110000    2524 r-x-- 0000000000000000 008:00002 libkio.so.5.3.0
    00387000       4 ----- 0000000000277000 008:00002 libkio.so.5.3.0
    00388000      32 r---- 0000000000277000 008:00002 libkio.so.5.3.0
    00390000      16 rw--- 000000000027f000 008:00002 libkio.so.5.3.0
    00394000     444 r-x-- 0000000000000000 008:00002 libQtDBus.so.4.5.2
    00403000       4 ----- 000000000006f000 008:00002 libQtDBus.so.4.5.2
    00404000       4 r---- 000000000006f000 008:00002 libQtDBus.so.4.5.2
    00405000       4 rw--- 0000000000070000 008:00002 libQtDBus.so.4.5.2
    00407000     228 r-x-- 0000000000000000 008:00002 libkparts.so.4.3.0
    00440000       8 r---- 0000000000039000 008:00002 libkparts.so.4.3.0
    00442000       4 rw--- 000000000003b000 008:00002 libkparts.so.4.3.0
    00443000    3552 r-x-- 0000000000000000 008:00002 libkdeui.so.5.3.0
    007bb000      76 r---- 0000000000377000 008:00002 libkdeui.so.5.3.0
    007ce000      24 rw--- 000000000038a000 008:00002 libkdeui.so.5.3.0
    007d4000       4 rw--- 0000000000000000 000:00000   [ anon ]
    ....
    mapped: 180472K    writeable/private: 19208K    shared: 20544K

      mapped的结果和ps命令中的VSZ 是一样的,writeable/private是进程实际使用的内存大小,shared 是该进程和其他进程共享的内存大小。

      pmap -x命令的结果和pmap -d命令中的mapped是一样的。

      pmap监测Java程序时,得到的是JVM所分配的内存大小,分析已经使用的内存情况就需要使用jmap来完成了。

      

  • 相关阅读:
    SpringMVC 2
    MySQL--事务,隔离性和隔离级别
    String.intern()
    初识消息队列--ActiveMq
    Java后台上传图片到七牛云
    Thread.interrupt(),Thread.isInterrupted(),Thread.interrupted()碎碎念
    Java基础--对象
    Java后台调用gcc编译C语言代码
    ToolProvider.getSystemJavaCompiler()方法空指针的排坑
    [LeetCode]29 两数相除和一个小坑点
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/5272771.html
Copyright © 2011-2022 走看看