Linux 性能监控之命令行工具

引言
对于系统和网络管理员来讲天天监控和调试Linux系统的性能问题是一项繁重的工做。这些命令行工具能够在各类Linux系统下使用,能够用于监控和查找产生性能问题的缘由。这个命令行工具列表提供了足够的工具,您能够挑选适用于您的监控场景的工具。

1. lsof - 列出打开的文件

       在许多Linux或者类Unix系统里都有lsof命令,它经常使用于以列表的形式显示全部打开的文件和进程。打开的文件包括磁盘文件、网络套接字、管道、设备和进程。使用这条命令的主要情形之一就是在没法挂载磁盘和显示正在使用或者打开某个文件的错误信息的时候。node

经常使用的参数列表:
lsof filename 显示打开指定文件的全部进程
lsof -a 表示两个参数都必须知足时才显示结果
lsof -c string 显示COMMAND列中包含指定字符的进程全部打开的文件
lsof -u username 显示所属user进程打开的文件
lsof -g gid 显示归属gid的进程状况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,可是会搜索目录下的全部目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -i 用以显示符合条件的进程状况
查看22端口如今运行的状况
[root@CentOS7 ~]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 925 root 3u IPv4 18374 0t0 TCP *:ssh (LISTEN)
sshd 925 root 4u IPv6 18383 0t0 TCP *:ssh (LISTEN)
sshd 9452 root 3u IPv4 1169003 0t0 TCP CentOS7.2:ssh->192.168.56.1:61347 (ESTABLISHED)
查看所属root用户进程所打开的文件类型为txt的文件
[root@CentOS7 ~]# lsof -a -u root -d txt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root txt REG 0,34 1489960 56083 /usr/lib/systemd/systemd
kthreadd 2 root txt unknown /proc/2/exe
ksoftirqd 3 root txt unknown /proc/3/exe
migration 7 root txt unknown /proc/7/exe
rcu_bh 8 root txt unknown /proc/8/exe

2. top - 进程活

       top提供一个当前运行系统实时动态的视图,也就是正在运行进程。在默认状况下,显示系统中CPU使用率最高的任务,并每5秒钟刷新一次。

经常使用热键
linux

t:显示摘要信息开关
top - 11:20:12 up 2 days, 18:39, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 173 total, 1 running, 172 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3/0.7 1[| ]
KiB Mem : 500780 total, 13236 free, 249296 used, 238248 buff/cache
KiB Swap: 8388604 total, 7848788 free, 539816 used. 200108 avail Mem
 
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17166 root 20 0 0 0 0 S 0.3 0.0 0:09.05 kworker/0:2
19196 root 20 0 146144 2056 1420 R 0.3 0.4 0:02.25 top
23944 root 20 0 1239128 38724 8388 S 0.3 7.7 6:39.63 firefox
1 root 20 0 191492 4212 2328 S 0.0 0.8 0:27.20 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:02.22 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 7:11.69 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 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 6:09.07 rcu_sched
11 root 20 0 0 0 0 S 0.0 0.0 14:11.36 rcuos/0
12 root rt 0 0 0 0 S 0.0 0.0 0:03.03 watchdog/0
13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf
m:显示内存信息开关
top - 11:22:12 up 2 days, 18:41, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 173 total, 1 running, 172 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 60.0/500780 [|||||||||||||||||||||||||||||||||||||||||||||| ]
KiB Swap: 6.4/8388604 [||||| ]
A:分类显示系统不一样资源的使用大户,有助于快速识别系统中资源消耗多的任务
1:Def - 11:23:40 up 2 days, 18:42, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 174 total, 1 running, 173 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 500780 total, 21124 free, 249376 used, 230280 buff/cache
KiB Swap: 8388604 total, 7848788 free, 539816 used. 200072 avail Mem
1 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
920 root 20 0 644044 11096 3360 S 0.3 2.2 10:28.34 daomonit
19196 root 20 0 146144 2056 1420 R 0.3 0.4 0:03.00 top
1 root 20 0 191492 4212 2328 S 0.0 0.8 0:27.20 systemd
2 PID PPID TIME+ %CPU %MEM PR NI S VIRT RES UID COMMAND
24416 2 0:03.29 0.0 0.0 0 -20 S 0 0 0 kworker/0:2H
24365 1 0:00.04 0.0 0.3 20 0 S 238724 1380 0 gvfsd-metadata
23944 23598 6:40.25 0.0 7.7 20 0 S 1239128 38724 0 firefox
3 PID %MEM VIRT RES CODE DATA SHR nMaj nDRT %CPU COMMAND
23598 10.7 1473588 53752 16 746528 8912 26k 0 0.0 gnome-shell
23944 7.7 1239128 38724 108 582752 8388 46k 0 0.0 firefox
18581 3.2 110512 15824 392 12292 3364 23 0 0.0 dhclient
4 PID PPID UID USER RUSER TTY TIME+ %CPU %MEM S COMMAND
536 1 172 rtkit rtkit ? 0:03.06 0.0 0.1 S rtkit-daemon
1 0 0 root root ? 0:27.20 0.0 0.8 S systemd
2 0 0 root root ? 0:02.22 0.0 0.0 S kthreadd
3 2 0 root root ? 7:11.70 0.0 0.0 S ksoftirqd/0
f:添加删除所要显示栏位
Fields Management for window 1:Def, whose current sort field is PPID
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end!
 
* PID = Process Id GROUP = Group Name TGID = Thread Group Id
* USER = Effective User Name PGRP = Process Group Id ENVIRON = Environment vars* PR = Priority TTY = Controlling Tty vMj = Major Faults delta
* NI = Nice Value TPGID = Tty Process Grp Id vMn = Minor Faults delta
* VIRT = Virtual Image (KiB) SID = Session Id USED = Res+Swap Size (KiB)
* RES = Resident Size (KiB) nTH = Number of Threads nsIPC=IPC namespace Inode
* SHR = Shared Memory (KiB) P = Last Used Cpu (SMP) nsMNT = MNT namespace Inode
* S = Process Status TIME = CPU Time nsNET = NET namespace Inode
* %MEM = Memory Usage (RES) SWAP = Swapped Size (KiB) nsPID=PID namespace Inode
* TIME+ = CPU Time, hundredths CODE = Code Size (KiB) nsUSER=USER namespace Inode
* COMMAND = Command Name/Line DATA = Data+Stack (KiB) nsUTS= UTS namespace Inode
* %CPU = CPU Usage nMaj = Major Page Faults
PPID = Parent Process pid nMin = Minor Page Faults
UID = Effective User Id nDRT = Dirty Pages Count
RUID = Real User Id WCHAN = Sleeping in Function
RUSER = Real User Name Flags = Task Flags <sched.h>
SUID = Saved User Id CGROUPS = Control Groups
SUSER = Saved User Name SUPGIDS = Supp Groups IDs
GID = Group Id SUPGRPS = Supp Groups Names
r:调整一个正在运行的进程Nice值
PID to renice [default pid = 920]
k:结束一个正在运行的进程
PID to signal/kill [default pid = 19156]
z:彩色/黑白显示开关

3. vmstat -系统活动、硬件及系统信息

      使用vmstat命令能够获得关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。
r:表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没 什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。 这个也和top的负载有关系,通常负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载相似每秒的运行队列。若是    运行队列过大,表示你的CPU很繁忙,通常会造成CPU使用率很高。
b:表示阻塞的进程,这个很少说,进程阻塞,你们懂的。
swpd:虚拟内存已使用的大小,若是大于0,表示你的机器物理内存不足了,若是不是程序内
存泄露的缘由,那么你该升级内存了或者把耗内存的任务迁移到
其余机器。free:空闲的物理内存的大小,个人机器内存总共8G,剩余3415M。
buff:Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300
多M
cache:cache直接用来记忆咱们打开的文件,给文件作缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来作文件 和目录的缓存,是为了提升程序执 行的性能,当程序使用内存时,buffer/cached会很快地被使用。)
si:每秒从磁盘读入虚拟内存的大小,若是这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。个人机器内存充裕,一切正常。
so:每秒虚拟内存写入磁盘的大小,若是这个值大于0,同上。
bi:块设备每秒接收的块数量,这里的块设备是指系统上全部的磁盘和其余块设备,默认块大小
是1024byte,我本机上没什么IO操做,因此一直是0,可是
我曾在处理拷贝大量数据(2-3T) 的机器上看过能够达到140000/s,磁盘写入速度差很少140M每秒。
bo:块设备每秒发送的块数量,例如咱们读取文件,bo就要大于0。bi和bo通常都要接近0,不然就是IO过于频繁,须要调整。
in:每秒CPU的中断次数,包括时间中断
cs:每秒上下文切换次数,例如咱们调用系统函数,就要进行上下文切换,线程的切换,也要
进程上下文切换,这个值要越小越好,太大了,要考虑调低
线程或者进程的数目,例如在apache和 nginx这种web服务器中,咱们通常作性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程 能够由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这 个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数, 咱们的代码就会进入内核空间,致使上下文切换,这个是很耗资源,也要尽可能避免频繁调系统函数。上下文切换 次数过多表示你的CPU大部分浪费在 上下文切换,致使CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us:用户CPU时间,我曾经在一个作加密解密很频繁的服务器上,能够看到us接近100,r运行队列达到80(机器在作压力测试,性能表现不佳)。
sy:系统CPU时间,若是过高,表示系统调用时间长,例如是IO操做频繁。
id:空闲 CPU时间,通常来讲,id + us + sy = 100,通常我认为id是空闲CPU使用率,us是用
户CPU使用率,sy是系统CPU使用率。
wt:等待IO CPU时间。
[root@CentOS7 ~]# vmstat -m
Cache Num Total Size Pages
fuse_inode 10 10 768 10
nf_conntrack_ffff88001a2d8000 0 0 320 12
nf_conntrack_ffffffff81a25e00 180 180 320 12
kcopyd_job 0 0 3312 9
dm_uevent 0 0 2608 12
dm_rq_target_io 0 0 136 30
每隔3秒5次:
1 [root@CentOS7 ~]# vmstat 3 5
2 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
3 r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 539680 17040 8 234828 508 252 7085 420 84 176 6 4 86 4 0
5 0 0 539680 17040 8 234828 0 0 0 0 29 53 0 0 100 0 0
6 1 0 539680 17040 8 234828 0 0 0 0 31 58 0 0 100 0 0
7 0 0 539680 17008 8 234828 0 0 0 0 34 67 0 0 100 0 0
8 1 0 539680 16668 8 234828 0 0 0 0 71 151 1 2 97 0 0 

4. w - 显示谁已登陆

w命令显示系统当前用户及其运行进程的信息。
[root@CentOS7 ~]# w root
12:26:14 up 2 days, 19:45, 3 users, load average: 0.05, 0.12, 0.13
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 Sat23 ?xdm? 1:08m 0.65s gdm-session-worker [pam/gdm-password]
root pts/0 192.168.56.1 Sun22 4:35m 0.61s 0.00s lsof
root pts/1 192.168.56.1 11:09 6.00s 0.20s 0.01s w root

5. uptime - 告诉系统已经运行了多久

uptime命令过去只显示系统运行多久。如今,能够显示系统运行多久、当前有多少的用户登陆、在过去的1,5,15分钟里平均负载时多少。
[root@CentOS7 ~]# uptime
12:30:39 up 2 days, 19:49, 3 users, load average: 0.06, 0.08, 0.12
何为系统负载呢?
      系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。若是一个进程知足如下条件则其就会位于运行队列中: 
            它没有在等待I/O操做的结果 
            它没有主动进入等待状态(也就是没有调用'wait') 
            没有被中止(例如:等待终止)
      通常来讲,每一个CPU内核当前活动进程数不大于3,则系统运行表现良好!固然这里说的是每一个cpu内核,也就是若是你的主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重。固然若是达到20,那就表示当前系统负载很是严重。

6. ps - 显示进程

       Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,若是想要动态的显示进程信息,就可使用top命令。
      要对进程进行监测和控制,首先必需要了解当前进程的状况,也就是须要查看当前进程,而 ps 命令就是最基本同时也是很是强大的进程查看命令。使用该命令能够肯定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是能够经过执行该命令获得的。
       ps为咱们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;若是想对进程时间监控,应该用 top 工具。
linux上进程有5种状态: 
       1. 运行(正在运行或在运行队列中等待) 
       2. 中断(休眠中, 受阻, 在等待某个条件的造成或接受到信号)        
       3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)        
       4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)       
       5. 中止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后中止运行运行)  
ps工具标识进程的5种状态码: 
       D 不可中断 uninterruptible sleep (usually IO) 
       R 运行 runnable (on run queue) 
       S 中断 sleeping         T 中止 traced or stopped         Z 僵死 a defunct (”zombie”) process
[root@linux ~]# ps aux
[root@linux ~]# ps -lA
[root@linux ~]# ps axjf
参数:
-A :全部的 process 均显示出来,与 -e 具备一样的效用;
-a :不与 terminal 有关的全部 process ;
-u :有效使用者 (effective user) 相关的 process ;
x :一般与 a 这个参数一块儿使用,可列出较完整信息。
输出格式规划:
l :较长、较详细的将该 PID 的的信息列出;
j :工做的格式 (jobs format)
-f :作一个更为完整的输出。
特别说明:因为 ps 可以支持的 OS 类型至关的多,因此他的参数多的离谱!并且有没有加上 - 差不少!详细的用法应该要参考 man ps。
例1.将目前属于您本身此次登入的 PID 与相关信息列示出来
[root@CentOS7 ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 19160 19156 0 80 0 - 29172 wait pts/1 00:00:00 bash
0 R 0 20465 19160 0 80 0 - 34343 - pts/1 00:00:00 ps
上面这个信息其实不少,各相关信息的意义为:
F:表明这个程序的flag,4表明使用者为super user
S:表明这个程序的状态
PID:这个程序的ID
C:CPU 使用的资源百分比
PRI:这个是 Priority (优先执行序) 的缩写
NI:这个是 Nice 值
ADDR:这个是 kernel function,指出该程序在内存的那个部分。若是是个 running的程序,通常就是『 - 』的啦!
SZ:使用掉的内存大小
WCHAN:目前这个程序是否正在运做当中,若为 - 表示正在运做
TTY:登入者的终端
TIME:使用掉的CPU时间
CMD:所下达的指令
例2.列出目前全部的正在内存当中的程序
[root@CentOS7 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.8 191492 4300 ? Ss May20 0:28 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S May20 0:02 [kthreadd]
root 3 0.1 0.0 0 0 ? S May20 7:12 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S May20 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S May20 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S May20 0:00 [rcuob/0]
root 10 0.1 0.0 0 0 ? S May20 6:10 [rcu_sched]
root 11 0.3 0.0 0 0 ? S May20 14:13 [rcuos/0]
root 12 0.0 0.0 0 0 ? S May20 0:03 [watchdog/0]
root 13 0.0 0.0 0 0 ? S< May20 0:00 [khelper]
root 14 0.0 0.0 0 0 ? S May20 0:00 [kdevtmpfs]
root 15 0.0 0.0 0 0 ? S< May20 0:00 [netns]
root 16 0.0 0.0 0 0 ? S< May20 0:00 [perf]
USER:该 process 属于那个使用者帐号的
PID :该 process 的号码
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运做,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者
程序,若为 pts/0 等等的,则表示为由网络链接进主机的程序
STAT:该程序目前的状态,主要的状态有:
R:该程序目前正在运做,或者是可被运做
S:该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号 (signal) 唤醒。
T:该程序目前正在侦测或者是中止了;
Z:该程序应该已经终止,可是其父程序却没法正常的终止他,形成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运做的时间
COMMAND:该程序的实际指令为
例3.显示出全部的程序
[root@CentOS7 ~]# ps -lA
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 47873 ep_pol ? 00:00:29 systemd
1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:02 kthreadd
1 S 0 3 2 0 80 0 - 0 smpboo ? 00:07:13 ksoftirqd/0
1 S 0 7 2 0 -40 - - 0 smpboo ? 00:00:00 migration/0
1 S 0 8 2 0 80 0 - 0 rcu_gp ? 00:00:00 rcu_bh
1 S 0 9 2 0 80 0 - 0 rcu_no ? 00:00:00 rcuob/0
1 S 0 10 2 0 80 0 - 0 rcu_gp ? 00:06:12 rcu_sched
1 S 0 11 2 0 80 0 - 0 rcu_no ? 00:14:16 rcuos/0
5 S 0 12 2 0 -40 - - 0 smpboo ? 00:00:03 watchdog/0
1 S 0 13 2 0 60 -20 - 0 rescue ? 00:00:00 khelper
例4.列出相似程序树的程序显示
[root@CentOS7 ~]# ps -axjf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 2 0 0 ? -1 S 0 0:02 [kthreadd]
2 3 0 0 ? -1 S 0 7:13 \_ [ksoftirqd/0]
2 7 0 0 ? -1 S 0 0:00 \_ [migration/0]
2 8 0 0 ? -1 S 0 0:00 \_ [rcu_bh]
2 9 0 0 ? -1 S 0 0:00 \_ [rcuob/0]
2 10 0 0 ? -1 S 0 6:12 \_ [rcu_sched]
2 11 0 0 ? -1 S 0 14:16 \_ [rcuos/0]
例5.找出与 crypto 与 bash 这两个服务有关的 PID 号码
[root@CentOS7 ~]# ps aux | egrep '(crypto|bash)'
root 30 0.0 0.0 0 0 ? S< May20 0:00 [crypto]
root 597 0.0 0.1 115240 772 ? S May20 0:14 /bin/bash /usr/sbin/ksmtuned
root 23362 0.0 0.6 116556 3272 pts/0 Ss 16:50 0:00 -bash
root 23521 0.0 0.0 52852 44 ? Ss May21 0:01 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"
root 25992 0.0 0.1 112648 956 pts/0 S+ 20:08 0:00 grep -E --color=auto (crypto|bash)

7. free - 内存使用状况 

[root@CentOS7 ~]# free
                   1          2          3          4          5          6
1              total       used       free     shared    buffers     cached
2 Mem:      24677460   23276064    1401396          0     870540   12084008
3 -/+ buffers/cache:   10321516   14355944
4 Swap:     25151484     224188   24927296
free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free),这个比较清楚,不说太多。
  free输出地第二行和第三行是比较让人迷惑的。这两行都是说明内存使用状况的。第一列是总量(total),第二列是使用量(used),第三列是可用量(free)。
  第一行的输出时从操做系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:
      24677460KB(缺省时free的单位为KB)物理内存,即FO[2][1];
      在这些物理内存中有23276064KB(即FO[2][2])被使用了; 
      还用1401396KB(即FO[2][3])是可用的;
这里获得第一个等式:
       FO[2][1] = FO[2][2] + FO[2][3]
       FO[2][4]表示被几个进程共享的内存的,如今已经deprecated,其值老是0(固然在一些系统上也可能不是0,主要取决于free命令是怎么实现的)。 FO[2][5]表示被OS buffer住的内存。FO[2][6]表示被OS cache的内存。在有些时候buffer和cache这两个词常常混用。不过在一些比较低层的软件里是要区分这两个词的,看老外的洋文:
       A buffer is something that has yet to be "written" to disk. 
       A cache is something that has been "read" from the disk and stored for later use.
free输出的第二行是从一个应用程序的角度看系统内存的使用状况。
       对于FO[3][2],即-buffers/cache,表示一个应用程序认为系统被用掉多少内存
       对于FO[3][3],即+buffers/cache,表示一个应用程序认为系统还有多少内存
由于被系统cache和buffer占用的内存能够被快速回收,因此一般FO[3][3]比FO[2][3]会大不少。
这里还用两个等式: 也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这两者是为了提升IO性能的,并由OS管理。
      FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
      FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6] 

8. iostat - CPU平均负载,硬盘活动

iostat命令可报告中央处理器(CPU)的统计信息,各类设备、分区及网络文件系统输入/输出的统计信息。
[root@CentOS7 ~]# iostat
Linux 3.10.0-327.el7.x86_64 (CentOS7.2) 05/23/2016 _x86_64_    (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.20 0.00 3.53 3.54 0.00 87.73
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 197.17 6120.99 371.74 1677443445 101873448
avg-cpu段:
%user: 在用户级别运行所使用的CPU的百分比
%nice: nice操做所使用的CPU的百分比
%sys: 在系统级别(kernel)运行所使用CPU的百分比
%iowait: CPU等待硬件I/O时,所占用CPU百分比
%idle: CPU空闲时间的百分比
Device段:
tps: 每秒钟发送到的I/O请求数
Blk_read /s: 每秒读取的block数
Blk_wrtn/s: 每秒写入的block数
Blk_read:   读入的block总数
Blk_wrtn:  写入的block总数
例.每隔2秒显示一次sda及上面全部分区的统计信息,共输出1次
[root@CentOS7 ~]# iostat -p sda 2 1
Linux 3.10.0-327.el7.x86_64 (CentOS7.2) 05/23/2016 _x86_64_    (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.19 0.00 3.52 3.54 0.00 87.75
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 196.83 6110.31 371.21 1677443609 101907192
sda1 0.01 0.02 0.01 4585 2060
sda2 43.56 438.87 217.75 120482400 59778512
sda3 152.42 5671.42 153.45 1556955824 42126620 

9. mpstat - 多处理器使用率

mpstat命令能够显示全部可用处理器的使用状况,处理器编号从0开始。mpstat -P ALL显示每一个处理器的平均使用率。
[root@CentOS7 ~]# mpstat -P ALL
Linux 3.10.0-327.el7.x86_64 (CentOS7.2) 05/23/2016 _x86_64_    (1 CPU) 
10:45:33 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10:45:33 PM all 5.19 0.00 2.70 3.54 0.00 0.81 0.00 0.00 0.00 87.76
10:45:33 PM 0 5.19 0.00 2.70 3.54 0.00 0.81 0.00 0.00 0.00 87.76

 10. pmap - 进程的内存使用

pmap命令能够显示进程的内存映射,使用这个命令能够找出形成内存瓶颈的缘由。
[root@CentOS7 ~]# pmap -d 23362
23362: -bash
Address Kbytes Mode Offset Device Mapping
0000000000400000 884 r-x-- 0000000000000000 000:00020 bash
00000000006dc000 4 r---- 00000000000dc000 000:00020 bash
00000000006dd000 36 rw--- 00000000000dd000 000:00020 bash
00000000006e6000 24 rw--- 0000000000000000 000:00000 [ anon ]
000000000221d000 1576 rw--- 0000000000000000 000:00000 [ anon ]
00007f7d3fc3d000 103580 r---- 0000000000000000 000:00020 locale-archive
00007f7d46164000 44 r-x-- 0000000000000000 000:00020 libnss_files-2.17.so
00007f7d4616f000 2044 ----- 000000000000b000 000:00020 libnss_files-2.17.so
00007f7d4636e000 4 r---- 000000000000a000 000:00020 libnss_files-2.17.so
00007f7d4636f000 4 rw--- 000000000000b000 000:00020 libnss_files-2.17.so
00007f7d46370000 24 rw--- 0000000000000000 000:00000 [ anon ]
00007f7d46376000 1752 r-x-- 0000000000000000 000:00020 libc-2.17.so
00007f7d4652c000 2048 ----- 00000000001b6000 000:00020 libc-2.17.so
00007f7d4672c000 16 r---- 00000000001b6000 000:00020 libc-2.17.so
00007f7d46730000 8 rw--- 00000000001ba000 000:00020 libc-2.17.so
00007f7d46732000 20 rw--- 0000000000000000 000:00000 [ anon ]
00007f7d46737000 12 r-x-- 0000000000000000 000:00020 libdl-2.17.so
00007f7d4673a000 2044 ----- 0000000000003000 000:00020 libdl-2.17.so
00007f7d46939000 4 r---- 0000000000002000 000:00020 libdl-2.17.so
00007f7d4693a000 4 rw--- 0000000000003000 000:00020 libdl-2.17.so
00007f7d4693b000 148 r-x-- 0000000000000000 000:00020 libtinfo.so.5.9
00007f7d46960000 2048 ----- 0000000000025000 000:00020 libtinfo.so.5.9
00007f7d46b60000 16 r---- 0000000000025000 000:00020 libtinfo.so.5.9
00007f7d46b64000 4 rw--- 0000000000029000 000:00020 libtinfo.so.5.9
00007f7d46b65000 132 r-x-- 0000000000000000 000:00020 ld-2.17.so
00007f7d46d6d000 12 rw--- 0000000000000000 000:00000 [ anon ]
00007f7d46d7c000 4 rw--- 0000000000000000 000:00000 [ anon ]
00007f7d46d7d000 28 r--s- 0000000000000000 000:00020 gconv-modules.cache
00007f7d46d84000 8 rw--- 0000000000000000 000:00000 [ anon ]
00007f7d46d86000 4 r---- 0000000000021000 000:00020 ld-2.17.so
00007f7d46d87000 4 rw--- 0000000000022000 000:00020 ld-2.17.so
00007f7d46d88000 4 rw--- 0000000000000000 000:00000 [ anon ]
00007fffc4354000 132 rw--- 0000000000000000 000:00000 [ stack ]
00007fffc43e0000 8 r-x-- 0000000000000000 000:00000 [ anon ]
ffffffffff600000 4 r-x-- 0000000000000000 000:00000 [ anon ]
mapped: 116688K writeable/private: 1864K shared: 28K
最后一行很是重要:
mapped: 116688K 内存映射所占空间大小
writeable/private: 1864K 私有地址空间大小
shared: 28K 共享地址空间大小

11. netstat和ss - 网络相关信息

         Netstat 命令用于显示各类网络相关信息,如网络链接,路由表,接口状态 (Interface Statistics),masquerade 链接,多播成员 (Multicast Memberships) 等等。
 从总体上看,netstat的输出结果能够分为两个部分:
       一个是Active Internet connections,称为有源TCP链接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字通常都应该是0。若是不是则表示软件包正在队列中堆积。这种状况只能在很是少的状况见到。
       另外一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字同样,可是只能用于本机通讯,性能能够提升一倍)。Proto显示链接使用的协议,RefCnt表示链接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示链接到套接口的其它进程使用的路径名。
[root@CentOS7 ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.0.2.15:33164 ec2-54-191-11-118:https ESTABLISHED
tcp 0 0 10.0.2.15:52665 123.59.42.81:https ESTABLISHED
tcp 0 52 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED
tcp 0 0 10.0.2.15:53607 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:52666 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:52321 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:40108 123.59.138.92:https ESTABLISHED
tcp 0 0 10.0.2.15:55494 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:55490 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:53608 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:55495 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:54883 123.59.42.81:https ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 6846 /run/systemd/notify
unix 5 [ ] DGRAM 6858 /run/systemd/journal/socket
unix 22 [ ] DGRAM 6860 /dev/log
unix 2 [ ] DGRAM 9469 /run/systemd/shutdownd
unix 2 [ ] DGRAM 14069
unix 2 [ ] DGRAM 1048183
unix 3 [ ] STREAM CONNECTED 1046317
常见参数
-a (all)显示全部选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的所有转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示创建相关连接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
[root@CentOS7 ~]# netstat -at 列出全部 tcp 端口
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.122.1:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN
tcp 0 0 10.0.2.15:33164 ec2-54-191-11-118:https ESTABLISHED
tcp 0 0 10.0.2.15:52665 123.59.42.81:https ESTABLISHED
tcp 0 52 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED
tcp 0 0 10.0.2.15:53607 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:52666 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:37671 123.59.87.202:https ESTABLISHED
tcp 0 0 10.0.2.15:52321 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:55494 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:55490 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:53608 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:55495 123.59.42.81:https ESTABLISHED
tcp 0 0 10.0.2.15:54883 123.59.42.81:https ESTABLISHED
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
tcp6 0 0 localhos:x11-ssh-offset [::]:* LISTEN
[root@CentOS7 ~]# netstat -au 列出全部 udp 端口
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:mdns 0.0.0.0:*
udp 0 0 0.0.0.0:53491 0.0.0.0:*
udp 0 0 0.0.0.0:47643 0.0.0.0:*
udp 0 0 192.168.122.1:domain 0.0.0.0:*
udp 0 0 0.0.0.0:bootps 0.0.0.0:*
udp 0 0 localhost:323 0.0.0.0:*
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 0.0.0.0:14662 0.0.0.0:*
udp6 0 0 [::]:49441 [::]:*
udp6 0 0 localhost:323 [::]:*
udp6 0 0 [::]:61519 [::]:*
[root@CentOS7 ~]# netstat -lt 只列出全部监听 tcp 端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.122.1:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
tcp6 0 0 localhos:x11-ssh-offset [::]:* LISTEN
[root@CentOS7 ~]# netstat -lu 只列出全部监听 udp 端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:mdns 0.0.0.0:*
udp 0 0 0.0.0.0:53491 0.0.0.0:*
udp 0 0 0.0.0.0:47643 0.0.0.0:*
udp 0 0 192.168.122.1:domain 0.0.0.0:*
udp 0 0 0.0.0.0:bootps 0.0.0.0:*
udp 0 0 localhost:323 0.0.0.0:*
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 0.0.0.0:14662 0.0.0.0:*
udp6 0 0 [::]:49441 [::]:*
udp6 0 0 localhost:323 [::]:*
udp6 0 0 [::]:61519 [::]:*
[root@CentOS7 ~]# netstat -lu 只列出全部监听 udp 端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:mdns 0.0.0.0:*
udp 0 0 0.0.0.0:53491 0.0.0.0:*
udp 0 0 0.0.0.0:47643 0.0.0.0:*
udp 0 0 192.168.122.1:domain 0.0.0.0:*
udp 0 0 0.0.0.0:bootps 0.0.0.0:*
udp 0 0 localhost:323 0.0.0.0:*
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 0.0.0.0:14662 0.0.0.0:*
udp6 0 0 [::]:49441 [::]:*
udp6 0 0 localhost:323 [::]:*
udp6 0 0 [::]:61519 [::]:*
[root@CentOS7 ~]# netstat -lx 只列出全部监听 UNIX 端口
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 1046533 /run/user/0/pulse/native
unix 2 [ ACC ] STREAM LISTENING 9738 /run/lvm/lvmpolld.socket
unix 2 [ ACC ] STREAM LISTENING 1046289 /run/user/0/keyring/pkcs11
unix 2 [ ACC ] STREAM LISTENING 1046292 /run/user/0/keyring/ssh
unix 2 [ ACC ] STREAM LISTENING 1044502 /run/user/0/keyring/control
unix 2 [ ACC ] STREAM LISTENING 19100 @/tmp/.X11-unix/X0

显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -suios

[root@CentOS7 ~]# netstat -st
IcmpMsg:
InType3: 42
InType11: 24
OutType3: 48
Tcp:
71276 active connections openings
26415 passive connection openings
443 failed connection attempts
22567 connection resets received
13 connections established
6169222 segments received
6167435 segments send out
1531 segments retransmited
0 bad segments received.
101775 resets sent
UdpLite:
TcpExt:
4160 TCP sockets finished time wait in fast timer
159348 delayed acks sent
243 delayed acks further delayed because of locked socket
Quick ack mode was activated 64 times
119 packets directly queued to recvmsg prequeue.
113274 bytes directly in process context from backlog
346692 bytes directly received in process context from prequeue
642042 packet headers predicted
151 packets header predicted and directly queued to user
2108179 acknowledgments not containing data payload received
833025 predicted acknowledgments
49 congestion windows recovered without slow start after partial ack
6 retransmits in slow start
172 other TCP timeouts
TCPLossProbes: 855
TCPLossProbeRecovery: 831
48 DSACKs sent for old packets
863 DSACKs received
20455 connections reset due to unexpected data
44 connections reset due to early user close
21 connections aborted due to timeout
TCPDSACKIgnoredNoUndo: 833
TCPSpuriousRTOs: 4
IPReversePathFilter: 314
TCPRetransFail: 10
TCPRcvCoalesce: 30786
TCPChallengeACK: 7
TCPSpuriousRtxHostQueues: 29
TCPAutoCorking: 1236
TCPSynRetrans: 616
TCPOrigDataSent: 1370187
TCPHystartTrainDetect: 4
TCPHystartTrainCwnd: 82
IpExt:
InNoRoutes: 32
InMcastPkts: 1724
OutMcastPkts: 738
InBcastPkts: 43901
InOctets: 1655483718
OutOctets: 1440836672
InMcastOctets: 374261
OutMcastOctets: 119692
InBcastOctets: 3810738
InNoECTPkts: 6421160
[root@CentOS7 ~]# netstat -su
IcmpMsg:
InType3: 42
InType11: 24
OutType3: 48
Udp:
115000 packets received
48 packets to unknown port received.
0 packet receive errors
114624 packets sent
0 receive buffer errors
0 send buffer errors
UdpLite:
IpExt:
InNoRoutes: 32
InMcastPkts: 1724
OutMcastPkts: 738
InBcastPkts: 43901
InOctets: 1655485325
OutOctets: 1440841862
InMcastOctets: 374261
OutMcastOctets: 119692
InBcastOctets: 3810738
InNoECTPkts: 6421188
在 netstat 输出中显示 PID 和进程名称
[root@CentOS7 ~]# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.0.2.15:33164 ec2-54-191-11-118:https ESTABLISHED 23944/firefox
tcp 0 0 10.0.2.15:52665 123.59.42.81:https ESTABLISHED 24872/daotunnel
tcp 0 388 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED 23358/sshd: root@pt
tcp 0 0 10.0.2.15:53607 123.59.42.81:https ESTABLISHED 24872/daotunnel
tcp 0 0 10.0.2.15:52666 123.59.42.81:https ESTABLISHED 24872/daotunnel
tcp 0 0 10.0.2.15:52321 123.59.42.81:https ESTABLISHED 24872/daotunnel
tcp 0 0 10.0.2.15:40833 123.59.87.200:https ESTABLISHED 920/daomonit
netstat 将每隔一秒输出网络信息
[root@CentOS7 ~]# netstat -c
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.0.2.15:33164 ec2-54-191-11-118:https ESTABLISHED
tcp 0 0 10.0.2.15:52665 123.59.42.81:https ESTABLISHED
tcp 0 52 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED
显示系统不支持的地址族
[root@CentOS7 ~]# netstat --verbose
netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.
显示核心路由信息
[root@CentOS7 ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
找出程序运行的端口
[root@CentOS7 ~]# netstat -ap | grep ssh
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 925/sshd
tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN 23358/sshd: root@pt
tcp 0 52 CentOS7.2:ssh 192.168.56.1:61340 ESTABLISHED 23358/sshd: root@pt
显示网络接口列表
[root@CentOS7 ~]# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
docker0 1500 186339 0 0 0 186275 0 0 0 BMU
eth0 1500 866623 0 0 0 747980 0 0 0 BMRU
eth1 1500 101288 0 0 0 83187 0 0 0 BMRU
lo 65536 5276771 0 0 0 5276771 0 0 0 LRU
virbr0 1500 0 0 0 0 0 0 0 0 BMU
      ss是Socket Statistics的缩写。顾名思义,ss命令能够用来获取socket统计信息,它能够显示和netstat相似的内容。但ss的优点在于它可以显示更多更详细的有关TCP和链接状态的信息,并且比netstat更快速更高效。
命令参数:
-h, --help 帮助信息
-V, --version 程序版本信息
-n, --numeric 不解析服务名称
-r, --resolve        解析主机名
-a, --all 显示全部套接字(sockets)
-l, --listening 显示监听状态的套接字(sockets)
-o, --options        显示计时器信息
-e, --extended       显示详细的套接字(sockets)信息
-m, --memory         显示套接字(socket)的内存使用状况
-p, --processes 显示使用套接字(socket)的进程
-i, --info 显示 TCP内部信息
-s, --summary 显示套接字(socket)使用概况
-4, --ipv4           仅显示IPv4的套接字(sockets)
-6, --ipv6           仅显示IPv6的套接字(sockets)
-0, --packet         显示 PACKET 套接字(socket)
-t, --tcp 仅显示 TCP套接字(sockets)
-u, --udp 仅显示 UCP套接字(sockets)
-d, --dccp 仅显示 DCCP套接字(sockets)
-w, --raw 仅显示 RAW套接字(sockets)
-x, --unix 仅显示 Unix套接字(sockets)
-f, --family=FAMILY  显示 FAMILY类型的套接字(sockets),FAMILY可选,支持  unix, inet, inet6, link, netlink
-A, --query=QUERY, --socket=QUERY
      QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D, --diag=FILE     将原始TCP套接字(sockets)信息转储到文件
 -F, --filter=FILE   从文件中都去过滤器信息
       FILTER := [ state TCP-STATE ] [ EXPRESSION ]
显示TCP链接
[root@CentOS7 ~]# ss -t -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 5 192.168.122.1:domain *:*
LISTEN 0 128 *:ssh *:*
LISTEN 0 128 127.0.0.1:ipp *:*
LISTEN 0 128 127.0.0.1:x11-ssh-offset *:*
ESTAB 0 0 10.0.2.15:33164 54.191.11.118:https
显示 Sockets 摘要
[root@CentOS7 ~]# ss -s
Total: 555 (kernel 567)
TCP: 21 (estab 13, closed 1, orphaned 0, synrecv 0, timewait 0/0), ports 0
 
Transport Total IP IPv6
*    567 - -
RAW    2 0 2
UDP    14 11 3
TCP    20 17 3
INET    36 28 8
FRAG    0 0 0
列出全部打开的网络链接端口
[root@CentOS7 ~]# ss -l
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN 0 0 rtnl:1216349100 *
nl UNCONN 0 0 rtnl:2059403794 *
nl UNCONN 0 0 rtnl:geoclue/23600 *
查看进程使用的socket
[root@CentOS7 ~]# ss -pl
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN 0 0 rtnl:1216349100 *
nl UNCONN 0 0 rtnl:2059403794 *
显示全部UDP Sockets
[root@CentOS7 ~]# ss -u -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:mdns *:*
UNCONN 0 0 *:53491 *:*
ESTAB 0 0 10.0.2.15:42245 120.25.108.11:ntp
UNCONN 0 0 *:47643 *:*
UNCONN 0 0 192.168.122.1:domain *:*
UNCONN 0 0 *%virbr0:bootps *:*
UNCONN 0 0 127.0.0.1:323 *:*
UNCONN 0 0 *:bootpc *:*
UNCONN 0 0 *:bootpc *:*
UNCONN 0 0 *:14662 *:*
ESTAB 0 0 10.0.2.15:39026 202.118.1.81:ntp

12. tcpdump:详细的网络流量分析

       用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump能够将网络中传送的数据包的“头”彻底截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
参数:
-nn,直接以 IP 及 Port Number 显示,而非主机名与服务名称。
-i,后面接要「监听」的网络接口,例如 eth0, lo, ppp0 等等的接口。
-w,若是你要将监听所得的数据包数据储存下来,用这个参数就对了。后面接文件名。
-c,监听的数据包数,若是没有这个参数, tcpdump 会持续不断的监听,直到用户输入 [ctrl]-c 为止。
-A,数据包的内容以 ASCII 显示,一般用来捉取 WWW 的网页数据包资料。
-e,使用资料链接层 (OSI 第二层) 的 MAC 数据包数据来显示。
-q,仅列出较为简短的数据包信息,每一行的内容比较精简。
-X,能够列出十六进制 (hex) 以及 ASCII 的数据包内容,对于监听数据包内容颇有用。
-r,从后面接的文件将数据包数据读出来。那个「文件」是已经存在的文件,而且这个「文件」是由 -w 所制做出来的。
      所欲捕获的数据内容:咱们能够专门针对某些通讯协议或者是 IP 来源进行数据包捕获。那就能够简化输出的结果,并取得最有用的信息。
      常见的表示方法有:
      'host foo', 'host 127.0.0.1' :针对单台主机来进行数据包捕获。
      'net 192.168' :针对某个网段来进行数据包的捕获。
      'src host 127.0.0.1' 'dst net 192.168':同时加上来源(src)或目标(dst)限制。
      'tcp port 21':还能够针对通讯协议检测,如tcp、udp、arp、ether 等。
      除了这三种类型的关键字以外,其余重要的关键字以下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'||'。
[root@CentOS7 ~]# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
02:58:12.453576 IP 10.0.2.15.41384 > 123.59.138.93.https: Flags [F.], seq 3046243613, ack 2957421906, win 42600, length 0
02:58:12.453863 IP 123.59.138.93.https > 10.0.2.15.41384: Flags [.], ack 1, win 65535, length 0
02:58:12.454352 IP 10.0.2.15.43009 > 112.54.207.8.domain: 15449+ PTR? 93.138.59.123.in-addr.arpa. (44)
02:58:12.484893 IP 123.59.138.93.https > 10.0.2.15.41384: Flags [P.], seq 1:54, ack 1, win 65535, length 53
02:58:12.484932 IP 10.0.2.15.41384 > 123.59.138.93.https: Flags [R], seq 3046243614, win 0, length 0
02:58:12.485000 IP 123.59.138.93.https > 10.0.2.15.41384: Flags [F.], seq 54, ack 1, win 65535, length 0
35 packets captured
162 packets received by filter
97 packets dropped by kernel
相关文章
相关标签/搜索