在Linux下,當一個服務程式啟動,如何查看這個服務進程記憶體佔用情況?這裡簡單列出以下linux命令是如何查看的,查看出來的資訊表示什麼意思
1、首先你要找到你所有查看進程id,方法很多,這裡介紹本人常用的方法:
通過命令ps -ef查看當前系統所有進程資訊,然後找到自己關係的那個進程即可,當系統進程很多時,比較麻煩,加上grep命令進行刷選
root@dremi-desktop:~# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 11:41 ? 00:00:00 /sbin/initroot 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 bashroot 6270 6266 0 11:56 pts/1 00:00:00 -bashroot 6379 6270 0 12:00 pts/1 00:00:00 grep bashroot@dremi-desktop:~#
如果知道進程全稱,直接用這個命令最方便pidof 進程名稱
root@dremi-desktop:~# pidof bash5993root@dremi-desktop:~#
2、找到了進出id,下面直接查看該進程Runspace資訊,可以查/proc/pid/maps檔案,也可以通過pmap命令之間列印出來
root@dremi-desktop:~# cat /proc/5993/maps08048000-080ef000 r-xp 00000000 08:01 1605637 /bin/bash080ef000-080f5000 rw-p 000a6000 08:01 1605637 /bin/bash080f5000-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.sob7bdc000-b7bdd000 r--p 00009000 08:01 17500 /lib/tls/i686/cmov/libnss_files-2.11.1.sob7bdd000-b7bde000 rw-p 0000a000 08:01 17500 /lib/tls/i686/cmov/libnss_files-2.11.1.sob7bde000-b7be6000 r-xp 00000000 08:01 17504 /lib/tls/i686/cmov/libnss_nis-2.11.1.sob7be6000-b7be7000 r--p 00007000 08:01 17504 /lib/tls/i686/cmov/libnss_nis-2.11.1.sob7be7000-b7be8000 rw-p 00008000 08:01 17504 /lib/tls/i686/cmov/libnss_nis-2.11.1.sob7be8000-b7bfb000 r-xp 00000000 08:01 17494 /lib/tls/i686/cmov/libnsl-2.11.1.sob7bfb000-b7bfc000 r--p 00012000 08:01 17494 /lib/tls/i686/cmov/libnsl-2.11.1.sob7bfc000-b7bfd000 rw-p 00013000 08:01 17494 /lib/tls/i686/cmov/libnsl-2.11.1.soroot@dremi-desktop:~# pmap 59935993: bash08048000 668K r-x-- /bin/bash080ef000 24K rw--- /bin/bash080f5000 2164K rw--- [ anon ]b7bd2000 40K r-x-- /lib/tls/i686/cmov/libnss_files-2.11.1.sob7bdc000 4K r---- /lib/tls/i686/cmov/libnss_files-2.11.1.sob7bdd000 4K rw--- /lib/tls/i686/cmov/libnss_files-2.11.1.sob7bde000 32K r-x-- /lib/tls/i686/cmov/libnss_nis-2.11.1.sob7be6000 4K r---- /lib/tls/i686/cmov/libnss_nis-2.11.1.sob7be7000 4K rw--- /lib/tls/i686/cmov/libnss_nis-2.11.1.sob7be8000 76K r-x-- /lib/tls/i686/cmov/libnsl-2.11.1.sob7bfb000 4K r---- /lib/tls/i686/cmov/libnsl-2.11.1.sob7bfc000 4K rw--- /lib/tls/i686/cmov/libnsl-2.11.1.so
上面顯示結果表示的意思,下面會作介紹,
通常我習慣用這兩種方法:
root@dremi-desktop:~# cat /proc/`pidof bash`/maps08048000-080ef000 r-xp 00000000 08:01 1605637 /bin/bash080ef000-080f5000 rw-p 000a6000 08:01 1605637 /bin/bash080f5000-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.sob7bdc000-b7bdd000 r--p 00009000 08:01 17500 /lib/tls/i686/cmov/libnss_files-2.11.1.sob7bdd000-b7bde000 rw-p 0000a000 08:01 17500 /lib/tls/i686/cmov/libnss_files-2.11.1.soroot@dremi-desktop:~# pmap `pidof bash`599308048000 668K r-x-- /bin/bash080ef000 24K rw--- /bin/bash080f5000 2164K rw--- [ anon ]b7bd2000 40K r-x-- /lib/tls/i686/cmov/libnss_files-2.11.1.sob7bdc000 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]的記憶體區間表示是堆。