标签:io命令 free命令 ps命令 netstat tcpdump
七周二次课(3月20日)扩展tcp三次握手四次挥手 http://www.doc88.com/p-9913773324388.html
tshark几个用法:http://www.aminglinux.com/bbs/thread-995-1-1.html
10.6 监控io性能
磁盘状态的两个命令
iostat -x 磁盘使用
iotop 磁盘使用
我们在运维工作中,除了查看内存 cpu工作情况外,磁盘io也是非常重要的指标。
有时候,内存和CPU明明还有剩余,但是系统负载很高,用vmstat查看状态,会发现b和wa比较大,这说明系统的磁盘有瓶颈。所以,要更加详细去查看磁盘的状态。
监控系统状态
iostat命令 在安装sysstat的时候已经安装好了
用法可以是#iostat 也可以#iostat 1
用法和vmstat挺相似的
[root@centos7 sed]# iostat
Linux 3.10.0-693.el7.x86_64 (centos7.4-01) 2018年03月20日 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.06 0.00 0.16 0.08 0.00 99.69
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.68 8.63 1.40 107340 17392
sdb 0.02 0.29 0.00 3612 0
dm-0 0.00 0.08 0.00 1036 0
这里可以看到sda sdb两块硬盘 和 读、写速度 这个命令看的东西不太丰富,
因为这些#sar -b都可以看到的。
[root@centos7 sed]# sar -b
Linux 3.10.0-693.el7.x86_64 (centos7.4-01) 2018年03月20日 _x86_64_ (1 CPU)
11时25分06秒 LINUX RESTART
11时30分02秒 tps rtps wtps bread/s bwrtn/s
11时40分01秒 0.07 0.00 0.07 0.00 1.27
11时50分01秒 0.30 0.14 0.16 3.84 3.76
12时00分01秒 0.07 0.01 0.06 0.78 0.68
12时10分01秒 0.11 0.02 0.09 0.31 1.14
12时20分01秒 0.88 0.41 0.47 11.15 11.03
12时30分01秒 0.04 0.00 0.04 0.00 0.55
12时40分01秒 0.05 0.00 0.05 0.00 0.53
[root@centos7 sed]# iostat -x
Linux 3.10.0-693.el7.x86_64 (centos7.4-01) 2018年03月20日 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.06 0.00 0.15 0.07 0.00 99.72
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.01 0.36 0.23 7.32 1.23 29.14 0.01 15.13 5.89 29.42 2.64 0.15
sdb 0.00 0.00 0.02 0.00 0.25 0.00 29.25 0.00 1.53 1.53 0.00 0.93 0.00
dm-0 0.00 0.00 0.00 0.00 0.07 0.00 48.19 0.00 3.53 3.53 0.00 1.47 0.00
关注点
%util 这一列表示io等待
磁盘使用,有多少时间占用cpu的,CPU有一部分是给进程处理的,计算的。也有一部分是要等待io的,等待磁盘读和写。
这个等待的时间比是多少 就是%util
如果这个等待时间比大,读和写跟着大。证明磁盘读写处于繁忙状态,如果读和写不大,只是%util大就说明硬盘可能存在问题,有故障。如果硬盘很慢的话,肯定会影响性能,即使是CPU再厉害,运算再快,硬盘跟不上,也是会存在很大的瓶颈。
比如发现磁盘io很忙,很频繁,可以使用#iotop (第一次运行需要安装)
它和top很相似,也是动态显示,排序。
[root@centos7 sed]# iotop
10.7 free命令
free 命令可以查看当前系统的总内存大小以及使用情况。
CentOS 7系统的free命令显示结果比CentOS 6更加简洁了一些,但大体上的内容是一致的。
[root@centos7 ~]# free
total used free shared buff/cache available
Mem: 1008152 126864 605284 6880 276004 702136
Swap: 2097148 0 2097148
三行,第一行是说明,第二行内存使用情况,第三行swap交换分区使用情况。需要关注的是第二行内存。
添加-m 使其输出单位是M,
[root@centos7 ~]# free -m
total used free shared buff/cache available
Mem: 984 123 591 6 269 685
Swap: 2047 0 2047
-h显示当前适当的单位 *常用
[root@centos7 ~]# free -h
total used free shared buff/cache available
Mem: 984M 123M 591M 6.7M 269M 685M
Swap: 2.0G 0B 2.0G
linux系统 会把内存预分配一部分给 buff/cache
buffer和cache的区别方法
000是数据
000(磁盘)-->内存(cache)-->CPU
CPU要计算时,需要把数据从磁盘中读出来,临时放到内存中,这部分内存就是cache。
cpu(000)-->内存(buffer)-->磁盘
数据经过CPU计算,即将要写入磁盘,这时用的内存为buffer。
因为磁盘和CPU之间的数据转换速度有点差别,所以需要通过内存来缓解这种速度换算。
total=used+free+buff/cache
avaiable:系统可使用内存有多大。
avaiable包含了free和buffer/cache剩余部分。(available是关注点)
total和available是不同的。
10.8 ps命令
PS命令是专门显示系统进程,作用是汇报当前进程的快照。相当于windows的任务管理器。
#ps aux 把系统的所有进程都列出来
查看系统某个进程 利用grep来筛选
格式# ps aux |grep 进程名称
[root@centos7 ~]# ps aux |grep nginx
root 1831 0.0 0.0 112676 984 pts/0 R+ 17:45 0:00 grep --color=auto nginx
[root@centos7 ~]# ps -elf 这种用法和#ps aux差不多。都是显示所有进程
PID 表示进程的ID。
#kill pid可以把相关进程杀死 用法格式是#kill 1346.
每个进程都有一个目录/proc/505(pid)/
关注点
STAT 状态
D 不能中断的进程,通常是IO。这个状态直接影响系统的负载。
R run状态的进程,某个时间段在使用CPU。
S sleep状态的进程。
T 已经停止或暂停的进程。如果我们运行一个命令,例如vmstat 1,我们按一下ctrl+z暂停进程 时,用ps命令就会显示T状态。
test
[root@centos7 ~]# vmstat 运行#vmstat命令
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 604728 2076 274284 0 0 8 2 48 54 0 0 100 0 0
[root@centos7 ~]# vmstat 1
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 604868 2076 274316 0 0 8 2 48 54 0 0 100 0 0
0 0 0 604852 2076 274316 0 0 0 0 45 41 0 0 100 0 0
0 0 0 604852 2076 274316 0 0 0 0 63 53 1 0 99 0 0
^Z
[1]+ 已停止 vmstat 1
[root@centos7 ~]# ps aux |grep vmstat 显示T状态
root 1878 0.0 0.1 148316 1356 pts/0 T 18:09 0:00 vmstat 1
root 1884 0.0 0.0 112676 980 pts/0 S+ 18:09 0:00 grep --color=auto vmstat
[root@centos7 ~]# fg 调回前台
vmstat 1
2 0 0 604224 2076 274452 0 0 124 149 23199 21059 0 0 100 0 0
0 0 0 604224 2076 274452 0 0 0 0 47 43 0 0 100 0 0
[root@centos7 ~]# ps aux |grep vmstat 此时vmstat已经处于S+状态,S+状态表示sleep且处于前台。+表示前台。
root 1878 0.0 0.1 148316 1356 pts/0 S+ 18:09 0:00 vmstat 1
root 1917 0.0 0.0 112676 980 pts/1 R+ 18:18 0:00 grep --color=auto vmstat
Z 僵尸进程。
<: 高优先级进程。CPU资源会优先给此进程使用。
N: 低优先级进程。
L: 在内存中被锁了内存分页。
s: 主进程,后面nginx或者php-fpm服务会经常有它的影子。
l: 多线程进程,意思就是,这个进程有多个线程。
线程和进程的最大的区别就是:
1 进程里包含了线程,线程是进程的子单元,一个进程有多个线程。
2 同一个进程下的线程全部共享相同的内存(线程与线程之间的内存互相共享),而进程之间 内存相互隔离。
+: 前台进程。
START 开始的时间
TIME 开始的时长
COMMAND 命令,和top的command是一样的
10.9 查看网络状态
本节学到netstat命令,此命令是用来查看网络状态的。
linux服务器上面有很多服务,服务往往跟客户端之间进行相互通讯的,意味着,它要有监听端口,有对外通讯的端口。 netstat就是查看tcp/ip通讯的一个状态。
给系统安装一个服务,安装一个Nginx,提供一个web服务。。。。有了这些服务之后,就需要给这些服务监听一个端口。正常情况下,一台机器,它是没有任何端口监听的,如果没有任何端口,是没办法进行监听的。
*了解一下socket文件的作用。
[root@centos7 ~]# netstat -lnp 监听端口,打印当前系统启动哪些端口。
[root@centos7 ~]# netstat -an 查看tcp/ip状态
查看tcp udp状态
[root@centos7 ~]# netstat -ltunp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 949/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1055/master
tcp6 0 0 :::22 :::* LISTEN 949/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1055/master
udp 0 0 127.0.0.1:323 0.0.0.0:* 577/chronyd
udp6 0 0 ::1:323 :::* 577/chronyd
[root@centos7 ~]# netstat -an |awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
LISTEN 4
ESTABLISHED 1
关注ESTABLISHED ,如果这数字很大,说明系统很忙。
#ss -an 也可以查看tcp/ip状态
查看listen状态
#ss -an |grep -i listen
ppt在*centos7.aminglinux.com
*了解一下socket文件的作用。三次握手过程。
10.10 Linux下抓包
介绍
抓包工具
有时也许想看一下某个网卡上都有哪些数据包,尤其是当你初步绑定服务器上有流量攻击时,使用抓包工具来获取数据包就可以知道有哪些IP在攻击了。
#tcpdump -nn -i 网卡名字 (网卡名称可以在ifconfig查看)
[root@centos7 ~]# tcpdump -nn -i ens33 源地址IP地址显示
关于数据信息:
第一列是时间,第二列是ip,源IP, 端口 >到哪里去 方向去 目标ip 目标ip端口 flage开始 数据包的信息。
主要关注源ip和源端口。
-nn 第一个n ip用数字显示出来,如果不加,会显示主机名。 一般使用-nn
[root@centos7 ~]# tcpdump -n -i ens33 源地址主机名显示
所看到的ssh是22端口,如果不知道ssh表示22端口,例如其他名称的 不知道指定端口的,那就容易看不到详细信息了。
信息一一对应 有来有回
*了解 DDOS攻击,udp flood udp洪水攻击。
指定端口
[root@centos7 ~]# tcpdump -nn -i ens33 port 22
排除端口用法
[root@centos7 ~]# tcpdump -nn -i ens33 not port 22
指定端口,指定主机ip
[root@centos7 ~]# tcpdump -nn -i ens33 port 22 and host 192.168.189.128
数据包指定长度,指定个数,存到一个文件上
例如,指定长度,指定100个。
[root@centos7 ~]# tcpdump -nn -i ens33 -c 100 -w /tmp/1.cap
抓包过程中,是比较缓慢的,类似暂停状态。此时可以打开一个新的终端。
如果在这个终端不去产生一些数据流的话,那么它就不会产生那么多的数据包。
例如在使用tcpdump查看数据包的时候,其实就是在通讯产生数据流,所以有数据包产生,这是一个内循环。
如果此终端不产生任何数据,不产生任何的信息,那它就没有任何的数据包。 产生数据包了,屏幕(暂停的界面)自然而然会有数据了。所以打开一个新的终端,利用新的终端去产生数据包,这样就能继续进行抓包。
抓包成功提示,
数据包 1.cap
用#file查看属性,不能用cat查看,因为这是网卡捕获的信息,其实它是一个真正的通讯数据包信息,而不是文本格式。
读数据流(数据包里面的数据就叫数据流),需要利用#tcpdump -r /tmp/1.cap
[root@centos7 ~]# file /tmp/1.cap
/tmp/1.cap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 262144)
#wireshark 工具
10.6-10.10 监控io性能 free命令 ps命令 查看网络 linux下抓包
标签:io命令 free命令 ps命令 netstat tcpdump
原文地址:http://blog.51cto.com/13578154/2089174