进程管理和网络管理

  • 1、100.0.0.16/28 对应网段的网关地址、广播地址、可分配IP地址范围
  • 2、使用man手册学习tcpdump的使用
  • 3、详细叙述僵尸进程产生的原因以及危害
  • 4、详细说明vmstat输出结果的含义

100.0.0.16/28 对应网段的网关地址、广播地址、可分配IP地址范围

子网掩码28对应,255.255.255.240
这个网段 =
255.255.255.11110000=240
100.0.0.00010000=16
算法 :ipv4地址对应32位
28转换成二进制
1111 1111=255,
1111 0000=240
255.255.255.240
一个网络的主机数算法:=2^主机id位数-2
可分配IP地址范围:
2^4-2=14
100.0.0.16~100.0.0.0.31
当主机位是全1时我们将该地址作为子网广播地址
默认网关位第一位:100.0.0.16
广播地址:
100.0.0.0001 1111=广播地址
100.0.0.31
网关地址
100.0.0.0001 0001=网关地址
100.0.0.17

使用man手册学习tcpdump的使用

[root@centos7 ~]#man tcpdump
NAME
       tcpdump - dump traffic on a network     #tcpdump  在网络上转储流量

tcpdump的选项:

[root@centos7 ~]#tcpdump --help
Usage: tcpdump 
				[-a	将网络地址和广播地址转变成名字;
				A
				b
				-d   将匹配信息包的代码以人们能够理解的汇编格式给出;
				-dd		将匹配信息包的代码以c语言程序段的格式给出;
				-ddd		将匹配信息包的代码以十进制的形式给出;
				D
				-e			 在输出行打印出数据链路层的头部信息,包括源mac和目的mac,以及网络层的协议;
				-f				将外部的Internet地址以数字的形式打印出来;
				h
				H
				-I				使标准输出变为缓冲行形式;
				J
				K
				l
				L
				-n				 指定将每个监听到数据包中的域名转换成IP地址后显示,不把网络地址转换成名字;
				-nn				tcpdump遇到协议号或端口号的时候,将端口显示数字,而不是显示名称,
				N
				O
				p
				q
				S
				u
				U
				-v					输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
				-vv    输出详细的报文信息;
				x
				-X			    告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。
				#] 
				[ -B size ] 
				[ -c count ]      选项很好理解,就是抓固定数量的包,如果没有-c选项,tcpdump会一直运行
                [ -C file_size ]  指定住区固定数目的包,后面加数字
                 [ -E algo:secret ] 
                 [ -F file ] [ -G seconds ]			从指定的文件中读取表达式,忽略其它的表达式;
                [ -i interface ] 				  i的含义是interface,这里我们需要指定的是监听哪一块网卡,这对于主机具有多台网卡的时候十分必要。
                [ -j tstamptype ] 
                [ -M secret ] 
                [ --number ]
                [ -Q|-P in|out|inout ]
                [ -r file ] 
                [ -s snaplen ] 			  snaplen表示从一个包中截取的字节数。0表示包不截断,抓完整的数据包。默认的话 tcpdump 只显示部分数据包,默认68字节。
                [ --time-stamp-precision precision ]
                [ --immediate-mode ] 
                [ -T type ] 				将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)
                [ --version ] 
                [ -V file ]
                [ -w file ] 		
                [ -W filecount ] 				直接将包写入文件中,并不分析和打印出来;
                [ -y datalinktype ] 
                [ -z postrotate-command ]
                [ -Z user ] 
                [ expression ]

tcpdump常见的选项:

tcpdump -c 10 限制抓取10个包 (count)
tcpdump -c 10 -w cap.log -w保存到一个文件
tcpdump -r cap.log 读取存储文件 内容

-v
  详细模式 显示包信息 v越多 约详细
  
-n
  不进行别名 (查看IP 而不是域名 联想netstat -n选项)
  
常见参数:
  
指定协议类型:
tcpdump udp
  只查看udp 常见udp应用,文件共享,语音,文字聊天 dns
  
tcpdump icmp
  icmp : ping流量
  
指定端口号:
  tcpdump port 80
  
指定端口范围:
  tcpdump portrange 80
  
指定 源端口,目标端口
  tcpdump src port 80 tcpdump dst port 80
  
指定 主机:
  tcpdump host www.baidu.com
  也可以加ip
  
以ascii 显示
  tcpdump -A

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

  僵尸进程产生的原因:
    当一个进程创建了一个子进程时,他们的运行时异步的。即父进程无法预知子进程会在什么时候结束,那么如果父进程很繁忙来不及wait 子进程时,那么当子进程结束时,会不会丢失子进程的结束时的状态信息呢?处于这种考虑unix提供了一种机制可以保证只要父进程想知道子进程结束时的信息,它就可以得到。

    这种机制是:在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存。但是仍然保留了一些信息(如进程号pid 退出状态 运行时间等)。这些保留的信息直到进程通过调用wait/waitpid时才会释放。这样就导致了一个问题,如果没有调用wait/waitpid的话,那么保留的信息就不会释放。比如进程号就会被一直占用了。但系统所能使用的进程号的有限的,如果产生大量的僵尸进程,将导致系统没有可用的进程号而导致系统不能创建进程。所以我们应该避免僵尸进程

    这里有一个需要注意的地方。如果子进程先结束而父进程后结束,即子进程结束后,父进程还在继续运行但是并未调用wait/waitpid那子进程就会成为僵尸进程。

    但如果子进程后结束,即父进程先结束了,但没有调用wait/waitpid来等待子进程的结束,此时子进程还在运行,父进程已经结束。那么并不会产生僵尸进程。应为每个进程结束时,系统都会扫描当前系统中运行的所有进程,看看有没有哪个进程时刚刚结束的这个进程的子进程,如果有,就有init来接管它,成为它的父进程。

    同样的在产生僵尸进程的那种情况下,即子进程结束了但父进程还在继续运行(并未调用wait/waitpid)这段期间,假如父进程异常终止了,那么该子进程就会自动被init接管。那么它就不再是僵尸进程了。应为intit会发现并释放它所占有的资源。(当然如果进程表越大,init发现它接管僵尸进程这个过程就会变得越慢,所以在init为发现他们之前,僵尸进程依旧消耗着系统的资源)

    在linux系统中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的“僵尸”进程。“僵尸”进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。由于进程表的容量是有限的,所以,defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数目太多,还会导致系统瘫痪。

  简略的产生原因:
    在子进程终止后到父进程调用wait()前的时间里,子进程被称为zombie;

    具体a. 子进程结束后向父进程发出SIGCHLD信号,父进程默认忽略了它

    b. 父进程没有调用wait()或waitpid()函数来等待子进程的结束

    c. 网络原因有时会引起僵尸进程;

  僵尸进程的危害:
    僵尸进程会占用系统资源,如果很多,则会严重影响服务器的性能;

    孤儿进程不会占用系统资源,最终是由init进程托管,由init进程来释放;

    signal(SIGCHLD, SIG_IGN); // 忽略SIGCHLD信号,这是一个常用于提升并发服务器性能的技巧

    因为并发服务器常常fork很多子进程,子进程终结之后需要服务器进程去wait清理资源。

    如果将此信号的处理方式设置为忽略,可让内核把僵尸进程转交给init进程去处理,省去了大量僵尸进程占用系统资源。

  如何杀死僵尸进程
    重启服务器电脑,这个是最简单,最易用的方法,但是如果你服务器电脑上运行有其他的程序,那么这个方法,代价很大。
    找到该defunct僵尸进程的父进程,将该进程的父进程杀掉,则此defunct进程将自动消失
    命令: ps -ef | grep defunct_process_pid

详细说明vmstat输出结果的含义

  内存工具:

[root@centos7 ~]#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 130304 615164   1004 543000    0    0     8     1   36   57  1  2 97  0  0

  vmstat命令:虚拟内存信息
    vmstat [options ] 【delay [count]】
    vmstat 2 5
  proc:
    r:可运行(郑云翔或等待运行)进程的个数,和核心数有关
    b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)
  memory:
    swpd:交换内存的使用总量
    free:空闲物理内存总量
    buffer:用于buffer的内存总量
    cache:用于cache的内存总量
  swap:
    si:从磁盘交换进内存的数据速率(kb/s)
    so:从内存交换至磁盘的数据速率(kb/s)
  io:
    bi:从块设备读入到系统的速率(kb/s)
    bo:保存数据至块设备的速率
  system:
    in:interrupts 中断速率,包括时钟
    cs:context switch 进程切换速率
  system:
    in:interrupts 中断速率,包括时钟
    cs:context switch 进程切换速率
  cpu:
    us:Time spent running non-kernel code
    sy:Time spent running kernel code
    id:Time spent idle. Linux 2.5.41前,包括IO-wait time.
    wa:Time spent waiting for IO. 2.5.41前,包括in idle.
    st:Time stolen from a virtual machine. 2.6.11前,unknown.
  选项:
    -s:显示内存的统计数据

[root@centos7 ~]#vmstat --help

Usage:
 vmstat [options] [delay [count]]

Options:
 -a, --active           active/inactive memory      		显示活跃和非活跃内存
 -f, --forks            number of forks since boot			显示从系统启动至今的fork数量 
 -m, --slabs            slabinfo										显示slabinfo
 -n, --one-header       do not redisplay header		只在开始时显示一次各字段名称。
 -s, --stats            event counter statistics				显示内存相关统计信息及多种系统活动数量。
 -d, --disk             disk statistics								显示磁盘相关统计信息。
 -D, --disk-sum         summarize disk statistics
 -p, --partition <dev>  partition specific statistics     显示指定磁盘分区统计信息
 -S, --unit <char>      define display unit   				显示内存的统计数据。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
 -w, --wide             wide output  				 				宽输出
 -t, --timestamp        show timestam
 -h, --help     display this help and exit
 -V, --version  output version information and exit 	显示vmstat版本信息。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值