2019独角兽企业重金招聘Python工程师标准>>>
监控io性能
iostat -x 磁盘使用
iostat 在安装sysstat的时候会自动安装上这个命令。它和sar是同一个包
[root@linux-128 ~]# yum install -y sysstat
[root@linux-128 ~]# iostat
Linux 3.10.0-514.el7.x86_64 (linux-128) 2017年11月28日 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.19 0.00 1.98 0.33 0.00 96.50
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 1.65 10.21 0.00 1840 0
sda 31.35 1110.33 414.35 200192 74707
scd0 0.06 0.24 0.00 44 0
dm-0 0.33 2.53 0.00 456 0
iostat和sar命令差不多,后面接数字
iostat 1,1秒显示一次;sda bk_read/s kb_wrtn/s 读写速度
[root@linux-128 ~]# iostat 1
Linux 3.10.0-514.el7.x86_64 (linux-128) 2017年11月28日 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.57 0.00 0.98 0.16 0.00 98.29
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 0.80 4.94 0.00 1840 0
sda 15.23 537.50 200.94 200192 74839
scd0 0.03 0.12 0.00 44 0
dm-0 0.16 1.22 0.00 456 0
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 0.00 0.00 0.00 0 0
sda 0.00 0.00 0.00 0 0
scd0 0.00 0.00 0.00 0 0
dm-0 0.00 0.00 0.00 0 0
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 0.00 0.00 0.00 0 0
sda 0.00 0.00 0.00 0 0
scd0 0.00 0.00 0.00 0 0
dm-0 0.00 0.00 0.00 0 0
^C
- iostat -x 1 这里最重要的是%util;这列表示你的IO等待,磁盘使用有多少时间占用cpu,cpu有部分时间给进程经销计算,也有一部分时间等待io的,等待磁盘读和写,这个时间比是多少,占比是多大呢,这个就是%util。如果这个数字很大,50%60%那你的IO太差,他非常的忙,数字很大,读和写也很大,如果读和写两列不大,但是util这列很大,说明你的硬盘存在问题和故障。如果你的硬盘很慢,肯定会影响你的性能,及时你的CPU很快在厉害,,硬盘更不上也会存在很大的瓶颈的。记住iostat -x 关注%util这一列。
[root@linux-128 ~]# iostat -x 1
Linux 3.10.0-514.el7.x86_64 (linux-128) 2017年11月28日 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 0.44 0.08 0.00 99.23
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdb 0.00 0.00 0.33 0.00 2.03 0.00 12.35 0.00 0.06 0.06 0.00 0.05 0.00
sda 0.01 0.29 5.22 1.21 226.67 83.51 96.48 0.05 7.59 2.14 31.06 0.95 0.61
scd0 0.00 0.00 0.01 0.00 0.05 0.00 8.00 0.00 1.27 1.27 0.00 1.27 0.00
dm-0 0.00 0.00 0.07 0.00 0.50 0.00 15.20 0.00 0.02 0.02 0.00 0.02 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda 0.00 0.00 0.00 1.98 0.00 1.49 1.50 0.00 0.50 0.00 0.50 0.50 0.10
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
iotop 磁盘使用
如果发现磁盘io很忙,到底是那个进程在读写呢,我们用iotop来查看。
[root@linux-128 ~]# yum install -y iotop
[root@linux-128 ~]#iotop
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switched-r~tem --deserialize 21
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
5 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H]
7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
8 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_bh]
9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_sched]
10 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0]
11 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/1]
12 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1]
13 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/1]
16 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/2]
17 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/2]
18 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/2]
531 be/3 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % auditd -n
20 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/2:0H]
21 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/3]
22 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/3]
23 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/3]
25 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/3:0H]
27 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khelper]
28 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kdevtmpfs]
29 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [netns]
30 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khungtaskd]
free命令
- free 查看内存使用情况
- free -m / -g / -h
- buffer/cache区别
- 公式:total=used+free+buff/cache
- avaliable包含free和buffer/cache剩余
free 单位KB
[root@linux-128 ~]# free
total used free shared buff/cache available
Mem: 1875748 115996 1453008 8748 306744 1583468
Swap: 4194300 0 4194300
free -m 单位M
[root@linux-128 ~]# free -m
total used free shared buff/cache available
Mem: 1831 113 1418 8 299 1546
Swap: 4095 0 4095
free -h 单位G
[root@linux-128 ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 113M 1.4G 8.5M 299M 1.5G
Swap: 4.0G 0B 4.0G
-
total 是整个内存大小 total=used+free+buff/cache
-
used 使用了多少内存
-
free 剩余多少内存 正在剩余的内存是第二行的free
- cache:磁盘速度是比较慢的,cpu比较快,两者速度相差比较大,为了缓解这个局面,工程师就想到了缓存这个思路,缓存是介于cpu和磁盘之间的一种介子,他的速度比cpu慢一点,比磁盘速度快一点,当我们从磁盘里取数据的时候速度很慢,就可以事先把数据取出来放到内存里(cache)当cpu用到的时候就从内存里去取,这个速度就比原来直接从磁盘里取拿数据速度要快很多,这里内存里存放这部分数据的空间就要cache
- buffe正好相反,cpu把数据处理完后,形成一个结果(也是数据)要写入到磁盘里去的时候,这个速度也很慢的,我们同样的速度也是先把它写到内存里,内存再逐渐慢慢地在后台一点点写入磁盘里,这一部分空间就叫中buffer(缓冲)
- buffer 是即将写入到磁盘里去的数据暂存的内存区域
- cached是从磁盘里读出来的数据暂存的内存区域。 linux内核会先分配一部分buffer,cacha出来留着备用,这部分空间不可能直接用完,可能会有一部分剩余,那么这部分剩余实际上对内存来说是可用的,可回收的。
内存正真剩余=物理内存+buffer+cache
free列第一行的数字为0表示内存已经分配完,但并不表示内存就耗尽了。 因为可能还有分配的cached并没有用完。
物理内存、buffer和cached三个没有再可分配的容量那就意味着所有的物理内存都耗尽了,
真正的内存用完了导致频繁使用swap 程序运行速度会超级慢
ps 查看系统当中所有的进程
- top -bn1 也可以显示所有的进程
[root@linux-128 ~]# top -bn1
top - 10:46:12 up 24 min, 1 user, load average: 0.00, 0.02, 0.05
Tasks: 108 total, 2 running, 106 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.3 sy, 0.0 ni, 99.4 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1875748 total, 1452588 free, 116272 used, 306888 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 1583128 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2264 root 20 0 157584 2040 1492 R 5.9 0.1 0:00.03 top
1 root 20 0 125300 3760 2400 S 0.0 0.2 0:01.82 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.19 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.03 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 R 0.0 0.0 0:01.59 rcu_sched
10 root rt 0 0 0 0 S 0.0 0.0 0:00.03 watchdog/0
11 root rt 0 0 0 0 S 0.0 0.0 0:00.13 watchdog/1
12 root rt 0 0 0 0 S 0.0 0.0 0:00.06 migration/1
13 root 20 0 0 0 0 S 0.0 0.0 0:00.18 ksoftirqd/1
16 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/2
17 root rt 0 0 0 0 S 0.0 0.0 0:00.02 migration/2
。。。
- ps aux 一盘工作中使用这个命令
[root@linux-128 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.2 125300 3760 ? Ss 10:21 0:01 /usr/lib/systemd/systemd --switched-
root 2 0.0 0.0 0 0 ? S 10:21 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 10:21 0:00 [ksoftirqd/0]
。。。。
root 2142 0.0 0.0 0 0 ? S< 10:22 0:00 [kworker/3:1H]
root 2143 0.0 0.1 116016 2664 pts/0 Ss 10:22 0:00 -bash
root 2217 0.0 0.0 0 0 ? S< 10:24 0:00 [kworker/1:2H]
root 2232 0.0 0.0 0 0 ? S< 10:34 0:00 [kworker/3:2H]
root 2246 0.0 0.0 0 0 ? S 10:37 0:00 [kworker/0:0]
root 2263 0.0 0.0 0 0 ? S 10:42 0:00 [kworker/0:2]
root 2285 0.0 0.0 151068 1820 pts/0 R+ 10:47 0:00 ps aux
- ps -elf 这两者显示的内容是相识的
USER 用户
PID 进程标志数,/proc文件里面有跟pid相同名字的目录;进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用 ‘kill 进程的pid 有时并不能杀掉,则需要加一个-9选项了 kill -9 进程pid
某个进程有问题,我想知道它是那个目录下的?(pid都在proc这个目录下,每一个pid就是一个目录)
-
ls /proc/进程ID/ %cpu 占用cpu百分比
%mem 占用内存百分比
VSZ 虚拟内存大小
RSS 真正内存大小
TTY 从哪里启动,pts/0 当前终端 -
STAT 进程的状态 S 表示休眠sleep
s 主进程,父进程
< 高优先级,优先得到cpu的资源
N 低优先级
- 前台运行进程
SR runing,正在运行的进程(某个时间段使用到cpu资源的进程)
L 被锁的进程
l 多线程的进程
Z僵尸进程
x 已经死掉的进程
T 暂停的进程ctrl+z
D 不能被终端的进程,比如IO,很少见。
START 进程启动时间
TIME 占用cpu多长时间
COMMAND 进程名称
[root@linux-128 ~]# ps aux |grep -c kworker
21
[root@linux-128 ~]# ps aux |grep kworker
root 5 0.0 0.0 0 0 ? S< 10:21 0:00 [kworker/0:0H]
root 20 0.0 0.0 0 0 ? S< 10:21 0:00 [kworker/2:0H]
root 36 0.0 0.0 0 0 ? S 10:22 0:00 [kworker/2:1]
root 37 0.0 0.0 0 0 ? S 10:22 0:01 [kworker/3:1]
root 55 0.0 0.0 0 0 ? S 10:22 0:00 [kworker/u128:1]
root 57 0.1 0.0 0 0 ? S 10:22 0:02 [kworker/0:1]
root 61 0.0 0.0 0 0 ? S 10:22 0:00 [kworker/1:1]
root 256 0.0 0.0 0 0 ? S 10:22 0:00 [kworker/u128:2]
root 290 0.0 0.0 0 0 ? S 10:22 0:00 [kworker/1:2]
root 294 0.0 0.0 0 0 ? S 10:22 0:00 [kworker/2:3]
root 295 0.0 0.0 0 0 ? S 10:22 0:00 [kworker/3:2]
root 452 0.0 0.0 0 0 ? S< 10:22 0:00 [kworker/0:1H]
root 736 0.0 0.0 0 0 ? S< 10:22 0:00 [kworker/1:1H]
root 2075 0.0 0.0 0 0 ? S< 10:22 0:00 [kworker/2:1H]
root 2142 0.0 0.0 0 0 ? S< 10:22 0:00 [kworker/3:1H]
root 2217 0.0 0.0 0 0 ? S< 10:24 0:00 [kworker/1:2H]
root 2232 0.0 0.0 0 0 ? S< 10:34 0:00 [kworker/3:2H]
root 2263 0.0 0.0 0 0 ? S 10:42 0:00 [kworker/0:2]
root 2286 0.0 0.0 0 0 ? S< 10:48 0:00 [kworker/3:0H]
root 2307 0.0 0.0 0 0 ? S 10:52 0:00 [kworker/0:0]
监控系统状态
- netstat 查看网络状态
- netstat -lnp 查看监听端口
- netstat -an 查看系统的网络连接状况
- netstat -lntp 只看出tcp的,不包含socket
- ss -an 和nestat异曲同工 分享一个小技巧:
netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
netstat 命令是用来查看网络连接状态,系统所有开放端口,路由表等信息
- netstat -lnp 用来监听有哪些接口
[root@linux-128 ~]# netstat -lnp
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 947/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1216/master
tcp6 0 0 :::22 :::* LISTEN 947/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1216/master
udp 0 0 127.0.0.1:323 0.0.0.0:* 553/chronyd
udp6 0 0 ::1:323 :::* 553/chronyd
raw6 0 0 :::58 :::* 7 587/NetworkManager
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 18635 1216/master public/cleanup
unix 2 [ ACC ] STREAM LISTENING 18638 1216/master public/qmgr
unix 2 [ ACC ] STREAM LISTENING 18661 1216/master public/flush
unix 2 [ ACC ] STREAM LISTENING 18676 1216/master public/showq
unix 2 [ ACC ] STREAM LISTENING 10897 1/systemd /run/systemd/private
unix 2 [ ACC ] SEQPACKET LISTENING 10926 1/systemd /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 9134 1/systemd /run/systemd/journal/stdout
unix 2 [ ACC ] STREAM LISTENING 18642 1216/master private/tlsmgr
unix 2 [ ACC ] STREAM LISTENING 18700 1216/master private/scache
unix 2 [ ACC ] STREAM LISTENING 10949 1/systemd /run/lvm/lvmetad.socket
unix 2 [ ACC ] STREAM LISTENING 10952 1/systemd /run/lvm/lvmpolld.socket
unix 2 [ ACC ] STREAM LISTENING 18631 1216/master public/pickup
unix 2 [ ACC ] STREAM LISTENING 18652 1216/master private/defer
unix 2 [ ACC ] STREAM LISTENING 13291 1/systemd /var/run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 18655 1216/master private/trace
unix 2 [ ACC ] STREAM LISTENING 18658 1216/master private/verify
unix 2 [ ACC ] STREAM LISTENING 18664 1216/master private/proxymap
unix 2 [ ACC ] STREAM LISTENING 18667 1216/master private/proxywrite
unix 2 [ ACC ] STREAM LISTENING 18670 1216/master private/smtp
unix 2 [ ACC ] STREAM LISTENING 18673 1216/master private/relay
unix 2 [ ACC ] STREAM LISTENING 18679 1216/master private/error
unix 2 [ ACC ] STREAM LISTENING 18682 1216/master private/retry
unix 2 [ ACC ] STREAM LISTENING 18685 1216/master private/discard
unix 2 [ ACC ] STREAM LISTENING 18688 1216/master private/local
unix 2 [ ACC ] STREAM LISTENING 18691 1216/master private/virtual
unix 2 [ ACC ] STREAM LISTENING 18694 1216/master private/lmtp
unix 2 [ ACC ] STREAM LISTENING 18645 1216/master private/rewrite
unix 2 [ ACC ] STREAM LISTENING 18649 1216/master private/bounce
unix 2 [ ACC ] STREAM LISTENING 18697 1216/master private/anvil
查看监听的接口后,服务端到底跟哪些客户端进行通信,以及客户端跟我们服务端通信过程到底十一个什么样的状态?
是连接进行数据传输还是两者刚刚建立连接,还是通信完成后保持一个连接而正在等待:要用netstat -an 来查看
netstat -an
- 查看服务端和客户端之间的状态
- 用这个值去衡量服务器有没有压力,有没有并发,并发是多少
- netstat -an |grep 122.122.69.86:80|grep -ic estab -i是忽略大小写 -c符合要求的行数
这台服务器的并发数是884.意思是在这一秒或者这一个时刻内有884个连接。
netstat -lntp
netstat -lnp 查看监听的端口
[root@linux-128 ~]# netstat -lntp
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 947/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1216/master
tcp6 0 0 :::22 :::* LISTEN 947/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1216/master
netstat -an tcp IP
[root@linux-128 ~]# netstat -an tcp IP
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 52 192.168.88.128:22 192.168.88.1:54651 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
udp 0 0 127.0.0.1:323 0.0.0.0:*
udp6 0 0 ::1:323 :::*
raw6 0 0 :::58 :::* 7
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 18635 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 18638 public/qmgr
unix 2 [ ACC ] STREAM LISTENING 18661 public/flush
unix 2 [ ACC ] STREAM LISTENING 18676 public/showq
unix 2 [ ACC ] STREAM LISTENING 10897 /run/systemd/private
unix 2 [ ] DGRAM 9115 /run/systemd/notify
unix 2 [ ] DGRAM 9117 /run/systemd/cgroups-agent
unix 2 [ ACC ] SEQPACKET LISTENING 10926 /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 9134 /run/systemd/journal/stdout
unix 5 [ ] DGRAM 9137 /run/systemd/journal/socket
unix 13 [ ] DGRAM 9139 /dev/log
unix 2 [ ] DGRAM 10934 /run/systemd/shutdownd
unix 2 [ ACC ] STREAM LISTENING 18642 private/tlsmgr
。。。。
.sock linux,unix 中特有的文件,可以通讯
Path 状态
TIME_WAIT 传输完成 链接保持着
ESTABLTSHED 已经建立链接正在通讯
FIN_WAIT2 状态详情,可参考【TCP/IP 三次握手】
netstat -an |grep 112.112.69.86:80 查看80端口 并发状态
netstat -an |grep 112.112.69.86:80 |grep -ic estab 统计链接(ESTABLTSHED)正在通讯的链接总数 (前端 静态网页 2到3万 后端 有php mysql等 2000到3000 左右
- netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
[root@linux-128 ~]# netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
LISTEN 4
ESTABLISHED 1
tcpdump 工具
如果没有这个工具需要安装一下;yum install -y tcpdump
[root@linux-128 ~]# yum install -y tcpdump
[root@linux-128 ~]# tcpdump -nn -i ens33
tcpdump -i ens33
第一个n就是ip以数字的形式打印出来,如果不加就会显示主机名
tcpdump -n -i ens33
第2n是端口
tcpdump -nn -i ens33 加上第2n 就会显示ip,端口形式显示
tcpdump 命令:
- -i:指定网卡
- host:指定ip
- port:指定端口
- -c :指定包数量
- -w :写入指定文件里,将包的内容写入文件里面,如果不加-w直接在屏幕上显示的不是数据包,而是数据流向
- length 长度
[root@linux-128 ~]# tcpdump -nn -i ens33 port 22 -c 6
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
11:16:43.472559 IP 192.168.88.128.22 > 192.168.88.1.54651: Flags [P.], seq 3677319136:3677319348, ack 3881493294, win 468, length 212
11:16:43.473078 IP 192.168.88.1.54651 > 192.168.88.128.22: Flags [.], ack 212, win 16425, length 0
11:16:43.473799 IP 192.168.88.128.22 > 192.168.88.1.54651: Flags [P.], seq 212:504, ack 1, win 468, length 292
11:16:43.474308 IP 192.168.88.128.22 > 192.168.88.1.54651: Flags [P.], seq 504:668, ack 1, win 468, length 164
11:16:43.474661 IP 192.168.88.1.54651 > 192.168.88.128.22: Flags [.], ack 668, win 16311, length 0
11:16:43.474922 IP 192.168.88.128.22 > 192.168.88.1.54651: Flags [P.], seq 668:832, ack 1, win 468, length 164
6 packets captured
6 packets received by filter
0 packets dropped by kernel
- tcpdump -nn -i ens33 port 22 -c 6 -w /tmp/1.cap 写入指定文件里,将包的内容写入文件里面,是真真的包,如果不加-w直接在屏幕上显示的不是数据包,而是数据流向
[root@linux-128 ~]# tcpdump -nn -i ens33 port 22 -c 6 -w /tmp/1.cap
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
^C3 packets captured
4 packets received by filter
0 packets dropped by kernel
- tcpdump -r 查看数据流,不是数据包
[root@linux-128 ~]# tcpdump -r /tmp/1.cap
reading from file /tmp/1.cap, link-type EN10MB (Ethernet)
11:18:02.971264 IP linux-128.ssh > 192.168.88.1.54651: Flags [P.], seq 3677321812:3677321960, ack 3881494042, win 468, length 148
11:18:02.971994 IP 192.168.88.1.54651 > linux-128.ssh: Flags [.], ack 148, win 16139, length 0
11:18:10.905692 IP 192.168.88.1.54651 > linux-128.ssh: Flags [P.], seq 1:53, ack 148, win 16139, length 52
wireshark 工具
如果没有需要先安装一下 yum install -y wireshark
[root@linux-128 ~]# yum install -y wireshark
- 用法: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"