监控io性能,free命令,ps命令,查看网络状态,linux下抓包,linux网络相关

监控io性能

  • 有时候,cpu占用率不高,可是负载却很高
  • 这种状况多是因为 io 性能不足引发的
  • 可使用 iostat 命令查看磁盘状态
  • 在安装sysstat包的时候,就已经包含了 iostat 命令
  • 能够直接使用 iostat 查看磁盘状态
  • 也可使用 iostat 1 每秒输出一次磁盘状态

  • 一个重要的用法是 iostat -x
  • 参数 -x 能够查看到一个重要的数据
  • 如上图所示,使用x参数,能够查看到 %util 这一列数据
  • cpu的使用时间里面,有两部分
  • 一部分是 处理进程计算的时间
  • 一部分是 等待 io 的时间
  • 某些时候要经过磁盘拿到数据才能进行计算处理
  • 或者要把一些数据进行保存写入磁盘
  • 磁盘读写的这个时间就是io等待时间
  • cpu须要读取磁盘数据或者写入磁盘数据才能进行下一步动做
  • 这个数据存取的时间就是cpu的io等待时间
  • %util 就是 io 等待时间 占 cpu总时间的百分比
  • 若是磁盘的 %util 列的值很大,达到50%,60%
  • 说明磁盘io性能不足,致使io等待时间太长
  • 通常来讲,%util 值大,磁盘读写量都会很大,由于频繁读取
  • 可是若是出现,%util值大,可是磁盘读写量却不大
  • 说明这个磁盘可能出现了问题,也许须要更换磁盘了

  • 若是想知道哪个进程在频繁读写磁盘
  • 可使用 iotop 命令
  • 这个命令不是默认安装的,须要进行安装
  • 使用 yum install -y iotop 进行安装
  • 如图,直接使用 iotop 命令就能够进入这个界面
  • 也是动态显示数据的界面
  • 看 IO 列就能够知道进程的io占比
  • 默认排序规律是 io 占比高的进程在上面

free命令

  • free命令能够查看内存使用状况
  • 使用 free 命令会出现上图数据
  • 有三行数据,第一行是列名称,第二行是内存数据,第三行是交换分区的数据
  • 主要看第二行内存数据
  • 第二行数据,第一列 total 是内存总大小,单位是kb
  • 如图,还可使用两个参数,-m 或者 -h
  • 参数 m 的意思是,把数据的显示单位变成 MB,本来是 kb 的
  • 参数 h 的意思是,在数据后面加上更容易阅读的单位显示
  • 能够看到,使用参数 h 以后,每一个数据后面都有单位显示了
  • 第二列数据used是 使用了多少内存
  • 第三列数据free是 剩余多少内存
  • 可是有一个问题,就是 used + free 不等于 total
  • 这是由于 有一部份内存 被分配给了 buff/cache
  • buff/cache 是 缓冲/缓存
  • 由于磁盘速度与cpu速度差距太大,因此中间须要内存作缓冲
  • 如上图,数据从磁盘到cpu,通过内存的部分就是 cache 缓存
  • 数据从cpu到磁盘,通过内存的部分就是 buffer 缓冲
  • 最后一列数据 available 的数值是 free的值 + 尚未被使用的 buff/cache 的值
  • 因此内存真正可使用的空间值是 available 的值,而不是 free 的值
  • 想看内存真正剩余空间应该看 available

ps命令

  • ps 能够查看系统内,进程的情况
  • 通常使用 ps aux 命令查看
  • 这样能够看到系统全部的进程的状况
  • top命令是实时的,ps命令则是快照
  • 就是使用命令那个时间点的进程状况,而不是实时更新信息的
  • 如图,能够看到 cpu 和 内存 的占用状况
  • 如上图,使用管道符,配合 grep 使用能够查看某个进程是否存在
  • 上图例子,查看 nginx 和 mysql 进程是否存在,还有进程的信息

  • 另一种ps命令的使用方法是 ps -elf
  • 上图是使用 ps -elf 命令后出现的进程信息
  • ps aux 和 pa -elf 均可以用来查看进程的状况

  • 使用 kill + 进程的PID 能够杀死一个进程
  • 若是想查看一个进程的目录,要用到 PID
  • proc目录下面有不少数字目录
  • 这么数字目录的数字就是进程的PID
  • 因此如图,ls -l /proc/2729 就能够查看一个进程目录的内容

  • 如图,ps aux 显示的信息
  • VSZ 是虚拟内存
  • RSS 是物理内存
  • TTY 是进程在哪一个TTY上
  • STAT 是进程状态
  • START 是进程开始的时间
  • TIME 是进程运行了多久
  • COMMAND 是进程名称等信息

  • 主要须要注意的是 STAT 列的信息
  • STAT有各类不一样的类型
  • 例如,类型 D 是不可中断的进程类型
  • 类型D的进程由于会影响程序的结果,因此是不能中断的
  • 类型D的进程对系统的负载影响比较大
  • 有不少 D类型 的进程的话,系统负载会很大
  • R 是指某个时间段内在使用cpu的进程
  • S 是睡眠状态的进程,在须要的时候会被cpu唤醒
  • 如图,S+ 表示这个进程是在前台运行的
  • 符号 + 表示前台,有 + 的进程类型,就表示这个进程是前台进程
  • T 表示被暂停的进程,好比使用 ctrl + z 暂停一个程序
  • 这个程序的进程就进入了 T 的状态
  • 小写的 s 表明主进程
  • 如图,nginx 的进程里面,分为 父进程 和 子进程
  • 父进程类型是 Ss 说明父进程是主进程
  • 看用户,父进程是 root 启动的
  • 子进程是其它用户启动的
  • 若是一个进程有多个线程,就会显示 l 状态

查看网络状态

  • netstat 命令能够查看网络状态
  • netstat 能够查看TCP/IP的通讯状态
  • 服务器要对外通讯,须要一个端口
  • 外部数据经过端口进入服务器
  • 要获取这些数据,须要对端口进行监听
  • 使用 netstat -lnp 命令能够查看监听端口信息
  • 如图,查看监听端口信息
  • tcp是ipv4协议,tcp6是ipv6协议,udp是udp协议
  • State 表示状态,下面是 LISTEN 表示监听状态
  • 第一行信息,最后一列显示,sshd,表示这是远程链接
  • Local Address 列下面,22 表示是经过 22 端口链接的

  • socket 文件是用来进程间通讯的,前提是在同一台服务器
  • netstat 也能够查看系统里面有哪里socket文件被监听
  • 如图,这就是一个被监听的socket文件

  • netstat主要仍是查看端口的监听信息
  • 还有一种用法 netstat -an
  • 这个命令能够查看 TCP/IP 状态
  • 参数 an 查看的是全部的链接状态
  • 也能够查看指定的信息
  • 如图,-ltnp 就是只查看 tcp协议的信息
  • 第二个 -ltunp 就能够查看 tcp协议和udp协议的信息
  • netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
  • 以上命令能够统计各类TCP/IP状态的进程的数量
  • 其中 ESTABLISHED 的数量能够表明并发链接数
  • 并发链接就是指同一时间段,有多少客户端在链接服务端
  • 通常来讲,ESTABLISHED 的数量在1000如下或者几千左右

  • 命令 ss -an 是一个相似 netstat 的命令
  • 也能够查看 TCP/IP 的状态
  • 如图,使用 grep 匹配状态为 LINTEN 的进程
  • 可是 ss 命令的缺点是,不会显示进程的名字

linux下抓包

  • 命令 tcpdump 是用来抓包的
  • 受到网络攻击的时候,网卡流量会有异常
  • 进来的包可能会超过1万,想知道有什么包进来,可使用 tcpdump
  • tcpdump命令若是不存在,就须要安装包
  • 使用命令 yum install -y tcpdump
  • 使用上图命令就能够看到许多信息
  • 参数 -nn 能够显示主机ip地址和端口号
  • 如上图,这是 ip 地址,22是接受数据的端口
  • 如上图,若是不使用 -nn 参数
  • 那么出来的数据原来的ip地址的位置就变成了主机名称
  • 端口号的位置,变成了 .ssh
  • 参数 -i 后面接 网卡的名称 ens33
  • 这样看这个网卡收到的数据
  • 这些信息主要分为几个部分
  • 如图,第一部分是时间信息
  • 第二部分是 源ip地址和端口
  • 第三部分是 目的ip地址和端口
  • 源ip就是发送数据的一方,目的ip是接受数据的一方
  • 后面的部分就是 包 的一些信息

  • 有一种DDos攻击叫作 udp flood
  • udp的包有多是DDos攻击
  • 遇到这些攻击就须要接入防攻击的设备或者请专业的人员处理
  • tcpdump 能够显示指定端口的包
  • 使用 port参数 后面接端口号 22 就能够抓 ip地址端口号为22 的包
  • 还可使用 not 和 and 进行条件选择
  • 如图,not port 意思是抓 ip端口不是 22 的包
  • 后面是 and 表示还要符合and后面的条件
  • 参数 host 能够指定ip地址,后面接ip地址 192.168.0.100
  • 意思就是抓 ip端口不是22 而且 ip地址为 192.168.0.100 的包

  • 还能够指定长度,指定个数来抓取数据包
  • 参数 -c 能够指定抓包个数,后面接 100 表示抓100个包
  • 如图,能够抓取数据包,并保存到一个文件里面
  • 参数 -w 就能够指定保存到哪一个文件里面
  • 这里是抓取 100 个包保存到 1.cap 里面
  • 不过使用这个命令以后,系统并无反应,由于系统没有产生数据包,因此没有东西抓取
  • 因此能够复制一个虚拟终端,输入一些命令,就会产生一些数据包
  • 这里就能够抓取到,抓够100个包就会自动退出
  • 文件 1.cap 若是使用 cat 读取,会发现里面都是乱码
  • 使用 tcpdump -r /tmp/1.cap 就能够读取1.cap文件的数据流的信息
  • 如图,下面显示的就是数据流信息,也是数据的流向
  • 写入1.cap的信息时数据包的信息
  • 可是使用 -r 只能读取数据流向的信息,不能读取到数据包里面的内容

  • 安装 wireshark 包,可使用命令 tshark
  • 这是一个相似 tcpdump 的工具
  • 使用上图命令,能够查看指定网卡,指定端口,web服务的信息
  • 上图是使用命令后,显示的信息
  • 能够看到,访问的ip地址,域名,GET操做等信息
  • 不过这个命令在虚拟机上不能实验,由于虚拟机没有web服务

linux网络相关

  • 安装包 yum install -y net-tools
  • 安装好以后,就可使用命令 ifconfig 查看网卡ip了
  • ifconfig 有一个参数 -a
  • 使用 ifconfig 查看网卡信息的时候
  • 若是一个网卡没有ip,多是网卡被关闭了,那么就不会显示
  • 这种时候,使用 ifconfig -a 就可让没有ip的网卡也显示出来

  • 有两个跟网卡有关的命令 ifdown 和 ifup
  • ifdown 是关闭网卡
  • ifup 是开启网卡
  • 若是在 xshell 使用这个命令
  • 由于xshell远程链接主机是经过这个网卡链接的
  • 因此若是在xshell关闭这个网卡,远程链接会自动中断
  • 要继续远程链接,须要先在主机终端使用 ifup ens33 打开网卡
  • 而后才能够继续远程链接
  • 有时候须要对一个网卡进行更改
  • 好比更改网关,增长dns等,更改以后就须要重启服务
  • 可是重启服务会把全部网卡都重启,如今只须要重启指定的网卡,其它不用动
  • 这种时候,就可使用 ifdown,ifup 来操做
  • 可是有个问题,若是想要更改的是远程链接正在使用的网卡
  • 若是关闭,就不能远程链接启动了
  • 如上图,这种时候,把 ifdown 和 ifup 写在一条命令里面
  • 这样使用命令后,网卡会自动关闭,而后自动重启
  • 这样就能够远程链接继续使用了

  • 还能够增长虚拟网卡
  • 目前系统里面有 ens33 和 lo 两个网卡
  • 在不增长物理网卡的状况下,增长新的网卡
  • 能够设置虚拟网卡,而后在虚拟网卡上设置新ip
  • 首先,cd 进入网卡配置文件所在的目录里面
  • 而后把ens33网卡的配置文件ifcfg-ens33 复制一份,而后重命名为 ifcfg-ens33:0
  • 上图命令冒号 : 前面加 \ 是由于须要脱义为普通字符,不脱义就是命令字符了
  • 而后使用 vi ifcfg-ens33:0 编辑该配置文件
  • 如图,把NAME的值改成 ens33:0 ,原来的值是ens33
  • 这里冒号 : 不须要脱义,由于这个值是名称字符串,不会把冒号错认为命令字符
  • DEVICE的值也改成 ens33:0
  • 而后 IPADDR 的值也修改一下,把最后一列修改成跟原来的值不一样
  • 后面两行数据 GATEWAY 和 DNS1 能够删除,由于别的网卡里面已经配置了
  • 而后保存退出
  • 如图,使用命令 ifdown ens33 && ifup ens33 关闭而后重启 ens33 网卡
  • 而后再使用 ifconfig 查看网卡信息
  • 能够看到多了一个 ens33:0 的网卡信息
  • 这样就成功设置了虚拟网卡
  • 后面 lvs 或者 keepalived 会用到虚拟网卡

  • 一台服务器链接了一根网线
  • 可是不肯定服务器跟网线是否链接成功
  • 若是人在机房能够直接过去看,可是若是人不在机房,而是远程链接
  • 使用上图命令 mii-tool ens33
  • 而后看下面的返回信息最后面显示, link ok 说明网线链接没有问题
  • 可是有些服务器会提示 not support 表示不支持这个命令
  • 这种时候可使用下图命令
  • ethtool ens33 这个命令也能够看网线是否链接
  • 看命令返回信息的最下面显示,Link detected: yes 这就表示网线链接没问题
  • 上图是一个查看服务器网卡链接的例子
  • 使用 mii-tool + 网卡名称 查看这台服务器上的网卡是否链接了网线
  • 能够看到,em3是link ok 链接没有问题,em4是 no link 说明没有链接网线

  • 上图命令能够修改主机名称
  • hostname 命令能够显示当前主机名
  • 不过shell显示的主机名还没变,从新登陆就会改变
  • 也可使用 bash 进入子shell也会改变
  • 上图是 主机名称 的配置文件
  • 上图是 DNS 的配置文件
  • 上图是修改网卡DNS,增长了第二个DNS的信息
  • 而后关闭重启网卡
  • 而后再 cat /etc/resolv.conf 这个DNS的配置文件
  • 能够看到 resolv.conf 的内容已经增长了一个DNS的信息
  • 因此 resolv.conf 的信息是由网卡里面配置的DNS信息而来的
  • 若是想临时增长 DNS 能够直接修改 resolv.conf 这个配置文件
  • 不过每次网卡重启后,网卡内的DNS信息都会把 resolv.conf 里面的DNS信息覆盖掉

  • 上图 cat hosts文件的内容
  • 这个 hosts 文件是 linux 和 windows 都有的文件
  • 这个文件能够修改域名解析
  • 举例,使用命令 ping www.qq123.com 根据对这个域名的解析
  • 会链接到 www.qq123.com 对应的公网 ip 地址去
  • 如今的目的是,不但愿别人经过这台电脑链接到 www.qq123.com 对应的ip地址
  • 当其余人经过这台电脑 ping www.qq123.com 的时候
  • 要让他链接到我自定义的ip地址去,而不是 www.qq123.com 对应的公网ip地址
  • 若是,使用 vim 打开 /etc/hosts 文件
  • 如图,在下面编辑输入,自定义ip + 域名
  • 而后保存退出
  • 如图,再 ping 这个域名,就会链接到刚才自定义的ip去
  • 这个修改只在本机生效,用别的电脑ping这个域名就不会链接到自定义ip去
  • 如图,还能够 多个域名 指向 同一个ip
  • 不一样域名之间用 空格 分隔
  • 还有一种状况,若是有同一个域名,指向多个ip
  • ping 这个域名的时候会指向哪个ip呢?
  • 这种时候,会指向最下面一行的ip
  • 举例,有三行 ip 对应的都是 同一个域名
  • ping这个域名的时候,就会指向 第三行 ip ,上面的无效
相关文章
相关标签/搜索