在Linux下,当一个服务程序启动,如何查看这个服务进程内存占用情况?这里简单列出以下linux命令是如何查看的,查看出来的信息表示什么意思
1、首先你要找到你所有查看进程id,方法很多,这里介绍本人常用的方法:
通过命令ps -ef查看当前系统所有进程信息,然后找到自己关系的那个进程即可,当系统进程很多时,比较麻烦,加上grep命令进行刷选
root@dremi-desktop:~# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:41 ? 00:00:00 /sbin/init
root 2 0 0 11:41 ? 00:00:00 [kthreadd]
root 3 2 0 11:41 ? 00:00:00 [migration/0]
root 4 2 0 11:41 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 11:41 ? 00:00:00 [watchdog/0]
root 6 2 0 11:41 ? 00:00:00 [events/0]
root 7 2 0 11:41 ? 00:00:00 [khelper]
root 42 2 0 11:41 ? 00:00:00 [kblockd/0]
如:
root@dremi-desktop:~#ps -ef | grep bash
dremi 5993 5990 0 11:44 pts/0 00:00:00 bash
root 6270 6266 0 11:56 pts/1 00:00:00 -bash
root 6379 6270 0 12:00 pts/1 00:00:00 grep bash
root@dremi-desktop:~#
如果知道进程全称,直接用这个命令最方便pidof 进程名称
root@dremi-desktop:~# pidof bash
5993
root@dremi-desktop:~#
root@dremi-desktop:~# cat /proc/5993/maps
08048000-080ef000 r-xp 00000000 08:01 1605637 /bin/bash
080ef000-080f5000 rw-p 000a6000 08:01 1605637 /bin/bash
080f5000-08312000 rw-p 080f5000 00:00 0 [heap]
b7bd2000-b7bdc000 r-xp 00000000 08:01 17500 /lib/tls/i686/cmov/libnss_files-2.11.1.so
b7bdc000-b7bdd000 r--p 00009000 08:01 17500 /lib/tls/i686/cmov/libnss_files-2.11.1.so
b7bdd000-b7bde000 rw-p 0000a000 08:01 17500 /lib/tls/i686/cmov/libnss_files-2.11.1.so
b7bde000-b7be6000 r-xp 00000000 08:01 17504 /lib/tls/i686/cmov/libnss_nis-2.11.1.so
b7be6000-b7be7000 r--p 00007000 08:01 17504 /lib/tls/i686/cmov/libnss_nis-2.11.1.so
b7be7000-b7be8000 rw-p 00008000 08:01 17504 /lib/tls/i686/cmov/libnss_nis-2.11.1.so
b7be8000-b7bfb000 r-xp 00000000 08:01 17494 /lib/tls/i686/cmov/libnsl-2.11.1.so
b7bfb000-b7bfc000 r--p 00012000 08:01 17494 /lib/tls/i686/cmov/libnsl-2.11.1.so
b7bfc000-b7bfd000 rw-p 00013000 08:01 17494 /lib/tls/i686/cmov/libnsl-2.11.1.so
root@dremi-desktop:~# pmap 5993
5993: bash
08048000 668K r-x-- /bin/bash
080ef000 24K rw--- /bin/bash
080f5000 2164K rw--- [ anon ]
b7bd2000 40K r-x-- /lib/tls/i686/cmov/libnss_files-2.11.1.so
b7bdc000 4K r---- /lib/tls/i686/cmov/libnss_files-2.11.1.so
b7bdd000 4K rw--- /lib/tls/i686/cmov/libnss_files-2.11.1.so
b7bde000 32K r-x-- /lib/tls/i686/cmov/libnss_nis-2.11.1.so
b7be6000 4K r---- /lib/tls/i686/cmov/libnss_nis-2.11.1.so
b7be7000 4K rw--- /lib/tls/i686/cmov/libnss_nis-2.11.1.so
b7be8000 76K r-x-- /lib/tls/i686/cmov/libnsl-2.11.1.so
b7bfb000 4K r---- /lib/tls/i686/cmov/libnsl-2.11.1.so
b7bfc000 4K rw--- /lib/tls/i686/cmov/libnsl-2.11.1.so
上面显示结果表示的意思,下面会作介绍,
通常我习惯用这两种方法:
root@dremi-desktop:~# cat /proc/`pidof bash`/maps
08048000-080ef000 r-xp 00000000 08:01 1605637 /bin/bash
080ef000-080f5000 rw-p 000a6000 08:01 1605637 /bin/bash
080f5000-08312000 rw-p 080f5000 00:00 0 [heap]
b7bd2000-b7bdc000 r-xp 00000000 08:01 17500 /lib/tls/i686/cmov/libnss_files-2.11.1.so
b7bdc000-b7bdd000 r--p 00009000 08:01 17500 /lib/tls/i686/cmov/libnss_files-2.11.1.so
b7bdd000-b7bde000 rw-p 0000a000 08:01 17500 /lib/tls/i686/cmov/libnss_files-2.11.1.so
root@dremi-desktop:~# pmap `pidof bash`
5993
08048000 668K r-x-- /bin/bash
080ef000 24K rw--- /bin/bash
080f5000 2164K rw--- [ anon ]
b7bd2000 40K r-x-- /lib/tls/i686/cmov/libnss_files-2.11.1.so
b7bdc000 4K r---- /lib/tls/i686/cmov/libnss_files-2.11.1.so
3、显示的信息表示的意思:
每个区间都有四个属性:
r 表示可以读取。
w 表示可以修改。
x 表示可以执行。
p/s 表示是否为共享内存。
有文件名的内存区间,属性为r—p表示存放的是rodata。
有文件名的内存区间,属性为rw-p表示存放的是bss和data
有文件名的内存区间,属性为r-xp表示存放的是text数据。
没有文件名的内存区间,表示用mmap映射的匿名空间。
文件名为[stack]的内存区间表示是栈。
文件名为[heap]的内存区间表示是堆。