监控IO性能
iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息;同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析
用法:
iostat[参数][时间][次数]
功能:查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况, 负载信息
命令参数:
1)
-C
显示CPU使用情况2)
-d
显示磁盘使用情况3)
-k
以 KB 为单位显示4)
-m
以 M 为单位显示5)
-N
显示磁盘阵列(LVM) 信息6)
-n
显示NFS 使用情况7)
-p
[磁盘] 显示磁盘和分区的情况8)
-t
显示终端和CPU的信息9)
-x
显示详细信息10)
-V
显示版本信息实例
iostat -x
[root@zyxlinux01 ~]# iostat -x
Linux 3.10.0-123.el7.x86_64 (zyxlinux01) 2017年08月08日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.01 0.00 0.09 0.01 0.00 99.88
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
scd0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 27.91 27.91 0.00 27.91 0.00
sda 0.01 0.01 0.06 0.04 2.04 1.48 66.80 0.00 19.53 11.12 31.32 5.00 0.05
其中有一个非常重要的参数
%util
(设备使用率)一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的,即 delta(use)/s/1000 (因为use的单位为毫秒)如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈
iostat
显示所有设备负载情况
[root@zyxlinux01 ~]# iostat
Linux 3.10.0-123.el7.x86_64 (zyxlinux01) 2017年08月08日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.01 0.00 0.09 0.01 0.00 99.88
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.00 0.00 44 0
sda 0.11 2.03 1.48 148332 107972
如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU
iostat 2 3
定时显示所有信息iostat -d sdb1
指定查看sdb1的信息iostat -t
显示tty和Cpu信息iostat -c
查看cpu状态
iotop
安装:yum install -y iotop
iotop 是一个用来监视磁盘 I/O 使用状况的 top 类工具。iotop 具有与 top 相似的 UI,其中包括 PID、用户、I/O、进程等相关信息
用法:iptop 回车
通过输出结果,可以清楚地知道是什么程序在读写磁盘,速度以及命令行,pid 等信息
free
free:查看系统的内存状况,包括总内存,已经使用的内存和剩下未被使用的内存,以及缓冲区和缓存各自占用的内存情况
用法 : free [-bkmotV][-s <间隔秒数>]
参数:
-o 不显示缓冲区调节列
-s<间隔秒数> 持续观察内存使用状况
-t 显示内存总和列
-V 显示版本信息
[root@zyxlinux01 ~]# free
total used free shared buffers cached
Mem: 1010884 686276 324608 12972 1328 431224
-/+ buffers/cache: 253724 757160
Swap: 4194300 188 4194112
Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况,这里我们不去关心
buffers/cache :系统分配给缓存缓冲的内存统计
数据写入磁盘时用的是 buffers,调用读取数据用cache
ps命令
ps 命令就是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多 的资源等等
用法:ps [options] [--help]
常用的参数:
-A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
linux上进程状态:
D 不可中断的进程 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断休眠 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
< 高优先级进程
N 低优先级进程
L 内存中被锁了的内存分页
s 主进程
l 多线程进程
+ 前台进程
实例:
ps aux
: 显示所有包含其他使用者的行程
[root@zyxlinux01 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.6 46140 6668 ? Ss 20:30 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 20:30 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 20:30 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 20:30 0:00 [kworker/0:0H]
......
结果说明:
USER:该 process 属于那个使用者账号的
PID :该 process 的号码
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process是在那个终端机上面运作,若与终端机无关,则显示 ?,另外,tty1-tty6是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序
STAT:该程序目前的状态
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中(可说是idle状态),但可被某些讯号 (signal) 唤醒
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令
其中STAT是需要重点参考的部分
ps 与grep
常用组合用法,查找特定进程,比如:ps aux |grep ssh
[root@zyxlinux01 ~]# ps aux |grep ssh
root 1108 0.0 0.3 82868 3592 ? Ss 20:31 0:00 /usr/sbin/sshd -D
root 3823 0.0 0.5 141248 5148 ? Ss 22:21 0:00 sshd: root@pts/0
root 3853 0.0 0.0 112664 984 pts/0 S+ 22:29 0:00 grep --color=auto ssh
netstat 查看网络状态
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等
常用参数:
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令
LISTEN和LISTENING的状态只有用-a或者-l才能看到
netstat
: 查看网络状态
[root@zyxlinux01 ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 232 zyxlinux01:ssh 192.168.101.1:57022 ESTABLISHED
tcp 1 1 zyxlinux01:45933 115.28.122.210:http LAST_ACK
tcp 1 1 zyxlinux01:58696 202.38.97.230:http LAST_ACK
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 10898 /run/systemd/shutdownd
unix 2 [ ] DGRAM 6351 /run/systemd/notify
unix 2 [ ] DGRAM 6353 /run/systemd/cgroups-agent
unix 5 [ ] DGRAM 6367 /run/systemd/journal/socket
unix 12 [ ] DGRAM 6369 /dev/log
netstat的输出结果可以分为两个部分:一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到;另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名
netstat -lnp
: 查看监听端口
[root@zyxlinux01 ~]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2111/master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1108/sshd
tcp6 0 0 ::1:25 :::* LISTEN 2111/master
tcp6 0 0 :::22 :::* LISTEN 1108/sshd
udp 0 0 0.0.0.0:57392 0.0.0.0:* 510/avahi-daemon: r
udp 0 0 0.0.0.0:5353 0.0.0.0:* 510/avahi-daemon: r
raw6 0 0 :::58 :::* 7 612/NetworkManager
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 14851 612/NetworkManager /var/run/NetworkManager/private
unix 2 [ ACC ] STREAM LISTENING 17316 2111/master private/tlsmgr
unix 2 [ ACC ] STREAM LISTENING 17319 2111/master private/rewrite
netstat -an
: 查看系统网络连接状况
[root@zyxlinux01 ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 52 192.168.101.128:22 192.168.101.1:57022 ESTABLISHED
tcp6 0 0 ::1:25 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 0.0.0.0:57392 0.0.0.0:*
udp 0 0 0.0.0.0:5353 0.0.0.0:*
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 14851 /var/run/NetworkManager/private
unix 2 [ ACC ] STREAM LISTENING 17316 private/tlsmgr
unix 2 [ ACC ] STREAM LISTENING 17319 private/rewrite
netstat -lntp
: 只显示tcp,不包含socket
[root@zyxlinux01 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2111/master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1108/sshd
tcp6 0 0 ::1:25 :::* LISTEN 2111/master
tcp6 0 0 :::22 :::* LISTEN 1108/sshd
ss -an
与netstat -an
效果几乎一致
- 统计所有网络状态
[root@zyxlinux01 ~]# netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
LISTEN 4
ESTABLISHED 1
ESTABLISHED (保持连接数)的值越大,说明并发越高,系统负载越高,一般小于1000算是比较正常
抓包工具 tcpdump
tcpdump,就是:dump the traffic on a network , 根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息
通常看到的都是tcp的包,如果发现udp的包,通常是被攻击了
用法:tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ][ -i 网络接口 ] [ -r 文件名] [ -s snaplen ][ -T 类型 ] [ -w 文件名 ] [表达式 ]
常用选项:
`-n` : 不把网络地址转换成名字
`-i` : 指定监听的网络接口
`port` :指定端口
`not port` : 排除端口
`-c` : 在收到指定的包的数目后,tcpdump就会停止
`-w` : 直接将包写入文件中,并不分析和打印出来
实例:
tcpdump -nn -i eth0
指定网卡eth0的包tcpdump -nn port 80
指定端口80的包tcpdump -nn not port 22 and host 192.168.0.3
指定端口22以外的端口和主机192.168.0.3的包tcpdump -nn -c 10 -w 1.cap
收到10次包之后停止抓包并将包写入1.cap中
1.cap不能直接cat,读取要用
tcpdump -r
tshark 抓包工具
安装: yum install -y wireshark
用法: tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.rsc" -e "http.host" -e "http.request.method" -e "http.request.uri"
: 查看指定网卡80端口的web访问情况(类似于web的访问日志)