Linux资源监控命令/工具(调试)

1、直接将指令丢到背景中执行:& 
[root@linux ~]# tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 & 
[1] 24984 
[root@linux ~]# <==可以继续作业,不受影响!这就是前景! 
完成的时候会显示: 
[1]+ Done tar -zpcf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1

 

2、将目前的工作丢到背景中暂停:[ctrl]-z (挂起,并没有在后台执行) 
[root@linux ~]# vi ~/.bashrc 
# 在vi的一般模式下,按下[ctrl]-z这两个按键 
[1]+ Stopped /usr/bin/vim ~/.bashrc 
[root@linux ~]# <==顺利取得了前景的操控权

 

3、观察目前的背景工作状态:jobs 
[root@linux ~]# jobs [-lrs] 
参数: 
-l :除了列出 job number 之外,同时列出 PID 
-r :仅列出正在背景 run 的工作; 
-s :仅列出正在背景当中暂停 (stop) 的工作。 
范例: 
范例一:观察目前的 bash 当中,所有的工作,与对应的 PID 
[root@linux ~]# jobs -l 
[1]+ 24988 Stopped /usr/bin/vim ~/.bashrc 
[2]- 25006 Stopped /usr/bin/vim ~/.bash_history

 

4、将背景工作拿到前景来处理:fg 
[root@linux ~]# fg %jobnumber 
参数: 
%jobnumber :工作的号码。注意,那个 % 是可有可无的! 
范例: 
范例一:先以 jobs 观察工作,再将工作取出: 
[root@linux ~]# jobs 
[1]+ Stopped /usr/bin/vim ~/.bashrc 
[2]- Stopped /usr/bin/vim ~/.bash_history 
[root@linux ~]# fg <==预设取出那个 + 的工作,亦即 [1] 
[root@linux ~]# fg %2 <==直接规定取出的那个工作号码!

 

5、让工作在背景下进行: bg 
范例一:一执行 find / -perm +7000 后,立刻丢到背景去暂停! 
[root@linux ~]# find / -perm +7000 
# 此时,请立刻按下 [ctrl]-z 暂停 
[1]+ Stopped find / -perm +7000 
[root@linux ~]# 
范例二:让该工作在背景下进行,并且观察他  
[root@linux ~]# jobs ; bg %1 ; jobs 
[1]+ Stopped find / -perm +7000 
[1]+ find / -perm +7000 & 
[1]+ Running find / -perm +7000 &

 

6、管理背景当中的工作:kill 
[root@linux ~]# kill -signal %jobnumber 
[root@linux ~]# kill -l 
参数: 
-l :这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些? 
signal :代表给予后面接的那个工作什么样的指示啰!用 man 7 signal 可知: 
-1 :重新读取一次参数的设定档 (类似 reload); 
-2 :代表与由键盘输入 [ctrl]-c 同样的动作; 
-9 :立刻强制删除一个工作; 
-15:以正常的程序方式终止一项工作。与 -9 是不一样的。 
范例: 
范例一:找出目前的 bash 环境下的背景工作,并将该工作删除。 
[root@linux ~]# jobs 
[1]+ Stopped vim bashrc 
[root@linux ~]# kill -9 %1 
[1]+ 已砍掉 vim bashrc 
范例:找出目前的 bash 环境下的背景工作,并将该工作终止掉。 
[root@linux ~]# jobs 
[1]+ Stopped vim bashrc 
[root@linux ~]# kill -SIGTERM %1 
[1]+ 终止 vim bashrc 
-SIGTERM与-15是一样的!您可以使用kill -l来查阅! 
常见信号: 
1 SIGHUP 代表『让该PID重新读取自己的设定档』,类似重新启动; 
2 SIGINT 代表用键盘输入的 [ctrl]-c来中断一个程序的进行。 
9 SIGKILL 代表强制中断一个程序的进行,如果该程序进行到一半,那么尚未完成的部分可能会有『半产品』产生,类似vim会有.filename.swp保留下来。 
15 SIGTERM 以正常的结束程序来终止该程序。由于是正常的终止,所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时,输入这个signal也是没有用的。

例子: 
以ps找出syslog这个服务的PID后,再使用kill重新读取syslog的设定文件数据: 
我们可以使用底下的方式找出syslog的PID! 
ps aux | grep ‘syslog‘ | grep -v ‘grep‘| awk ‘{print $2}‘ 
接下来,再给予kill -SIGHUP的讯号至该PID ,所以,整个指令串可以这样写: 
kill -SIGHUP `ps aux|grep ‘syslog‘|grep -v ‘grep‘|awk ‘{print $2}‘` 
然后立刻tail -n 5 /var/log/messages看看syslog有没有重新被启动啊?

 

7、killall 
[root@linux ~]# killall [-iIe] [command name] 
参数: 
-i:interactive的意思,交互式的,若需要删除时,会出现提示字符给使用者; 
-e:exact 的意思,表示『后面接的 command name 要一致』,但整个完整的指令不能超过 15 个字符。 
-I :指令名称(可能含参数)忽略大小写。 
范例一:给予syslogd这个指令启动的PID一个SIGHUP的讯号 
[root@linux ~]# killall -1 syslogd 
如果用ps aux仔细看一下,syslogd才是完整的指令名称。但若包含整个参数,则syslogd -m 0才是完整的呢!

范例二:强制终止所有以httpd启动的程序 
[root@linux ~]# killall -9 httpd 
总之,要删除某个程序,我们可以使用PID或者是启动该程序的指令名称, 而如果要删除某个服务呢?呵呵!最简单的方法就是利用killall,因为他可以将系统当中所有以某个指令名称启动的程序全部删除。举例来说,上面的范例二当中,系统内所有以httpd启动的程序,就会通通的被删除啦!

 

8、nice 
我们的Linux可以在x86上面『同时进行多个工作』的呢!那么多个工作是如何进行的呢? 其实每个工作都会进入到CPU的工作排程当中,并等待CPU来执行, 而CPU会根据每个工作的优先执行序(priority)来判断谁比较重要, 所以某个工作就可能会比较优先被执行完毕啦! 也就是说, Linux 系统中,每个process都会拥有一个所的『优先执行序 (priority)』的属性,利用该属性来让CPU判断那个工作是比较重要的,那个工作在一群工作当中就会优先被执行,也让系统资源可以分配的更恰当。我们可以使用ps还观察优先执行序:  
[root@linux ~]# ps -l  
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD  
0 S 0 18851 18827 0 77 0 - 1302 wait pts/0 00:00:00 su  
4 S 0 18852 18851 0 76 0 - 1349 wait pts/0 00:00:00 bash  
4 R 0 19510 18852 0 76 0 - 1111 - pts/0 00:00:00 ps  
其中,那个PRI就是Priority的简写,而NI是nice的简写,这两个东西是凑在一起才产生目前的PRI值的! PRI越小时,代表该程序可以具有『越早被优先执行』的意思,只是PRI是由系统动态产生的,并不会是一直固定的值。至于那个NI (nice)则是我们操作值额外给予的一个数值, 他可以影响PRI的值,基本上,他的相关性是这样的:PRI(new) = PRI(old) + nice,不过您要特别留意到,如果原本的PRI是50,并不是我们给予一个nice = 5,就会让PRI变成55! 因为PRI是系统『动态』决定的,所以,虽然nice值是可以影响PRI ,不过最终的PRI仍是要经过系统分析后才会决定的。另外,nice值是有正负的,而既然PRI越小越早被执行,所以,当nice值为负值时,那么该程序就会降低PRI值,亦即会变的较优先被处理。此外,您必须要留意到:  
1)一般使用者的nice值为:0 ~ 19;  
2)root可用的nice值为:-20 ~ 19;  
3)一般使用者仅可将nice值越调越高,如果本来nice为5,则未来仅能调整到大于5的nice;  
4)一般使用者仅能调整属于自己的程序的nice值。  
这也就是说,要调整某个程序的优先执行序,就是『调整该程序的nice值』啦!那么如何给予某个程序nice值呢?有两种方式,分别是:  
1)一开始执行程序就立即给予一个特定的nice值:用 nice 指令;  
2)调整某个已经存在的PID的nice值:用renice指令。

[root@linux ~]# nice [-n] command  
参数:  
-n:后面接一个数值,数值的范围:-20 ~ 19。  
范例一:用root给一个nice植为-5 ,用于执行vi ,并观察该程序!  
[root@linux ~]# nice -n -5 vi &  
[1] 19542  
[root@linux ~]# ps -l  
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD  
0 S 0 18851 18827 0 77 0 - 1302 wait pts/0 00:00:00 su  
4 S 0 18852 18851 0 76 0 - 1349 wait pts/0 00:00:00 bash  
4 T 0 19542 18852 0 72 -5 - 1063 finish pts/0 00:00:00 vi  
4 R 0 19543 18852 0 77 0 - 1110 - pts/0 00:00:00 ps  
就如同前面说的,nice是用来调整程序的执行优先级!这里只是一个执行的范例罢了!通常什么时候要将nice值调大呢?举例来说,系统的背景工作中,某些比较不重要的程序之进行:例如备份工作!由于备份工作相当的耗系统资源,这个时候就可以将备份的指令之nice值调大一些,可以使系统的支持分配的更为公平!

 

9、renice 
[root@linux ~]# renice [number] PID  
参数:  
PID:某个程序的ID  
范例一:以上面nice范例中ps -l的结果,将18852那个PID修改nice为10  
[root@linux ~]# renice 10 18852  
18852: old priority 0, new priority 10  
[root@linux ~]# ps -l  
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD  
0 S 0 18851 18827 0 77 0 - 1302 wait pts/0 00:00:00 su  
4 S 0 18852 18851 0 85 10 - 1349 wait pts/0 00:00:00 bash  
4 R 0 19593 18852 0 87 10 - 1111 - pts/0 00:00:00 ps  
如果要调整的是已经存在的某个process的话,那么就得要使用 renice 了。使用的方法很简单,renice后面接上数值及PID即可

 

10、dmesg

在开机的时候你会发现有很多的讯息出现吧,例如CPU的形式、硬盘、光盘型号及硬盘分割表等等,这些信息的产生都是核心(kernel)在进行硬件的测试与驱动啦。但讯息都是『刷』的一声就跑过去了!完全来不及看! 
这些讯息有时候对于系统管理员是很重要的,因为他提供了系统的信息呀!要看这些讯息你可以用dmesg这个指令来观看 
范例一:输出所有的核心开机时的信息 
[root@linux ~]# dmesg | more

范例二:搜寻开机的时候,硬盘的相关信息为何? 
[root@linux ~]# dmesg | grep -i hd 
ide0: BM-DMA at 0xffa0-0xffa7, BIOS settings: hda:DMA, hdb:DMA 
ide1: BM-DMA at 0xffa8-0xffaf, BIOS settings: hdc:DMA, hdd:pio 
hda: ST320430A, ATA DISK drive 
hdb: Maxtor 5T030H3, ATA DISK drive 
hdc: CD-540E, ATAPI CD/DVD-ROM drive 
.....底下省略.....

 

 

11、lspci 
   lspci可以直接将/proc下的关于PCI接口的各项数据一口气的将他完整的呈现在你面前,可以让您很快速的了解到核心所侦测到的你的主机硬件。  
[root@linux ~]# lspci [-vvn]  
参数:  
-v:观察更多的PCI装置的信息;  
-vv:比-v还要更详细的细部信息;  
-n:直接观察PCI的ID而不是厂商名称  
范例一:查阅您系统内的PCI装置:  
[root@linux ~]# lspci  
00:00.0 Host bridge: VIA Technologies, Inc. VT82C693A/694x [Apollo PRO133x] (rev c4)  
00:01.0 PCI bridge: VIA Technologies, Inc. VT82C598/694x [Apollo MVP3/Pro133x AGP]  
.....(中间省略).....  
00:0c.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)  
01:00.0 VGA compatible controller: nVidia Corporation NV17 [GeForce4 MX 440] (rev a3)  
   不必加任何的参数,就能够显示出目前主机上面的各个 PCI 接口的装置,从上面的数据可以看出我的显示卡是Nvidia的,主机芯片则是VIA的,网络卡则是Realtek 的8139 (亦即是螃蟹卡)。  
   其实那就是我们的硬件侦测的数据可以对照着底下这个档案来查阅:/usr/share/hwdata/pci.ids,就是PCI的标准ID与厂牌名称的对应表。此外,刚刚我们使用lspci时,其实所有的数据都是由/proc/bus/pci/目录下的数据所取出的。

 

12、uname 
[root@linux ~]# uname [-asrmpi] 
常用参数: 
-a :所有系统相关的信息; 
-s :系统核心名称 
-r :核心的版本 
-m :本系统的硬件名称 
-p :CPU 的类型 
-i :硬件的平台 (ix86) 
范例一:输出系统的基本信息 
[root@linux ~]# uname -a 
Linux linux.site 2.6.12-1.1398_FC4 #1 Fri Jul 15 00:52:32 EDT 2005 i686 i686 i386 GNU/Linux 
uname可以列出目前系统的核心版本、主要硬件平台以及CPU类型等等的信息。以上面范例一的状态来说,我的Linux主机使用的核心名称为Linux,而主机名称为 linux.site,核心的版本为2.6.12-1.1398_FC4,该核心版本建立的日期为2005/07/15, 适用的硬件平台为i386以上等级的硬件平台。

 

13、strace 
    常用来跟踪进程执行时的系统调用和所接收的信号。在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。 
参数: 
-c    统计每一系统调用的所执行的时间,次数和出错的次数等. 
-d    输出strace关于标准错误的调试信息. 
-f    跟踪由fork调用所产生的子进程. 
-ff    如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号. 
-F    尝试跟踪vfork调用.在-f时,vfork不被跟踪. 
-h    输出简要的帮助信息. 
-i    输出系统调用的入口指针. 
-q    禁止输出关于脱离的消息. 
-r    打印出相对时间关于,,每一个系统调用. 
-t    在输出中的每一行前加上时间信息. 
-tt    在输出中的每一行前加上时间信息,微秒级. 
-ttt    微秒级输出,以秒了表示时间. 
-T    显示每一调用所耗的时间. 
-v    输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出. 
-V    输出strace的版本信息. 
-x    以十六进制形式输出非标准字符串 
-xx    所有字符串以十六进制形式输出. 
-a column    设置返回值的输出位置.默认 为40. 
-e expr    指定一个表达式,用来控制如何跟踪.格式如下: 
[qualifier=][!]value1[,value2]... 
qualifier只能是trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的qualifier是trace.感叹号是否定符号.例如: -e open   等价于-e trace=open,表示只跟踪open调用.而-etrace!=open表示跟踪除了open以外的其他调用.有两个特殊的符号all和none. 
注意有些shell使用!来执行历史记录里的命令,所以要使用\\. 
-e trace=set    只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all. 
-e trace=file   只跟踪有关文件操作的系统调用. 
-e trace=process   只跟踪有关进程控制的系统调用. 
-e trace=network    跟踪与网络有关的所有系统调用. 
-e strace=signal    跟踪所有与系统信号有关的 系统调用 
-e trace=ipc    跟踪所有与进程通讯有关的系统调用 
-e abbrev=set    设定strace输出的系统调用的结果集.-v等与abbrev=none.默认为abbrev=all. 
-e raw=set    将指定的系统调用的参数以十六进制显示. 
-e signal=set    指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号. 
-e read=set    输出从指定文件中读出 的数据.例如: 
-e read=3,5 
-e write=set    输出写入到指定文件中的数据. 
-o filename    将strace的输出写入文件filename 
-p pid    跟踪指定的进程pid. 
-s strsize    指定输出的字符串的最大长度.默认为32.文件名一直全部输出. 
-u username    以username的UID和GID执行被跟踪的命令

输出: 
root@ubuntu:/usr# strace cat /dev/null 
execve("/bin/cat", ["cat", "/dev/null"], [/* 22 vars */]) = 0 
brk(0)                                  = 0xab1000 
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory) 
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29379a7000 
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory) 
... 
brk(0) = 0xab1000 
brk(0xad2000) = 0xad2000 
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 
open("/dev/null", O_RDONLY) = 3 
fstat(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0 
read(3, "", 32768) = 0 
close(3) = 0 
close(1) = 0 
close(2) = 0 
exit_group(0) = ? 
   每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。

1)通用的用法 
strace -o output.txt -T -tt -e trace=all -p 28979 
   跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。

2)程序调试 
strace -o whoami-strace.txt whoami 
strace -f -F -o ~/dcop-strace.txt dcopserver 
   这里-f -F选项告诉strace同时跟踪fork和vfork出来的进程,-o选项把所有strace输出写到~/dcop-strace.txt里面,dcopserver是要启动和调试的程序。

 

14、pgrep/pkill 
   进程查找/杀掉命令。查找和杀死指定的进程, 他们的选项和参数完全相同, 这里只是介绍pgrep。 
参数: 
-d     定义多个进程之间的分隔符, 如果不定义则使用换行符。 
-n     表示如果该程序有多个进程正在运行,则仅查找最新的,即最后启动的。 
-o     表示如果该程序有多个进程正在运行,则仅查找最老的,即最先启动的。 
-G     其后跟着一组group id,该命令在搜索时,仅考虑group列表中的进程。 
-u     其后跟着一组有效用户ID(effetive user id),该命令在搜索时,仅考虑该effective user列表中的进程。 
-U     其后跟着一组实际用户ID(real user id),该命令在搜索时,仅考虑该real user列表中的进程。 
-x     表示进程的名字必须完全匹配, 以上的选项均可以部分匹配。 
-l     将不仅打印pid,也打印进程名。 
-f     一般与-l合用, 将打印进程的参数。

用法举例:

1)查找进程名为sleep的进程,同时输出所有找到的pid 
pgrep sleep 
    3456 
    3457

2)查找进程名为sleep的进程pid,如果存在多个,他们之间使用:分隔,而不是换行符分隔。 
pgrep -d: sleep 
    3456:3457

3)查找进程名为sleep的进程pid,如果存在多个,这里只是输出最后启动的那一个。 
pgrep -n sleep 
    3457

4)查找进程名为sleep的进程pid,如果存在多个,这里只是输出最先启动的那一个。 
pgrep -o  sleep 
    3456

5)查找进程名为sleep,同时这个正在运行的进程的组为root和stephen。 
pgrep -G root,stephen sleep 
    3456 
    3457

6)查找有效用户ID为root和oracle,进程名为sleep的进程。 
pgrep -u root,oracle sleep 
    3456 
    3457

7)查找实际用户ID为root和oracle,进程名为sleep的进程。 
pgrep -U root,oracle sleep 
    3456 
    3457

8)查找进程名为sleep的进程,注意这里找到的进程名必须和参数中的完全匹配。 
pgrep -x sleep 
    3456 
    3457

9)查找进程名为sleep的进程,同时输出所有找到的pid和进程名。    
pgrep -l sleep 
    3456 sleep 
    3457 sleep

10)查找进程名为sleep的进程,同时输出所有找到的pid、进程名和启动时的参数。 
pgrep -lf sleep 
    3456 sleep 1000 
    3457 sleep 1000

11)查找进程名为sleep的进程,同时以逗号为分隔符输出他们的pid,在将结果传给ps命令,-f表示显示完整格式,-p显示pid列表,ps将只是输出该列表内的进程数据。 
pgrep -f sleep -d, | xargs ps -fp 
    UID        PID  PPID  C STIME TTY          TIME CMD 
    root      3456  2138  0 06:11 pts/5    00:00:00 sleep 1000 
    root      3457  2138  0 06:11 pts/5    00:00:00 sleep 1000 

 

15、df 
   报告磁盘空间使用状况。该命令最为常用的选项就是-h,该选项将智能的输出数据单位,以便使输出的结果更具可读性。 
参数: 
-a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。  
-k 以k字节为单位显示。  
-i 显示i节点信息,而不是磁盘块。  
-t 显示各指定类型的文件系统的磁盘空间使用情况。  
-x 列出不是某一指定类型文件系统的磁盘空间使用情况(与t选项相反)。  
-T 显示文件系统类型。

用法举例: 
1)列出各文件系统的磁盘空间使用情况。  
df 

Filesystem  1K-blocks  Used    Available  Use%   Mounted on  
/dev/hda2   1361587    1246406  44823      97%   / 

第1列   代表文件系统对应的设备文件的路径名(一般是硬盘上的分区); 
第2列   给出分区包含的数据块(1024字节)的数目; 
第3、4列   分别表示已用的和可用的数据块数目。用户也许会感到奇怪的是,第3,4列块数之和不等于第2列中的块数。这是因为缺省的每个分区都留了少量空间供系统管理员使用。即使遇到普通用户空间已满的情况,管理员仍能登录和留有解决问题所需的工作空间。 
Use%列   表示普通用户空间使用的百分比,即使这一数字达到100%,分区仍然留有系统管理员使用的空间。 
Mounted on列   表示文件系统的安装点。  
  

2)列出各文件系统的i节点使用情况。  
df -ia 

Filesystem Inodes IUsed IFree  Iused% Mounted on  
/dev/hda2  352256 75043 277213  21%   /  
none       0      0     0       0%    /proc  
localhost:(pid221) 0 0 0       0%   /net  
   
3)列出文件系统的类型。  
df -T 

Filesystem Type 1K-blocks Used    Available use% Mounted on  
/dev/hda2  ext2 1361587   1246405 44824      97%  / 

 

 

16、du 
   评估磁盘的使用状况。 
参数: 
-a  包括了所有的文件,而不只是目录。 
-b  以字节为计算单位。 
-k  以千字节(KB)为计算单位。 
-m  以兆字节(MB)为计算单位。 
-g  以GB为计算单位。 
-h  是输出的信息更易于阅读。 
-s  只显示工作目录所占总空间。 
--exclude=PATTERN   排除掉符合样式的文件,Pattern就是普通的Shell样式,?表示任何一个字符,*表示任意多个字符。 
--max-depth=N      从当前目录算起,目录深度大于N的子目录将不被计算,该选项不能和s选项同时存在。

用法举例: 
1)仅显示子一级目录的信息。 
du --max-depth=1 -h 
246M    ./stephen 
246M    .  
2)获取当前目录下所有子目录所占用的磁盘空间大小。 
du -sh ./*   # 
352K    ./MemcachedTest 
132K    ./Test 
33M     ./thirdparty   
3)在当前目录下,排除目录名模式为Te*的子目录(./Test),输出其他子目录占用的磁盘空间大小。 
du --exclude=Te* -sh ./*  
352K    ./MemcachedTest 
33M     ./thirdparty

 

17、pmap(report memory map of a process)

    查看进程的内存映像信息 
pmap [ -x | -d ] [ -q ] pids... 
pmap -V 
参数: 
-x   extended       Show the extended format    显示扩展格式 
-d   device         Show the device format      显示设备格式 
-q   quiet          Do not display some header/footer lines    不显示头尾行 
-V   show version   Displays version of program    显示版本

扩展格式和设备格式域: 
Address:进程所占的地址空间 
Kbytes:该虚拟段的大小 
RSS:设备号(主设备:次设备) 
Anon:设备的节点号,0表示没有节点与内存相对应 
Locked:是否允许swapped 
Mode 权限:r=read, w=write, x=execute, s=shared, p=private(copy on write) 
Mapping:bash 对应的映像文件名 
Dirty:  脏页大小 
Offset: 文件偏移 
Device: 设备名

1)查看进程1的设备格式 
[root@C44 ~]#  pmap -d 1 
1:   init [5]                    
Address   Kbytes Mode  Offset           Device    Mapping 
00934000      88 r-x-- 0000000000000000 008:00005 ld-2.3.4.so 
0094a000       4 r---- 0000000000015000 008:00005 ld-2.3.4.so 
0094b000       4 rw--- 0000000000016000 008:00005 ld-2.3.4.so 
0094e000    1188 r-x-- 0000000000000000 008:00005 libc-2.3.4.so 
00a77000       8 r---- 0000000000129000 008:00005 libc-2.3.4.so 
00a79000       8 rw--- 000000000012b000 008:00005 libc-2.3.4.so 
00a7b000       8 rw--- 0000000000a7b000 000:00000   [ anon ] 
00a85000      52 r-x-- 0000000000000000 008:00005 libsepol.so.1 
00a92000       4 rw--- 000000000000c000 008:00005 libsepol.so.1 
00a93000      32 rw--- 0000000000a93000 000:00000   [ anon ] 
00d9d000      52 r-x-- 0000000000000000 008:00005 libselinux.so.1 
00daa000       4 rw--- 000000000000d000 008:00005 libselinux.so.1 
08048000      28 r-x-- 0000000000000000 008:00005 init 
0804f000       4 rw--- 0000000000007000 008:00005 init 
084e1000     132 rw--- 00000000084e1000 000:00000   [ anon ] 
b7f5d000       8 rw--- 00000000b7f5d000 000:00000   [ anon ] 
bffee000      72 rw--- 00000000bffee000 000:00000   [ stack ] 
ffffe000       4 ----- 0000000000000000 000:00000   [ anon ] 
mapped: 1700K    writeable/private: 276K    shared: 0K 
最后一行的值: 
mapped    表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小,即ps出的vsz 
writeable/private     表示进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小      
shared    表示进程和其他进程共享的内存大小

2)查看进程1的设备格式,不显示头尾行 
[root@C44 ~]#  pmap -d -q 1

3)查看进程1的扩展格式 
[root@C44 ~]#  pmap -x 1

4)循环显示进程3066的设备格式的最后1行,间隔2秒显示一次 
[root@C44 ~]#  while true; do pmap -d  3066 | tail -1; sleep 2; done

 

18、hdparm:观察硬盘的种种信息

Linux资源监控命令/工具(调试),古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。