linux pmap,linux下的ps和pmap

linux pmap,linux下的ps和pmap今天有客户需要对系统进程进行内存跟踪于是尝试使用了几个 linux 内存跟踪工具首先 ps 一下看看系统跑着哪些 process root oracle10g psauxUSERPID CPU MEMVSZRSSTTY 00 0 SsSep100 01init 5 root20 00

今天有客户需要对系统进程进行内存跟踪

于是尝试使用了几个linux内存跟踪工具

首先,ps一下看看系统跑着哪些process

[root@oracle10g ~]# ps aux

USER PID %CPU %MEM VSZ RSS

TTY STAT START TIME COMMAND

root 1 0.0 0.0 10348 684

? Ss Sep10 0:01 init

[5] root 2 0.0 0.0 0 0

? S

root 3 0.0 0.0 0 0

? SN Sep10 0:00 [ksoftirqd/0]

。。。。。。。。。。。

root 9438 0.0 0.0 12740 1136

pts/2 T 17:40 0:00 top

喔,不少进程!拿出top进程为例

中,关于内存的是 VSZ 和 RSS 这两个

man ps 看看它们的含义:

rss RSS resident

set size, the non-swapped physical memory that a task has used (in

kiloBytes). (alias rssize, rsz).

vsz VSZ virtual

memory size of the process in KiB (1024-byte units). Device

mappings are currently excluded; this is subject to change. (alias

vsize).

简单一点说,RSS 就是这个process 实际占用的物理内存,VSZ 就是process 的虚拟内存,就是process

现在没有使用但未来可能会分配的内存大小。

其实这里的ps出来的结果,是有点不正确的,如果把所有程序的 RSS 加起来,恐怕比你的实际内存还要大。为什么呢?因为 ps

的结果,RSS 那部分,是包括共享内存的。这里我用pmap来看看。

[root@oracle10g ~]# pmap -d 9438

9438: top

Address Kbytes Mode Offset Device Mapping

0000000000 56 r-x– 0000000000000000 008:00002 top

000000000060e000 4 rw— 000000000000e000 008:00002 top

000000000060f000 12 rw— 000000000060f000

000:00000 [ anon ]

00000000055fb000 264 rw— 00000000055fb000

000:00000 [ anon ]

0000003d 112 r-x– 0000000000000000 008:00002 ld-2.5.so

0000003d3381b000 4 r—- 000000000001b000 008:00002 ld-2.5.so

0000003d3381c000 4 rw— 000000000001c000 008:00002 ld-2.5.so

0000003d33a00000 1336 r-x– 0000000000000000 008:00002 libc-2.5.so

0000003d33b4e000 2044 —– 000000000014e000 008:00002 libc-2.5.so

0000003d33d4d000 16 r—- 000000000014d000 008:00002 libc-2.5.so

0000003d33d51000 4 rw— 0000000000 008:00002 libc-2.5.so

0000003d33d52000 20 rw— 0000003d33d52000

000:00000 [ anon ]

0000003d33e00000 52 r-x– 0000000000000000 008:00002 libproc-3.2.7.so

0000003d33e0d000 2048 —– 000000000000d000 008:00002 libproc-3.2.7.so

0000003d3400d000 4 rw— 000000000000d000 008:00002 libproc-3.2.7.so

0000003d3400e000 80 rw— 0000003d3400e000

000:00000 [ anon ]

0000003d 8 r-x– 0000000000000000 008:00002 libdl-2.5.so

0000003d 2048 —– 0000000000002000 008:00002 libdl-2.5.so

0000003d 4 r—- 0000000000002000 008:00002 libdl-2.5.so

0000003d 4 rw— 0000000000003000 008:00002 libdl-2.5.so

0000003d46c00000 316 r-x– 0000000000000000 008:00002 libncurses.so.5.5

0000003d46c4f000 2044 —– 000000000004f000 008:00002 libncurses.so.5.5

0000003d46e4e000 56 rw— 000000000004e000 008:00002 libncurses.so.5.5

0000003d46e5c000 4 rw— 0000003d46e5c000

000:00000 [ anon ]

00002aabfbd69000 8 rw— 00002aabfbd69000

000:00000 [ anon ]

00002aabfbd8e000 12 rw— 00002aabfbd8e000

000:00000 [ anon ]

00002aabfbd91000 40 r-x– 0000000000000000 008:00002 libnss_files-2.5.so

00002aabfbd9b000 2044 —– 000000000000a000 008:00002 libnss_files-2.5.so

00002aabfbf9a000 4 r—- 0000000000009000 008:00002 libnss_files-2.5.so

00002aabfbf9b000 4 rw— 000000000000a000 008:00002 libnss_files-2.5.so

00007fffbecd1000 84 rw— 00007ffffffea000

000:00000 [ stack ]

ffffffffff 8192 —– 0000000000000000

000:00000 [ anon ]

mapped:

20932K writeable/private:

564K shared:

0K

linux 会把一些shared libraries 载入到内存中,在pmap的输出中,这些shared libraries

的名字通常是 lib*.so。会被很多process load

到自己的运行环境中。同时ps输出的RSS中,每个process都包含了这个lib*.so,而事实上它只被load

了一次,如果单纯把ps的结果相加,这样就重复计算了。而 pmap 的输出中,writeable/private: 564K

,这个就是top真正占用的物理内存,不包含shared libraries 。在这里,它只有564K,而ps 的RSS

是1136K。

os很多参数和命令都值得深入研究,自己越学越觉得自己的弱小,加油吧!

再加上几个内存命令:

1、top命令

top -d 1 -p pid [,pid …]//设置为delay 1s,默认是delay 3s

如果想根据内存使用量进行排序,可以shift + m(Sort by memory usage)

1、pmap命令

pmap pid

2、ps命令

ps aux|grep process_name

3、查看/proc/process_id/文件夹下的status文件

任务虚拟地址空间的大小 VmSize

应用程序正在使用的物理内存的大小 VmRSS

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210841.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午11:47
下一篇 2026年3月18日 下午11:48


相关推荐

  • es5和es6的区别

    es5和es6的区别最近在看阮一峰的 ECMAScript6 入门 讲真 这本书对初学者真的很有帮助 在这里也推荐给大家 接下来 我要说的一些例子也大多来源于这本书 如果对这本书感兴趣的小伙伴 也可以戳这里哦 想必大家都对 es 有所了解 对于 es5 和 es6 之间的区别还是知道一部分的 但为了更好的帮助我们理解 我决定还是整理一下两者的区别 也算是对之前面试的一个交代吧 1 新增 let 命令在 es6 之前 我们声明

    2026年3月19日
    2
  • 嵌入式软件工程师面试题及答案

    嵌入式软件工程师面试题及答案题目一上个星期 去深圳一家搞 ARM 开发的公司面试 HR 叫我做了一份卷子 里面都是 C 编程 心中暗喜 因为这些题基本上都在程序员面试宝典里见过 后来回到学校 在网上搜索 原来这些题都是嵌入式工程师的经典面试题目 很多网站上都可以找得到 现把他贴出来 附上网上的答案 跟大家分享 因为这些题实在太经典了 预处理器 Preprocessor 1 用预处理指令 define 声明一个常数 用以

    2026年3月18日
    1
  • 解决WinHTTP Web Proxy Auto-Discovery Service无法启动问题

    解决WinHTTP Web Proxy Auto-Discovery Service无法启动问题需要启动该服务的起因是需要抓包,所以下载了charles,但无任何抓包信息,也没有错误提示,未查到原因。遂又下载了fiddler,此时启动会提示“FailedtoregisterFiddlersasthesystemproxy”,上网查原因是WinHTTPWebProxyAuto-DiscoveryService该服务没有启动,到服务中查询确实如此。解决方案(此为对我生效的解决方案,关联服务未启动等其他问题导致也是有可能的):win+Rregedit打开注册表,找到\HK

    2022年6月21日
    913
  • StrictMode使用

    StrictMode使用【IT168技术】最新的Android平台中(Android2.3起),新增加了一个新的类,叫StrictMode(android.os.StrictMode)。这个类可以用来帮助开发者改进他们编写的应用,并且提供了各种的策略,这些策略能随时检查和报告开发者开发应用中存在的问题,比如可以监视那些本不应该在主线程中完成的工作或者其他的一些不规范和不好的代码。  StrictMode有多种不

    2022年6月10日
    53
  • pycharm导包错误

    pycharm导包错误如果自己包的名称和 python 自有或者第三方包的名称相同 那首先就会从自己的包里面去找 就 import 错误

    2026年3月18日
    2
  • [leetcode]Best Time to Buy and Sell Stock II @ Python

    [leetcode]Best Time to Buy and Sell Stock II @ Python

    2021年8月29日
    125

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号