iT邦幫忙

DAY 21
2

蠻可愛的指令與程式系列 第 21

查看process記憶體使用情況的指令pmap與搭檔pgrep

一般大家熟悉使用 ps aux | grep process-name

這樣的方式來查找出process 對應的 pid.

其實Linux有提供一個 pgrep,可以更方便的找出pid.

例如:

pgrep firefox
3643

pgrep mysql
2038
2449

上面mysql 有兩個,我們可以使用 -l參數
pgrep -l mysql
2038 mysqld_safe
2449 mysqld

這樣就能區分mysqld_safe與mysqld

也可以更詳細一點

pgrep -lf mysql
2038 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
2449 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --port=3306


也可以指定user,例如

pgrep -u root -lf ssh
1998 /usr/sbin/sshd

現在能方便查找出pid,接著來看一下應用方式.
為了說明起見,我另外開了終端機,登入MySQL.

使用pmap 查看 MySQL記憶體使用情況:

 pmap `pgrep mysql`
2038:   /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
 total                0K
2449:   /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --port=3306
 total                0K
10140:   mysql -u julia -p julia
0000000000400000   3100K r-x--  /usr/bin/mysql
0000000000907000    884K rw---  /usr/bin/mysql
00000000009e4000     44K rw---    [ anon ]
0000000000be3000     12K rw---  /usr/bin/mysql
0000000000ea9000   1876K rw---    [ anon ]
0000003c67400000    128K r-x--  /lib64/ld-2.12.so
0000003c6761f000      4K r----  /lib64/ld-2.12.so
0000003c67620000      4K rw---  /lib64/ld-2.12.so
0000003c67621000      4K rw---    [ anon ]
0000003c67800000   1576K r-x--  /lib64/libc-2.12.so
0000003c6798a000   2048K -----  /lib64/libc-2.12.so
0000003c67b8a000     16K r----  /lib64/libc-2.12.so
0000003c67b8e000      4K rw---  /lib64/libc-2.12.so
0000003c67b8f000     20K rw---    [ anon ]
0000003c67c00000      8K r-x--  /lib64/libdl-2.12.so
0000003c67c02000   2048K -----  /lib64/libdl-2.12.so
0000003c67e02000      4K r----  /lib64/libdl-2.12.so
0000003c67e03000      4K rw---  /lib64/libdl-2.12.so
0000003c68000000     92K r-x--  /lib64/libpthread-2.12.so
0000003c68017000   2048K -----  /lib64/libpthread-2.12.so
0000003c68217000      4K r----  /lib64/libpthread-2.12.so
0000003c68218000      4K rw---  /lib64/libpthread-2.12.so
0000003c68219000     16K rw---    [ anon ]
0000003c68400000    524K r-x--  /lib64/libm-2.12.so
0000003c68483000   2044K -----  /lib64/libm-2.12.so
0000003c68682000      4K r----  /lib64/libm-2.12.so
0000003c68683000      4K rw---  /lib64/libm-2.12.so
0000003c68c00000     28K r-x--  /lib64/librt-2.12.so
0000003c68c07000   2044K -----  /lib64/librt-2.12.so
0000003c68e06000      4K r----  /lib64/librt-2.12.so
0000003c68e07000      4K rw---  /lib64/librt-2.12.so
0000003c6c000000     88K r-x--  /lib64/libgcc_s-4.4.7-20120601.so.1
0000003c6c016000   2044K -----  /lib64/libgcc_s-4.4.7-20120601.so.1
0000003c6c215000      4K rw---  /lib64/libgcc_s-4.4.7-20120601.so.1
0000003c6ec00000    928K r-x--  /usr/lib64/libstdc++.so.6.0.13
0000003c6ece8000   2048K -----  /usr/lib64/libstdc++.so.6.0.13
0000003c6eee8000     28K r----  /usr/lib64/libstdc++.so.6.0.13
0000003c6eeef000      8K rw---  /usr/lib64/libstdc++.so.6.0.13
0000003c6eef1000     84K rw---    [ anon ]
0000003c77c00000    136K r-x--  /lib64/libncurses.so.5.7
0000003c77c22000   2044K -----  /lib64/libncurses.so.5.7
0000003c77e21000      4K rw---  /lib64/libncurses.so.5.7
0000003c79000000    116K r-x--  /lib64/libtinfo.so.5.7
0000003c7901d000   2048K -----  /lib64/libtinfo.so.5.7
0000003c7921d000     16K rw---  /lib64/libtinfo.so.5.7
00007f13aaade000  96828K r----  /usr/lib/locale/locale-archive
00007f13b096d000     48K r-x--  /lib64/libnss_files-2.12.so
00007f13b0979000   2048K -----  /lib64/libnss_files-2.12.so
00007f13b0b79000      4K r----  /lib64/libnss_files-2.12.so
00007f13b0b7a000      4K rw---  /lib64/libnss_files-2.12.so
00007f13b0b7b000     24K rw---    [ anon ]
00007f13b0ba1000     28K r--s-  /usr/lib64/gconv/gconv-modules.cache
00007f13b0ba8000      8K rw---    [ anon ]
00007fff925a6000     84K rw---    [ stack ]
00007fff925c5000      4K r-x--    [ anon ]
ffffffffff600000      4K r-x--    [ anon ]
 total           127284K

pid 10140 負責與登入的Client溝通,記憶體使用情形如上.

但是上面的指令把原本的mysqld_safe與mysqld,也一併列出,
我們可以使用 -n 參數,找出最新的.

pmap `pgrep -n mysql`

因為內容與上面部份重複,結果不列出.

pgrep 還可以搭配htop,或是top使用.

例如我們只要專注mysql,這是看最新的mysql

htop -p `pgrep -n mysql`

結果如:

或是可以看目前所有的mysql

htop -p $(pgrep -d ' -p ' mysql)

結果如:

top的方式類似

top -p $(pgrep -d ' -p ' mysql)

結果如圖:

指令搭配使用,更有彈性,方便.


上一篇
查看網路連線狀況的指令 ss
下一篇
效能監看工具nmon介紹1
系列文
蠻可愛的指令與程式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言