tcpdump,vmstat简介

1、100.0.0.16/28 对应网段的网关地址、广播地址、可分配IP地址范围
ip地址个数2^4 =16
ip地址范围100.0.0.16-100.0.0.31
网关地址: 100.0.0.16
广播地址: 100.0.0.31
可分配ip地址范围: 100.0.0.17~ 100.0.0.30
2、使用man手册学习tcpdump的使用
NAME
tcpdump - dump traffic on a network

命令格式

   tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
           [ -c count ]
           [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
           [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
           [ --number ] [ -Q|-P in|out|inout ]
           [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
           [ -W filecount ]
           [ -E spi@ipaddr algo:secret,...  ]
           [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
           [ --time-stamp-precision=tstamp_precision ]
           [ --immediate-mode ] [ --version ]
           [ expression ]

选项

-a #将网络地址和广播地址转变成名字
-A #以ASCII格式打印出所有分组,并将链路层的头最小化
-b #数据链路层上选择协议,包括ip/arp/rarp/ipx都在这一层
-c #指定收取数据包的次数,即在收到指定数量的数据包后退出tcpdump
-d #将匹配信息包的代码以人们能够理解的汇编格式输出
-dd #将匹配信息包的代码以c语言程序段的格式输出
-ddd #将匹配信息包的代码以十进制的形式输出
-D #打印系统中所有可以监控的网络接口
-e #在输出行打印出数据链路层的头部信息
-f #将外部的Internet地址以数字的形式打印出来,即不显示主机名
-F #从指定的文件中读取表达式,忽略其他的表达式
-i #指定监听网络接口
-l #使标准输出变为缓冲形式,可以数据导出到文件
-L #列出网络接口已知的数据链路
-n #不把网络地址转换为名字
-N 不输出主机名中的域名部分,例如www.baidu.com只输出www
-nn #不进行端口名称的转换
-P #不将网络接口设置为混杂模式
-q #快速输出,即只输出较少的协议信息
-r #从指定的文件中读取数据,一般是-w保存的文件
-w #将捕获到的信息保存到文件中,且不分析和打印在屏幕
-s #从每个组中读取在开始的snaplen个字节,而不是默认的68个字节
-S #将tcp的序列号以绝对值形式输出,而不是相对值
-T #将监听到的包直接解析为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议)
-t #在输出的每一行不打印时间戳
-tt #在每一行中输出非格式化的时间戳
-ttt #输出本行和前面以后之间的时间差
-tttt #在每一行中输出data处理的默认格式的时间戳
-u #输出未解码的NFS句柄
-v #输出稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息
-vv #输出详细的信息

3、详细叙述僵尸进程产生的原因以及危害
僵尸进程

僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出,子进程被init接管,子进程退出后init会回收其占用的相关资源。

产生过程
一个进程在调用exit命令结束自己的生命的时候,其实并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。在Linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程 不再占用任何内存空间。它需要它的父进程来为它收尸,如果它的父进程没安装SIGCHLD信号处理函数调用wait或waitpid()等待子进程结束,又没有显式忽略该信号,那么它就一直保持僵尸状态,如果这时父进程结束了,那么init进程自动会接手这个子进程,为它收尸,它还是以被清除的。但是如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是为什么系统中有时会有很多的僵尸进程。
危害
由于子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束。那么会不会因为父进程太忙来不及wait子进程,或者说不知道子进程什么时候结束,而丢失子进程结束时的状态信息呢?不会。因为UNIX提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息,就可以得到。这种机制就是:在每个进程退出的时候,内核释放该进程的所有资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行进间the amount of CPU time taken by the process等)。直到父进程通过wait/waitpid来取时才释放。但这样就导制了问题,如果进程不调用wait/waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵尸进程,将因为没有可用的进程号而导制系统不能产生新的进程。此即为僵尸进程的危害,应当避免。

参考:https://baike.baidu.com/item/僵尸进程/1036577?fr=aladdin
4、详细说明vmstat输出结果的含义
tcpdump,vmstat简介
procs

r:可运行的进程数(正在运行或等待运行期间)。

b:处于不可中断睡眠的进程数。

memory

swpd:使用的虚拟内存量。

free:空闲内存量。

buff:用作缓冲区的内存量。

cache:用作缓存的内存量。

swap

si:从磁盘换入的内存量(/s)。

so:交换到磁盘的内存量(/s)。

io

bi:从块设备接收的块(blocks/s)。

bo:发送到块设备的块(blocks/s)。

system

in:每秒中断的次数,包括时钟。

cs:每秒上下文切换的次数。

cpu

这些是总CPU时间的百分比。

us:运行非内核代码所花费的时间。(用户时间,包括nice时间)

sy:运行内核代码所花费的时间。(系统时间)

id:空闲时间。在Linux 2.5.41之前,这包括IO等待时间。

wa:等待IO的时间。在Linux 2.5.41之前,包含在空闲时间中。

st:从虚拟机中窃取的时间。在Linux 2.6.11之前,不存在。
上一篇:linux命令之--vmstat


下一篇:vmstat-虚拟内存查看实例