日常运维(二):监控io性能 free命令 ps命令 查看网络状态 linux下抓包

1监控io性能

读写IO(Read/Write IO)操作

磁盘是用来给我们存取数据用的,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据时候对应的是写IO操作,取数据的时候对应的是是读IO操作。

iostat和sar属于同一个包sysstat。

iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

iostat和sar –b命令效果差不多,主要用iostat –x选项。

tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。"一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。

kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;

iostat比较常用的选项-x,该选项将用于显示和io相关的扩展数据。

rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。

r/s:每秒完成的读 I/O 设备次数。即 delta(rio)/s

w/s:每秒完成的写 I/O 设备次数。即 delta(wio)/s

rsec/s:每秒读取的扇区数;

wsec/:每秒写入的扇区数。

rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)

wkB/s:每秒写K字节数。是 wsect/s 的一半。(需要计算)

avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)

avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。毫无疑问,队列长度越短越好。

await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。即 delta(ruse+wuse)/delta(rio+wio)

这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。

svctm:表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。。即 delta(use)/delta(rio+wio)
%util: 在统计时间内所有处理IO时间,除以总共统计时间。即 delta(use)/s/1000 (因为use的单位为毫秒)。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈。

常用命令

iostat -d -k 2参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;2表示,数据显示每隔2秒刷新一次。

kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。

iostat -d -k 1 10 #查看TPS和吞吐量信息(磁盘读写速度单位为KB)

iostat -d -m 2 #查看TPS和吞吐量信息(磁盘读写速度单位为MB)

iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await) iostat -c 1 10         #查看cpu状态

iotop命令:yum安装, yum install iotop

iotop是一个用来监视磁盘I/O使用状况的 top 类工具,可监测到哪一个程序使用的磁盘IO的信息

iotop命令的键盘快捷键:

1、左右箭头改变排序方式,默认是按IO排序

2、r键是反向排序

3、o键是只显示有IO输出的进程

4、同样q是退出

iotop定位负载来源进程

 iotop的本质是一个python脚本,从proc中获取thread的IO信息,进行汇总。

从下图可以看出大部分的IO来源都来自于mysqld进程。因此可以确定dfa的负载来源是数据库

2.free命令查看内存使用状况

total:总计物理内存的大小。

used:真正使用的实际内存大小

free:剩余物理内存大小(没有被分配,纯剩余)。

Shared:多个进程共享的内存总额。

Buffers/cached:磁盘缓存的大小。

第三行是交换分区SWAP的,也就是我们通常所说的虚拟内存。

分配给buffer和cache的内存总共有多大。buffer和cache都是一部分内存,内存的作用是缓解CPU和IO的速度差距的。数据经过CPU计算,即将写入磁盘,这时用的内存为buffer;CPU要计算时,需要把数据从磁盘中读出来,临时先放到内存中,这部分内存就是cache。

所以从应用程序的角度来说,total=used+free+buff/cathe

available:系统可使用内存有多大,包含了free。Linux系统为了让应用跑的更快,会预先分配一部分内存(buffer/cache)给某些应用使用,虽然这部分内存并没有真正使用,但也已经分配出去了。然而,当另外一个服务要使用更多内存时,是可以把这部分预先分配的内存拿来用的,所以还没有被占用的这部分buffer和cache再加上free就是available。

3.ps命令查看系统进程

作为系统管理员,想查看所管理的系统都有那些进程在运行,在windows下只要打开任务管理器即可查看。在linux下,除了top命令,还有专门显示系统进程的命令。

ps -elf 大同小异,显示的信息基本上是一样的。

PID :进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用 'kill  进程的pid 有时并不能杀掉,则需要加一个-9选项了 kill  -9  进程pid

STAT :表示进程的状态,进程状态分为以下几种(不要求记住,但要了解)

D 不能中断的进程(通常为IO)

R 正在运行中的进程

S 已经中断的进程,通常情况下,系统中大部分进程都是这个状态

T 已经停止或者暂停的进程,如果我们正在运行一个命令,比如说 sleep 10 如果我们按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态

W 这个好像是说,从内核2.6xx 以后,表示为没有足够的内存页分配

X 已经死掉的进程(这个好像从来不会出现)

Z 僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。一般不会出现。

< 高优先级进程

N 低优先级进程

L 在内存中被锁了内存分页

s 主进程

l 多线程进程

+ 代表在前台运行的进程

ps命令常会连同管道符一起使用,用来查看某个进程或者它的数量。

3需要减掉1,因为使用grep命令时,grep命令本身也算一个进程。

4.netstat 查看网络状况

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等

在 Internet RFC 标准中,Netstat 的定义是: Netstat 是在内核中访问网络及相关信息的程序,它能提供 TCP 连接,TCP 和 UDP 监听,进程内存管理的相关报告。

常用的是netstat -lnp (打印当前系统启动哪些端口)和netstat  -an (打印网络连接状况)netstat -lntp 只看出tcp的,不包含socket

协议(Proto):TCP,指是传输层通讯协议

本地机器名(Local Address):Eagle,俗称计算机名了,安装系统时设置的,可以在"我的电脑"属性中修改,本地打开并用于连接的端口:22)

远程机器名(Foreign Address)

状态列表

LISTEN :在监听状态中。

ESTABLISHED:已建立联机的联机情况。

TIME_WAIT:该联机在目前已经是等待的状态。

常用选项:

-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名

-a (all)显示所有选项,默认不显示LISTEN相关

-t (tcp)仅显示tcp相关选项

-u (udp)仅显示udp相关选项

-r 显示路由信息,路由表

-e 显示扩展信息,例如uid等

-s 按各个协议进行统计

-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

ss -an 和nestat异曲同工

分享一个小技巧:

[root@greg-01 ~]# netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,sta[key]}'

LISTEN 4

ESTABLISHED 1

[root@greg-01 ~]# netstat -n|awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'

ESTABLISHED 1

首先 ^ 是开头的意思,就是说开头是TCP字样的,$NF表示最后一个字段,把它放入数组S中,然后自加,awk是采用的关联数组.END最后用for取出数组中的下标,也就是TCP的几种状态,然后对应该下标的值,就是统计的数量.

5.抓包工具tcpdump

某个网卡上都有哪些数据包,当初步判定您的服务器上有流量攻击。使用抓包工具来抓一下数据包,就可以知道有哪些IP在攻击了。

yum install -y tcpdump 命令安装。

tcpdump -nn -i ens33

上例中第三列和第四列显示的信息为哪一个IP+port在连接哪一个IP+port,后面的信息是该数据包的相关信息。-i 选项后面跟设备名称,如果您想抓eth1网卡的包,后面则要跟eth1.至于-nn选项的作用是让第三列和第四列显示成IP+端口号的形式,如果不加-nn则显示的是主机名+服务名称。

tcpdump -nn port 22//这样指定只抓22端口的包

tcpdump -nn not port 22 and host 192.168.0.100 指定抓tcp的包,但是不要22端口的

tcpdump -nn -c 100 -w /tmp/1.cap //抓一百个包写入/tmp/1.cap文件,这个文件要用tcpdump -r /tmp/1.cap查看

wireshark工具

安装yum install -y wireshark

#tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"

这条命令用于web服务器。类似于web访问日志,若服务器没有配置访问日志,可以临时使用该命令查看一下当前服务器上的web请求。在这里要注意的是,如果你的机器上没有开启web服务,是不会显示任何内容的。

#tshark –n –i ens33 –R 'mysql.query' –T fields –e "ip.src" –e "mysql.query"

上面的命令会抓取ens33网卡mysql的查询有哪些,不过这种方法仅仅适用于mysql的端口为3306的情况,如果不是3306,使用下面的方法。

#tshark –i ens33 port 3307 –d tcp.port==3307,mysql –z "proto,colinfo,mysql.query,mysql.query"

tshark命令选项:
1. 抓包接口类
-i 设置抓包的网络接口,不设置则默认为第一个非自环接口。
-D 列出当前存在的网络接口。在不了解OS所控制的网络设备时,一般先用“tshark -D”查看网络接口的编号以供-i参数使用。
-f 设定抓包过滤表达式(capture filter expression)。抓包过滤表达式的写法雷同于tcpdump,可参考tcpdump man page的有关部分。
-s 设置每个抓包的大小,默认为65535,多于这个大小的数据将不会被程序记入内存、写入文件。(这个参数相当于tcpdump的-s,tcpdump默认抓包的大小仅为68)
-p 设置网络接口以非混合模式工作,即只关心和本机有关的流量。
-B 设置内核缓冲区大小,仅对windows有效。
-y 设置抓包的数据链路层协议,不设置则默认为-L找到的第一个协议,局域网一般是EN10MB等。
-L 列出本机支持的数据链路层协议,供-y参数使用。  
2. 抓包停止条件
-c 抓取的packet数,在处理一定数量的packet后,停止抓取,程序退出。
-a 设置tshark抓包停止向文件书写的条件,事实上是tshark在正常启动之后停止工作并返回的条件。条件写为test:value的形式,如“-a duration:5”表示tshark启动后在5秒内抓包然后停止;“-a filesize:10”表示tshark在输出文件达到10kB后停止;“-a files:n”表示tshark在写满n个文件后停止。(windows版的tshark0.99.3用参数“-a files:n”不起作用——会有无数多个文件生成。由于-b参数有自己的files参数,所谓“和-b的其它参数结合使用”无从说起。这也许是一个bug,或tshark的man page的书写有误。)
3. 文件输出控制
-b 设置ring buffer文件参数。ring buffer的文件名由-w参数决定。-b参数采用test:value的形式书写。“-b duration:5”表示每5秒写下一个ring buffer文件;“-b filesize:5”表示每达到5kB写下一个ring buffer文件;“-b files:7”表示ring buffer文件最多7个,周而复始地使用,如果这个参数不设定,tshark会将磁盘写满为止。
4. 文件输入
-r 设置tshark分析的输入文件。tshark既可以抓取分析即时的网络流量,又可以分析dump在文件中的数据。-r不能是命名管道和标准输入。
5. 处理类
-R 设置读取(显示)过滤表达式(read filter expression)。不符合此表达式的流量同样不会被写入文件。注意,读取(显示)过滤表达式的语法和底层相关的抓包过滤表达式语法不相同,它的语法表达要丰富得多,请参考http://www.ethereal.com/docs/dfref/和http://www.ethereal.com/docs/man-pages/ethereal-filter.4.html。类似于抓包过滤表达式,在命令行使用时最好将它们quote起来。
-n 禁止所有地址名字解析(默认为允许所有)。
-N 启用某一层的地址名字解析。“m”代表MAC层,“n”代表网络层,“t”代表传输层,“C”代表当前异步DNS查找。如果-n和-N参数同时存在,-n将被忽略。如果-n和-N参数都不写,则默认打开所有地址名字解析。
-d 将指定的数据按有关协议解包输出。如要将tcp 8888端口的流量按http解包,应该写为“-d tcp.port==8888,http”。注意选择子和解包协议之间不能留空格。
6. 输出类
-w 设置raw数据的输出文件。这个参数不设置,tshark将会把解码结果输出到stdout。“-w-”表示把raw输出到stdout。如果要把解码结果输出到文件,使用重定向“>”而不要-w参数。
-F 设置输出raw数据的格式,默认为libpcap。“tshark -F”会列出所有支持的raw格式。
-V 设置将解码结果的细节输出,否则解码结果仅显示一个packet一行的summary。
-x 设置在解码输出结果中,每个packet后面以HEX dump的方式显示具体数据。
-T 设置解码结果输出的格式,包括text,ps,psml和pdml,默认为text。
-t 设置解码结果的时间格式。“ad”表示带日期的绝对时间,“a”表示不带日期的绝对时间,“r”表示从第一个包到现在的相对时间,“d”表示两个相邻包之间的增量时间(delta)。
-S 在向raw文件输出的同时,将解码结果打印到控制台。
-l 在处理每个包时即时刷新输出。
-X 扩展项。
-q 设置安静的stdout输出(例如做统计时)
-z 设置统计参数。
7. 其它
-h 显示命令行帮助。
-v 显示tshark的版本信息。
-o 重载选项。


  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值