pstree命令以树状图的方式展现进程之间的派生关系
-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示; -c:不使用精简标示法; -G:使用VT100终端机的列绘图字符; -h:列出树状图时,特别标明现在执行的程序; -H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序; -l:采用长列格式显示树状图; -n:用程序识别码排序。预设是以程序名称来排序; -p:显示程序识别码; -u:显示用户名称; -U:使用UTF-8列绘图字符; -V:显示版本信息
例如我要查看系统中所有的httpd进程和线程
[root@localhost ~]# pstree -p | grep httpd |-httpd(2821)-+-httpd(2822)-+-{httpd}(2827) | | |-{httpd}(2828) | | |-{httpd}(2829) | | |-{httpd}(2836) | | |-{httpd}(2837) | | |-{httpd}(2838) | | |-{httpd}(2886) | | |-{httpd}(2887) | | |-{httpd}(2888) | | |-{httpd}(2889) | | |-{httpd}(2890) | | |-{httpd}(2891) | | |-{httpd}(2892) | | |-{httpd}(2893) | | |-{httpd}(2894) | | |-{httpd}(2895) | | |-{httpd}(2896) | | |-{httpd}(2897) | | |-{httpd}(2898) | | |-{httpd}(2899) | | |-{httpd}(2900) | | |-{httpd}(2901) | | |-{httpd}(2902) | | |-{httpd}(2903) | | |-{httpd}(2904) | | `-{httpd}(2905) | |-httpd(2823)-+-{httpd}(2830) | | |-{httpd}(2831) | | |-{httpd}(2832) | | |-{httpd}(2833) | | |-{httpd}(2834) | | |-{httpd}(2835) | | |-{httpd}(2846) | | |-{httpd}(2847) | | |-{httpd}(2848) | | |-{httpd}(2849) | | |-{httpd}(2850) | | |-{httpd}(2851) | | |-{httpd}(2852) | | |-{httpd}(2853) | | |-{httpd}(2854) | | |-{httpd}(2855) | | |-{httpd}(2856) | | |-{httpd}(2857) | | |-{httpd}(2858) | | |-{httpd}(2859) | | |-{httpd}(2860) | | |-{httpd}(2861) | | |-{httpd}(2862) | | |-{httpd}(2863) | | |-{httpd}(2864) | | `-{httpd}(2865) | `-httpd(2824)-+-{httpd}(2840) | |-{httpd}(2841) | |-{httpd}(2842) | |-{httpd}(2843) | |-{httpd}(2844) | |-{httpd}(2845) | |-{httpd}(2866) | |-{httpd}(2867) | |-{httpd}(2868) | |-{httpd}(2869) | |-{httpd}(2870) | |-{httpd}(2871) | |-{httpd}(2872) | |-{httpd}(2873) | |-{httpd}(2874) | |-{httpd}(2875) | |-{httpd}(2876) | |-{httpd}(2877) | |-{httpd}(2878) | |-{httpd}(2879) | |-{httpd}(2880) | |-{httpd}(2881) | |-{httpd}(2882) | |-{httpd}(2883) | |-{httpd}(2884) | `-{httpd}(2885)
因为pstree以树状图显示,所以非常直观,加上进程的PID还能显示这个PID对应的进程的详细情况
[root@localhost ~]# pstree 2821 httpd───3*[httpd───26*[{httpd}]] #这里表示httpd下有3个子进程26个线程
vmstat可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况等
-a:显示活跃和非活跃内存 -f:显示从系统启动至今的fork数量 -m:显示slabinfo -n:只在开始时显示一次各字段名称 -s:显示内存相关统计信息及多种系统活动数量 delay:刷新时间间隔。如果不指定,只显示一条结果 count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷 -d:显示磁盘相关统计信息 -p:显示指定磁盘分区统计信息 -S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte) -V:显示vmstat版本信息
直接使用则只显示一次系统现在的情况,例如
[root@localhost ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 575980 952 306180 0 0 1 0 16 27 0 0 100 0 0
procs: r:等待运行的进程的个数; b:处于不可中断睡眠态的进程个数;(被阻塞的队列的长度); memory: swpd: 交换内存的使用总量; free:空闲物理内存总量; buffer:用于buffer的内存总量; cache:用于cache的内存总量; swap: si:数据进入swap中的数据速率(kb/s) so:数据离开swap中的数据速率(kb/s) io: bi:从块设备读入数据到系统的速率;(kb/s) bo: 保存数据至块设备的速率; system: in: 中断速率; cs: 进程切换速率 cpu: us:用户使用CPU百分比 sy:系统使用CPU百分比 id:空闲CPU使用率 wa:IO等待时间百分比
我们可以自动反复采集系统现在的使用情况
[root@localhost ~]# vmstat 1 10 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 576256 952 306160 0 0 1 0 16 27 0 0 100 0 0 0 0 0 576280 952 306168 0 0 0 0 104 176 0 0 100 0 0 0 0 0 576248 952 306168 0 0 0 0 85 137 0 0 100 0 0 0 0 0 576280 952 306168 0 0 0 0 85 136 0 0 100 0 0 0 0 0 576280 952 306168 0 0 0 0 88 151 0 0 100 0 0 0 0 0 576280 952 306168 0 0 0 0 73 126 0 0 100 0 0 0 0 0 576280 952 306168 0 0 0 0 65 113 0 0 100 0 0 0 0 0 576280 952 306168 0 0 0 0 69 120 0 0 100 0 0 0 0 0 576248 952 306168 0 0 0 0 79 135 0 0 100 0 0 0 0 0 576248 952 306168 0 0 0 0 72 124 0 0 100 0 0 #1表示一秒采集一次系统状态 #10表示一共采集十次
pmap命令用于显示一个或多个进程的内存状态
-x extended显示扩展格式 -d device显示设备格式 -q quiet不显示header/footer行 -V 显示版本信息
后面必须接进程PID,例如
[root@localhost ~]# pmap -x 1250 1250: /usr/sbin/sshd -D Address Kbytes RSS Dirty Mode Mapping 00007f7541c98000 44 20 0 r-x-- libnss_files-2.17.so 00007f7541ca3000 2044 0 0 ----- libnss_files-2.17.so 00007f7541ea2000 4 4 4 r---- libnss_files-2.17.so 00007f7541ea3000 4 4 4 rw--- libnss_files-2.17.so 00007f7541ea4000 24 0 0 rw--- [ anon ] 00007f7541eaa000 28 12 0 r-x-- librt-2.17.so 00007f7541eb1000 2044 0 0 ----- librt-2.17.so 00007f75420b0000 4 4 4 r---- librt-2.17.so 00007f75420b1000 4 4 4 rw--- librt-2.17.so 00007f75420b2000 12 8 0 r-x-- libkeyutils.so.1.5 00007f75420b5000 2044 0 0 ----- libkeyutils.so.1.5 00007f75422b4000 4 4 4 r---- libkeyutils.so.1.5 00007f75422b5000 4 4 4 rw--- libkeyutils.so.1.5 00007f75422b6000 52 16 0 r-x-- libkrb5support.so.0.1 00007f75422c3000 2048 0 0 ----- libkrb5support.so.0.1 00007f75424c3000 4 4 4 r---- libkrb5support.so.0.1 ###########################中间太多省略############################# 00007f7546be9000 4 4 4 rw--- libfipscheck.so.1.2.1 00007f7546bea000 132 116 0 r-x-- ld-2.17.so 00007f7546df2000 72 72 72 rw--- [ anon ] 00007f7546e0a000 4 4 4 rw--- [ anon ] 00007f7546e0b000 4 4 4 r---- ld-2.17.so 00007f7546e0c000 4 4 4 rw--- ld-2.17.so 00007f7546e0d000 4 4 4 rw--- [ anon ] 00007f7546e0e000 764 264 0 r-x-- sshd 00007f75470cc000 16 16 16 r---- sshd 00007f75470d0000 4 4 4 rw--- sshd 00007f75470d1000 40 40 40 rw--- [ anon ] 00007f75489a6000 132 72 72 rw--- [ anon ] 00007ffd7441e000 132 20 20 rw--- [ stack ] 00007ffd74547000 8 4 0 r-x-- [ anon ] ffffffffff600000 4 0 0 r-x-- [ anon ] ---------------- ------- ------- ------- total kB 82544 3604 852
每个字段的意义
Address: 内存开始地址 Kbytes: 占用内存的字节数(KB) RSS: 保留内存的字节数(KB) Dirty: 脏页的字节数(包括共享和私有的)(KB) Mode: 内存的权限:read、write、execute、shared、private (写时复制) Mapping: 占用内存的文件、或[anon](分配的内存)、或[stack](堆栈) Offset: 文件偏移 Device: 设备名 (major:minor)
非常优秀的一款系统资源查看工具,可以查看 CPU、负载、内存、磁盘 I/O、网络流量、文件系统、系统温度等信息
常用选项
-b: 以Byte为单位显示网卡数据速率; -d: 关闭磁盘I/O模块; -f /path/to/somefile: 设定输入文件位置; -o {HTML|CSV}:输出格式; -m: 禁用mount模块 -n: 禁用网络模块 -t SECONDS: 延迟时间间隔 -1:每个CPU的相关数据单独显示;
[root@localhost ~]# glances localhost.localdomain (CentOS Linux 7.2.1511 64bit / Linux 3.10.0-327.el7.x86_64 Uptime: 1 day, 0:10:38 CPU 0.6% steal: 0.0% Load 4核 Mem 19.2% active: 230M Swap 0.0% user: 0.3% nice: 0.0% 1 min: 0.04 total: 993M inactive: 103M total: 2.00G system: 0.2% iowait: 0.0% 5 min: 0.03 used: 190M buffers: 952K used: 0 idle: 99.4% irq: 0.0% 15 min: 0.05 free: 803M cached: 257M free: 2.00G 网络 Rx/s Tx/s Tasks 119 (212 thr), 1 run, 118 slp, 0 oth 自动排序 _1677772 8Kb 3Kb lo 0b 0b VIRT RES CPU% MEM% PID USER NI S TIME+ IOR/s IOW/s NAME 232M 15M 2.6 1.5 5878 root 0 R 0:01.17 0 0 /usr/bin/python /usr/bin/glances Disk I/O In/s Out/s 0 0 1.0 0.0 13 root 0 S 2:06.50 0 0 rcu_sched dm-0 0 0 0 0 0.3 0.0 14 root 0 S 1:18.83 0 0 rcuos/0 dm-1 0 0 0 0 0.3 0.0 16 root 0 S 0:05.46 0 0 rcuos/2 fd0 0 0 120M 4M 0.0 0.4 1 root 0 S 0:04.71 0 0 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 sda1 0 0 0 0 0.0 0.0 2 root 0 S 0:00.60 0 0 kthreadd sda2 0 0 0 0 0.0 0.0 3 root 0 S 0:00.46 0 0 ksoftirqd/0 sdb 0 0 0 0 0.0 0.0 5 root -20 S 0:00.00 0 0 kworker/0:0H sdc 0 0 0 0 0.0 0.0 7 root 0 S 0:01.60 0 0 migration/0 sr0 0 0 0 0 0.0 0.0 8 root 0 S 0:00.00 0 0 rcu_bh 0 0 0.0 0.0 9 root 0 S 0:00.00 0 0 rcuob/0 Mount Used Total 0 0 0.0 0.0 10 root 0 S 0:00.00 0 0 rcuob/1 / 1.86G 17.5G 0 0 0.0 0.0 11 root 0 S 0:00.00 0 0 rcuob/2 /boot 124M 497M 0 0 0.0 0.0 12 root 0 S 0:00.00 0 0 rcuob/3 /run 6.73M 496M 0 0 0.0 0.0 15 root 0 S 0:06.15 0 0 rcuos/1 _/user/0 0 99.3M 0 0 0.0 0.0 17 root 0 S 0:05.51 0 0 rcuos/3 0 0 0.0 0.0 18 root 0 S 0:00.47 0 0 watchdog/0 0 0 0.0 0.0 19 root 0 S 0:00.56 0 0 watchdog/1 0 0 0.0 0.0 20 root 0 S 0:01.53 0 0 migration/1 0 0 0.0 0.0 21 root 0 S 0:00.48 0 0 ksoftirqd/1
状态栏的意义:
VIRT: 虚拟内存大小 RES: 进程占用的物理内存值 %CPU:该进程占用的 CPU 使用率 %MEM:该进程占用的物理内存和总内存的百分比 PID: 进程 ID 号 USER: 进程所有者的用户名 TIME+: 该进程启动后占用的总的 CPU 时间 IO_R 和 IO_W: 进程的读写 I/O 速率 NAME: 进程名称 NI: 进程优先级 S: 进程状态,其中 S 表示休眠,R 表示正在运行,Z 表示僵死状态。
功能键用法:
h : 显示帮助信息 q : 离开程序退出 c :按照 CPU 实时负载对系统进程进行排序 m :按照内存使用状况对系统进程排序 i:按照 I/O 使用状况对系统进程排序 p: 按照进程名称排序 d : 显示磁盘读写状况 w : 删除日志文件 l :显示日志 s: 显示传感器信息 f : 显示系统信息 1 :轮流显示每个 CPU 内核的使用情况(次选项仅仅使用在多核 CPU 系统)
ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等
常用选项
a:显示所有进程 -a:显示同一终端下的所有程序 -A:显示所有进程 c:显示进程的真实名称 -N:反向选择 -e:等于“-A” e:显示环境变量 f:显示程序间的关系 -H:显示树状结构 r:显示当前终端的进程 T:显示当前终端的所有程序 u:指定用户的所有进程 -l: 显示进程名 -C<命令>:列出指定命令的状况 --lines<行数>:每页显示的行数 --width<字符数>:每页显示的字符数 --help:显示帮助信息 --version:显示版本显示
常用的组合:
[root@localhost ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 123136 3716 ? Ss 3月19 0:04 /usr/lib/systemd/systemd --switched-r root 2 0.0 0.0 0 0 ? S 3月19 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 3月19 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 3月19 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 3月19 0:01 [migration/0] #u: 以用户为中心组织进程状态信息显示 #a: 与终端相关的进程; #x: 与终端无关的进程;
[root@localhost ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 3月19 ? 00:00:04 /usr/lib/systemd/systemd --switched-root --system --des root 2 0 0 3月19 ? 00:00:00 [kthreadd] root 3 2 0 3月19 ? 00:00:00 [ksoftirqd/0] root 5 2 0 3月19 ? 00:00:00 [kworker/0:0H] root 7 2 0 3月19 ? 00:00:01 [migration/0] #-e: 显示所有进程 #-f: 显示完整格式程序信息
[root@localhost ~]# ps -eFH UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 2 0 0 0 0 0 3月19 ? 00:00:00 [kthreadd] root 3 2 0 0 0 0 3月19 ? 00:00:00 [ksoftirqd/0] root 5 2 0 0 0 0 3月19 ? 00:00:00 [kworker/0:0H] root 7 2 0 0 0 0 3月19 ? 00:00:01 [migration/0] root 8 2 0 0 0 0 3月19 ? 00:00:00 [rcu_bh] root 9 2 0 0 0 0 3月19 ? 00:00:00 [rcuob/0] root 10 2 0 0 0 0 3月19 ? 00:00:00 [rcuob/1] #-F: 显示完整格式的进程信息 #-H: 以进程层级格式显示进程相关信息
可以和grep结合查询指定进程
[root@localhost ~]# ps aux | grep httpd root 2821 0.0 0.2 70792 2176 ? Ss 3月19 0:03 /usr/local/apache2.4/bin/httpd daemon 2822 0.0 0.4 359756 4240 ? Sl 3月19 0:31 /usr/local/apache2.4/bin/httpd daemon 2823 0.0 0.4 490828 4756 ? Sl 3月19 0:31 /usr/local/apache2.4/bin/httpd daemon 2824 0.0 0.4 359756 4260 ? Sl 3月19 0:31 /usr/local/apache2.4/bin/httpd
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况
top是交互式工具,可使用交互式命令,排序什么的非常方便
top - 10:42:33 up 1 day, 1:11, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 120 total, 3 running, 117 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 28.8/1016816 [|||||||||||||||||||||| ] KiB Swap: 0.0/2097148 [ ] PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5962 root 20 0 146152 1988 1396 R 0.3 0.2 0:00.33 top 1 root 20 0 123136 3716 2388 S 0.0 0.4 0:04.94 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.06 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.47 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root rt 0 0 0 0 S 0.0 0.0 0:01.60 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1 11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/2 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/3 13 root 20 0 0 0 0 R 0.0 0.0 2:18.79 rcu_sched 14 root 20 0 0 0 0 S 0.0 0.0 1:23.75 rcuos/0 15 root 20 0 0 0 0 S 0.0 0.0 0:06.45 rcuos/1 16 root 20 0 0 0 0 S 0.0 0.0 0:06.16 rcuos/2 17 root 20 0 0 0 0 S 0.0 0.0 0:06.37 rcuos/3 18 root rt 0 0 0 0 S 0.0 0.0 0:00.48 watchdog/0 19 root rt 0 0 0 0 S 0.0 0.0 0:00.57 watchdog/1 20 root rt 0 0 0 0 S 0.0 0.0 0:01.53 migration/1 21 root 20 0 0 0 0 S 0.0 0.0 0:00.48 ksoftirqd/1
常用的交互命令:【注意如果在命令行中使用了s 选项, 其中一些命令可能会被屏蔽】
h:显示帮助画面,给出一些简短的命令总结说明 i:忽略闲置和僵死进程。这是一个开关式命令。 r:重新安排一个进程的优先级别 S:切换到累计模式 f或者F:从当前显示中添加或者删除项目 o或者O:改变显示项目的顺序 l:切换显示平均负载和启动时间信息 m:切换显示内存信息 t:切换显示进程和CPU状态信息 c:切换显示命令名称和完整命令行 M:根据驻留内存大小进行排序#注意是大写 P:根据CPU使用百分比大小进行排序#注意是大写 T:根据时间/累计时间进行排序 W:将当前设置写入~/.toprc文件中 q:退出 s:修改刷新时间间隔#默认为三秒 k:终止指定进程
各字段的详细意义
PID:进程id USER:进程所有者 PR:进程优先级 NI:nice值。负值表示高优先级,正值表示低优先级 VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES RES:进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA SHR:共享内存大小,单位kb S:进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 %CPU:CPU占用百分比 %MEM:进程使用的物理内存百分比 TIME+:进程使用的CPU时间总计,单位1/100秒 COMMAND:进程名称(命令名/命令行)
htop跟top类似,但是比top更强大,可支持鼠标操作,需要哪里点哪里
界面如下
htop中常用的指令
F1:查看htop使用说明 F2:设置 F3:搜索进程 F4:过滤器,按关键字搜索 F5:显示树形结构 F6:选择排序方式 F7:减少nice值,这样就可以提高对应进程的优先级 F8:增加nice值,这样可以降低对应进程的优先级 F9:杀掉选中的进程 F10:退出htop /:搜索字符 h:显示帮助 l:显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件 u:显示所有用户,并可以选择某一特定用户的进程 s:将调用strace追踪进程的系统调用 t:显示树形结构 H:显示/隐藏用户线程 I:倒转排序顺序 K:显示/隐藏内核线程 M:按内存占用排序 P:CPU排序 T:按运行时间排序 上下键或PgUP, PgDn:移动选中进程 左右键或Home, End:移动列表 Space(空格):标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程
上面这些内容在F1中也可以查看
按t像pstree一样显示树状结构图
dstat是类似于vmstat的工具,但是比vmstat更强大更好用默认每秒收集一次信息,按ctrl+c退出
界面如下
各字段代表的意义
#cpu#:CPU的使用率。这项报告更有趣的部分是显示了用户,系统和空闲部分,这更好地分析了CPU当前的使用状况。如果你看到"wait"一栏中,CPU的状态是一个高使用率值,那说明系统存在一些其它问题。当CPU的状态处在"waits"时,那是因为它正在等待I/O设备(例如内存,磁盘或者网络)的响应而且还没有收到。 #dsk#:磁盘的读写操作,这一栏显示磁盘的读、写总数。 #net#:网络设备发送和接受的数据,这一栏显示的网络收、发数据总数。 #paging#:系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散,大多数情况下你都希望看到page in(换入)和page out(换出)的值是0 0。 #system#:这一项显示的是中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。
dstat后面也可以接选项:
-c: 显示cpu相关信息; -d: 显示disk相关信息; -g:显示page相关统计数据; -m: 显示memory相关统计数据; -n: 显示network相关统计数据; -p: 显示process相关统计数据; -r: 显示io请求相关的统计数据; -s: 显示swapped相关的统计数据; --tcp:显示tcp相关信息 --udp:显示udp相关信息
[root@localhost ~]# dstat -c ----total-cpu-usage---- usr sys idl wai hiq siq 0 0 100 0 0 0 0 0 100 0 0 0
[root@localhost ~]# dstat -d -dsk/total- read writ 2298B 1844B 0 0 0 0
[root@localhost ~]# dstat -m ------memory-usage----- used buff cach free 187M 952k 260M 545M 187M 952k 260M 545M 187M 952k 260M 545M
[root@localhost ~]# dstat --tcp ----tcp-sockets---- lis act syn tim clo 5 1 0 0 0 5 1 0 0 0 5 1 0 0 0
[root@localhost ~]# dstat --udp --udp-- lis act 0 0 0 0 0 0
可以看出Centos对资源进行观察的工具是非常丰富的,只要能善用工具就能非常方面的找到系统中存在的问题进行优化。