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资源监控命令/工具(调试)的更多相关文章
- Linux资源监控命令/工具(综合)
		
目录: ps pstree pidof top free uptime ifuser lsof mpstat vmstst pidstat iostat iotop watch sar 1.ps 1) ...
 - Linux资源监控命令/工具(网络)
		
1.手动/自动设定与启动/关闭IP参数:ifconfig,ifup,ifdown 这三个指令的用途都是在启动网络接口,不过,ifup与ifdown仅能就/etc/sysconfig/netw ...
 - linux资源监控命令详解
		
Linux统计/监控工具SAR详细介绍:要判断一个系统瓶颈问题,有时需要几个 sar 命令选项结合起来使用,例如: 怀疑CPU存在瓶颈,可用 sar -u 和 sar -q deng 等来查看 怀疑内 ...
 - Linux中监控命令top命令使用方法详解
		
收集了两篇关于介绍Linux中监控命令top命令的详细使用方法的文章.总的来说,top命令主要用来查看Linux系统的各个进程和系统资源占用情况,在监控Linux系统性能方面top显得非常有用,下面就 ...
 - [转载]你需要知道的 16 个 Linux 服务器监控命令
		
转载自: 你需要知道的 16 个 Linux 服务器监控命令 如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员. 有些 ...
 - Linux 系统性能监控命令详解
		
Linux 系统性能监控命令详解 CPU MEMORY IO NETWORK LINUX进程内存占用查看方法 系统负载过重时往往会引起其它子系统的问题,比如:->大量的读入内存的IO请求(pag ...
 - linux系统监控常用工具
		
linux系统监控常用工具 一.系统核心工具包(coreutils) 1./bin/df 报告系统的磁盘空间用量 df -h 显示磁盘分区fdisk -l 2./bin/uname 显示系统信息 u ...
 - 性能测试-Linux资源监控⽅式
		
Linux资源监控⽅式 1. 命令 2. 第三⽅⼯具(nmon) 3. LR(需要安装RPC相应服务包和开启服务)(略) ⼀.命令 ⽅式 1. top (系统资源管理器) 2. vmstat (查 ...
 - Linux系统监控实用工具Glances
		
Linux系统监控实用工具Glances Glances安装 Glances安装要求:python >= 2.6 和 psutil >= 0.4.1 1.第一步,安装了python-> ...
 
随机推荐
- EF6  在原有数据库中使用  CodeFirst 总复习(一、搭建基础环境)
			
本来以为已经会了,可动手时发现许多问题还是模糊不清,正所谓眼高手低.只能重新查资料,再复习一遍. vs.net2013 ef6 mvc5 sqlserver2008 一.建立数据库 Bloggi ...
 - 搭建SpringMVC+MyBatis开发框架一
			
大部分 Java 应用都是 Web 应用,展现层是 Web 应用不可忽略的重要环节.Spring 为展现层提供了一个优秀的 Web 框架—— Spring MVC.和众多其他 Web 框架一样,它基于 ...
 - ASP .NET下的301重定向如何做
			
using System; using System.Collections.Generic; using System.Text; using System.Web.UI; using System ...
 - 原生javascript开发仿微信打飞机小游戏
			
今天闲来无事,于是就打算教一个初学javascript的女童鞋写点东西,因此为了兼顾趣味性与简易程度,果断想到了微信的打飞机小游戏.. 本来想用html5做的,但是毕竟人家才初学,连jquery都还不 ...
 - 利用Shell命令获取IP地址
			
一 :获取单个网卡的IPv4地址,方法如下: 方法一:$/sbin/ifconfig ethX | awk '/inet addr/ {print $2}' | cut -f2 -d ":& ...
 - 代码复用 -- 深入了解javascript
			
/* 代码复用 */ /* 一.避免 */ /* 模式1:默认模式 */ function Parent() { this.name = "123"; } Parent.proto ...
 - SL410K 在Ubuntu禁用触摸板
			
由于之前把系统自带的恢复去了,然后TouchPad一直不能禁用,而后我的410k就只装上ubuntu,想不到在ubuntu上,禁用/启用 触摸板这么方便. http://askubuntu.com/q ...
 - Codeforces Round #349 (Div. 1)  B. World Tour 最短路+暴力枚举
			
题目链接: http://www.codeforces.com/contest/666/problem/B 题意: 给你n个城市,m条单向边,求通过最短路径访问四个不同的点能获得的最大距离,答案输出一 ...
 - 通过XMLHttpRequest和jQuery实现ajax的几种方式
			
AJAX大家已经都知道了,是为了实现异步通讯,提高用户体验度,而将很多旧知识(XML,DOM,JavaScript,HTML,Jquery,Css……)重新融合的一个新的知识框架.而,XMLHttpR ...
 - C++ Tempatet之模板模型
			
模板一共有三种类型: 1.第一种包含模型:包含模型是讲模板的定义和声明都放在头文件里(注:一般我们写的代码是将声明放在头文件里,实现放在cpp里,防止产生两份实现代码) 缺点:包含模型会增加代码的量. ...