linux 学习笔记-030-日常运维-监控 io 性能 iostat,iotop,free,ps,查看网络状态 netstat,linux 下抓包 tcpdump

发布于 2018-01-30  405 次阅读


监控 io 性能

iostat -x 和 iotop,安装 sysstat 的时候会顺便安装 iostat,sar

iostat 可以直接用也可以加 1,表示每秒刷新一次

[root@am-01:~#] iostat

Linux 3.10.0-229.el7.x86_64 (am-01) 2018 年 01 月 17 日 _x86_64_ (2 CPU)



avg-cpu:  %user  %nice %system %iowait  %steal   %idle

          0.00    0.00  0.09    0.00    0.00     99.90



Device:          tps    kB_read/s   kB_wrtn/s  kB_read    kB_wrtn

sda               0.03    0.21         0.19      177670     165919

sdb               0.00    0.00         0.00       1140          0

iostat  -x,%util 是一个重要的指标,这一列表示一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的,达到 50%、60%,即说明磁盘很忙碌。如果读写不大,但这一项大,说明磁盘存在问题

[root@am-01:~#] iostat -x

Linux 3.10.0-229.el7.x86_64 (am-01) 2018 年 01 月 17 日 _x86_64_ (2 CPU)



avg-cpu:  %user   %nice %system %iowait  %steal   %idle

          0.00    0.00    0.09   0.00      0.00   99.90



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.00  0.01 0.02 0.21  0.19  28.78    0.00     30.89  6.08    42.61   6.94  0.02

sdb      0.00  0.00  0.00 0.00 0.00  0.00   8.00    0.00      2.35  2.35     0.00   2.35  0.00

iotop:需要 yum 安装 iotop 包,和 top 有点像

主要留意 READ/WRITE/IO

linux 学习笔记-030-日常运维-监控 io 性能 iostat,iotop,free,ps,查看网络状态 netstat,linux 下抓包 tcpdump

监控内存状态

free:查看内存使用情况,默认单位是 KB,free -m 单位是 MB,free -h 更直观的显示单位

第一行为说明,第二行为内存的使用情况,第三行为交换分区的使用情况

重点关注第二行,第一列为内存的总大小,第二列为使用的内存大小,第三列为剩余内存大小,第四列为共享的内存大小,第五列为 buff/cache(缓冲和缓存),第六列为 free 大小加上还没用完的预分配的 buff/cache 大小

cache 和 buffer 的解释:

CPU 从磁盘拿数据:磁盘 --> 内存(cache) --> CPU

CPU 的数据要存到磁盘中去:CPU --> 内存(buffer) --> 磁盘

linux 操作系统会把内存预分配一部分给 buff/cache

总内存:total=used+free+buff/cache

剩余内存:看 avaliable,avaliable 包含 free 和 buffer/cache 剩余部分

[root@am-01:~#] free

          total     used    free    shared    buff/cache   available

Mem:    1003184   134032   538248   12984      330904      682912

Swap:   2097148       0    2097148

[root@am-01:~#] free -m

         total        used        free      shared    buff/cache   available

Mem:      979         130         525         12         323            666

Swap:     2047         0          2047

[root@am-01:~#] free -h

         total     used     free     shared  buff/cache   available

Mem:     979M      130M     525M      12M       323M        666M

Swap:    2.0G       0B      2.0G

查看进程状态

ps:查看系统当前进程的使用状况

ps aux/ps -elf

查询有没有 sshd 这个进程在运行,每一列为别表示运行用户,PID,CPU 百分比,内存百分比,虚拟内存,物理内存,tty,进程状态(stat,需关注),启动时间,运行时间,命令

stat 说明:

D 不能中断的进程

R run 状态的进程

S sleep 状态的进程

T 暂停的进程

Z 僵尸进程

< 高优先级进程

N 低优先级进程

L 内存中被锁了内存分页

s 主进程

l  多线程进程

+ 前台进程

线程和进程:

进程里包含了线程,线程是进程的子单元

同一个进程下的线程全部共享相同的内存,而进程之间内存相互隔离。

ps aux | grep sshd

[root@am-01:~#] ps aux | grep sshd

root       1466  0.0  0.3  82524  3580   ?       Ss    1 月 07   0:00 /usr/sbin/sshd -D

root      15431  0.4  0.4 133164  4872   ?       Ss    17:43   0:00 sshd: root@pts/0

root      15463  0.0  0.0 112672  980   pts/0    S+    17:45   0:00 grep --color=auto sshd

杀死一个 qmgr 这个进程

[root@am-01:~#] ps aux | grep qmgr

postfix    2384  0.0  0.3  91272  3904  ?        S    1 月 07   0:01 qmgr -l -t unix -u

root      15470  0.0  0.0 112672   980  pts/0    S+   17:48   0:00 grep --color=auto qmgr

[root@am-01:~#] kill 2384

[root@am-01:~#] ps aux | grep qmgr

root      15472  0.0  0.0 112672   980 pts/0    S+   17:48   0:00 grep --color=auto qmgr

查看某个进程是从哪里启动的

[root@am-01:~#] ls -l /proc/2293

linux 学习笔记-030-日常运维-监控 io 性能 iostat,iotop,free,ps,查看网络状态 netstat,linux 下抓包 tcpdump

查看网络状态

TIME_WAIT:两个机器相互通讯完之后还没有断开,处于等待下一次再连接状态

ESTABLISHED:这个太多,说明网站很忙,1000 以内为比较正常的

netstat -lnp:查看监听端口

主要关注 Active Internet connections (only servers)部分的信息

linux 学习笔记-030-日常运维-监控 io 性能 iostat,iotop,free,ps,查看网络状态 netstat,linux 下抓包 tcpdump

netstat -an:查看系统的网络连接状况

linux 学习笔记-030-日常运维-监控 io 性能 iostat,iotop,free,ps,查看网络状态 netstat,linux 下抓包 tcpdump

netstat -lntp:只看 tcp 的,不包含 socket

linux 学习笔记-030-日常运维-监控 io 性能 iostat,iotop,free,ps,查看网络状态 netstat,linux 下抓包 tcpdump

小技巧,统计各连接状态的数量

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

TIME_WAIT 8

ESTABLISHED 24

LISTEN 10

ss -an:和 nestat 差不多

linux 学习笔记-030-日常运维-监控 io 性能 iostat,iotop,free,ps,查看网络状态 netstat,linux 下抓包 tcpdump

抓包工具 tcpdump

使用 yum 安装 tcpdump 包

icpdump -nn -i 网卡名称:nn 表示 ip、端口号等以数字形式显示

每列依次为,时间,IP,源 IP+端口号,目的 IP+端口号,数据包信息

主要看源 IP+端口号/目的 IP+端口号/length,默认很多都是 TCP 的包,如果有 UDP 的包,有可能是被攻击了

UDPFlood 攻击:

https://baike.baidu.com/item/UDP%20flood/5504851?fr=aladdin

http://blog.csdn.net/codeforme/article/details/8727578

[root@am-01:~#] tcpdump -nn -i eno16777736

18:50:35.692984 IP 172.17.1.1.5309 > 172.17.1.240.22: Flags [.], ack 342292, win 2054, length 0

18:50:35.693252 IP 172.17.1.240.22 > 172.17.1.1.5309: Flags [P.], seq 342620:342896, ack 53, win 159, length 276

指定端口抓包

[root@am-01:~#] tcpdump -nn -i eth1 port 22

19:08:27.997743 IP 172.17.1.240.22 > 172.17.1.1.5309: Flags [P.], seq 155708:155872, ack 53, win 159, length 164

19:08:27.997996 IP 172.17.1.1.5309 > 172.17.1.240.22: Flags [.], ack 155432, win 2053, length 0

19:08:27.998006 IP 172.17.1.240.22 > 172.17.1.1.5309: Flags [P.], seq 155872:156036, ack 53, win 159, length 164

19:08:27.998242 IP 172.17.1.1.5309 > 172.17.1.240.22: Flags [.], ack 155872, win 2051, length 0

19:08:27.998426 IP 172.17.1.240.22 > 172.17.1.1.5309: Flags [P.], seq 156036:156408, ack 53, win 159, length 372

19:08:27.998661 IP 172.17.1.240.22 > 172.17.1.1.5309: Flags [P.], seq 156408:156572, ack 53, win 159, length 164

19:08:27.998891 IP 172.17.1.240.22 > 172.17.1.1.5309: Flags [P.], seq 156572:156736, ack 53, win 159, length 164

19:08:27.999123 IP 172.17.1.1.5309 > 172.17.1.240.22: Flags [.], ack 156408, win 2056, length 0

19:08:27.999148 IP 172.17.1.240.22 > 172.17.1.1.5309: Flags [P.], seq 156736:156900, ack 53, win 159, length 164

指定抓取指定 IP 的包,但不要 22 端口的包

[root@am-01:~#] tcpdump -nn -i eno16777736 not port 22 and host 172.17.1.1

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eno16777736, link-type EN10MB (Ethernet), capture size 262144 bytes

指定抓取的数据包数量并存到指定文件中

[root@am-01:~#] tcpdump -nn -i eno16777736 -c 10 -w /tmp/1.cap

tcpdump: listening on eno16777736, link-type EN10MB (Ethernet), capture size 262144 bytes

10 packets captured

10 packets received by filter

0 packets dropped by kernel

[root@am-01:~#] file /tmp/1.cap

/tmp/1.cap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 262144)

查看在上一个操作中抓包生成的文件

[root@am-01:~#] tcpdump -r /tmp/1.cap

reading from file /tmp/1.cap, link-type EN10MB (Ethernet)

19:17:39.606355 IP 172.17.1.240.ssh > 172.17.1.1.jprinter: Flags [P.], seq 2915023861:2915024009, ack 3497414046, win 159, length 148

19:17:39.606969 IP 172.17.1.1.jprinter > 172.17.1.240.ssh: Flags [.], ack 148, win 2051, length 0

19:17:39.643165 IP 5.39.218.19.47401 > 172.16.0.251.ms-wbt-server: Flags [SEW], seq 1239291322, win 8192, options [mss 1400,nop,wscale 8,nop,nop,sackOK], length 0

19:17:39.643369 IP 172.16.0.251.ms-wbt-server > 5.39.218.19.47401: Flags [S.], seq 3653064723, ack 1239291323, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0

19:17:39.654175 IP 119.147.194.95.stun > 192.168.100.249.17049: UDP, length 56

19:17:39.654312 IP 192.168.100.249 > 119.147.194.95: ICMP 192.168.100.249 udp port 17049 unreachable, length 92

19:17:39.712032 ARP, Request who-has 192.168.100.100 tell 192.168.100.89, length 46

19:17:39.780740 ARP, Request who-has 192.168.100.89 tell 192.168.100.202, length 46

19:17:39.855859 IP 119.147.194.11.irdmi > 192.168.100.249.17049: UDP, length 56

19:17:39.855902 IP 192.168.100.249 > 119.147.194.11: ICMP 192.168.100.249 udp port 17049 unreachable, length 92

wireshark

和 tcpdump 类似,主要用到这个包中的 tshark 命令

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"

查询指定网卡的 80 端口的 web 的访问情况

扩展

tcp 三次握手四次挥手:

http://www.doc88.com/p-9913773324388.html

tshark 几个用法:

http://www.aminglinux.com/bbs/thread-995-1-1.html