• 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:观察硬盘的种种信息

  • 相关阅读:
    js 99乘法表
    微信小程序 富文本插件 循环渲染方式
    Mysql: mysqlbinlog命令查看日志文件
    Java Mail 发送邮件(SSL加密方式,TSL加密方式)
    进程和线程的区别
    Java 制作证书(Windows 和Linux)
    Linux 常用命令标记
    Java clone克隆方法 --深拷贝--浅拷贝 --原型模型
    tomcat内存溢出:PermGen space解决方法
    Java 多线程 ---- 线程中this与 Thread.currentThread()线程的区别
  • 原文地址:https://www.cnblogs.com/defias/p/3432581.html
Copyright © 2020-2023  润新知