linux系统分析,平常分析主要有cpu、内存、磁盘I/O、网络I/O、进程数分析等。html
经常使用的分析命令工具主要有如下几种:node
sar:system activity reportlinux
做为一款linux中经常使用的分析的工具,其几乎包含了全部的状态分析ios
[root@iZ25b31bdp0Z ~]# sar -h 用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ] 主选项和报告: -b I/O 和传输速率信息情况 -B 分页情况 -d 块设备情况 -H 交换空间利用率 -I { <中断> | SUM | ALL | XALL } 中断信息情况 -m { <关键词> [,...] | ALL } 电源管理统计信息 关键字: CPU CPU 频率 FAN 风扇速度 \t\tFREQ\tCPU 平均时钟频率 IN 输入电压 TEMP 设备温度 \t\tUSB\t链接的USB 设备 -n { <关键词> [,...] | ALL } 网络统计信息 关键词能够是: DEV 网卡 EDEV 网卡 (错误) NFS NFS 客户端 NFSD NFS 服务器 SOCK Sockets (套接字) (v4) IP IP 流 (v4) EIP IP 流 (v4) (错误) ICMP ICMP 流 (v4) EICMP ICMP 流 (v4) (错误) TCP TCP 流 (v4) ETCP TCP 流 (v4) (错误) UDP UDP 流 (v4) SOCK6 Sockets (套接字) (v6) IP6 IP 流 (v6) EIP6 IP 流 (v6) (错误) ICMP6 ICMP 流 (v6) EICMP6 ICMP 流 (v6) (错误) UDP6 UDP 流 (v6) -q 队列长度和平均负载 -r 内存利用率 -R 内存情况 -S 交换空间利用率 -u [ ALL ] CPU 利用率 -v Kernel table 情况 -w 任务建立与系统转换统计信息 -W 交换信息 -y TTY 设备情况
[root@iZ25b31bdp0Z ~]# sar -u 1 3 ## 1表明间隔1秒,3表明取值3次 Linux 3.10.0-123.9.3.el7.x86_64 (iZ25b31bdp0Z) 2017年09月11日 _x86_64_ (4 CPU) 14时28分11秒 CPU %user %nice %system %iowait %steal %idle 14时28分12秒 all 15.96 0.00 8.23 0.75 0.00 75.06 14时28分13秒 all 3.27 0.00 8.31 16.37 0.00 72.04 14时28分14秒 all 7.30 0.00 4.28 35.77 0.00 52.64 平均时间: all 8.87 0.00 6.95 17.57 0.00 66.61
其中参数分析以下:centos
CPU:all 表示统计信息为全部 CPU 的平均值。 %user:显示在用户级别(application)运行使用 CPU 总时间的百分比。 %nice:显示在用户级别,用于nice操做,所占用 CPU 总时间的百分比。 %system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。 %iowait:显示用于等待I/O操做占用 CPU 总时间的百分比。 %steal:管理程序(hypervisor)为另外一个虚拟进程提供服务而等待虚拟 CPU 的百分比。 %idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。
简单分析:缓存
1.iowait太高,可能是磁盘I/O存在瓶颈,通常高于值高于50,就要查看相关进程了 2.idle太高,但系统反应慢,多是cpu在等待内存分配,可查看内存使用量 3.system太高,说明系统内核使用cpu很高,内核使用cpu进行进程的建立等,此时I/O频繁,查看对应异常进程
[root@iZ25b31bdp0Z ~]# sar -v 1 3 Linux 3.10.0-123.9.3.el7.x86_64 (iZ25b31bdp0Z) 2017年09月11日 _x86_64_ (4 CPU) 14时38分35秒 dentunusd file-nr inode-nr pty-nr 14时38分36秒 132654 3712 135650 8 14时38分37秒 132656 3680 135652 8 14时38分38秒 132658 3680 135654 8 平均时间: 132656 3691 135652 8
参数分析:服务器
dentunusd:目录高速缓存中未被使用的条目数量 file-nr:文件句柄(file handle)的使用数量 inode-nr:索引节点句柄(inode handle)的使用数量 pty-nr:tty使用量,使用w也能够查看
[root@iZ25b31bdp0Z ~]# sar -b 1 3 Linux 3.10.0-123.9.3.el7.x86_64 (iZ25b31bdp0Z) 2017年09月11日 _x86_64_ (4 CPU) 14时42分07秒 tps rtps wtps bread/s bwrtn/s 14时42分08秒 2.00 0.00 2.00 0.00 16.00 14时42分09秒 0.00 0.00 0.00 0.00 0.00 14时42分10秒 3.00 0.00 3.00 0.00 128.00 平均时间: 1.67 0.00 1.67 0.00 48.00
简单参数分析以下:网络
tps:每秒钟物理设备的 I/O 传输总量 rtps:每秒钟从物理设备读入的数据总量 wtps:每秒钟向物理设备写入的数据总量 bread/s:每秒钟从物理设备读入的数据量,单位为 块/s bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s
[root@iZ25b31bdp0Z ~]# sar -r 1 3 Linux 3.10.0-123.9.3.el7.x86_64 (iZ25b31bdp0Z) 2017年09月11日 _x86_64_ (4 CPU) 14时51分41秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 14时51分42秒 704800 2915388 80.53 302240 454448 4976160 137.46 2267792 368308 356 14时51分43秒 704224 2915964 80.55 302248 454444 4976128 137.45 2267984 368308 356 14时51分44秒 704444 2915744 80.54 302248 454448 4976128 137.45 2267856 368308 464 平均时间: 704489 2915699 80.54 302245 454447 4976139 137.46 2267877 368308 392
参数分析:app
kbmemfree:这个值和free命令中的free值基本一致,因此它不包括buffer和cache的空间. kbmemused:这个值和free命令中的used值基本一致,因此它包括buffer和cache的空间. %memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比. kbbuffers和kbcached:这两个值就是free命令中的buffer和cache. kbcommit:保证当前系统所须要的内存,即为了确保不溢出而须要的内存(RAM+swap). %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.
[root@iZ25b31bdp0Z ~]# sar -n DEV 1 3 Linux 3.10.0-123.9.3.el7.x86_64 (iZ25b31bdp0Z) 2017年09月11日 _x86_64_ (4 CPU) 14时52分48秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 14时52分49秒 eth0 10.00 10.00 0.56 0.70 0.00 0.00 0.00 14时52分49秒 eth1 1.00 0.00 0.04 0.00 0.00 0.00 0.00 14时52分49秒 lo 10.00 10.00 0.88 0.88 0.00 0.00 0.00 14时52分49秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 14时52分50秒 eth0 5.00 5.00 0.28 0.35 0.00 0.00 0.00 14时52分50秒 eth1 10.00 7.00 0.39 9.58 0.00 0.00 0.00 14时52分50秒 lo 29.00 29.00 4.66 4.66 0.00 0.00 0.00 14时52分50秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 14时52分51秒 eth0 4.00 4.00 0.96 0.31 0.00 0.00 0.00 14时52分51秒 eth1 1.00 1.00 0.04 0.48 0.00 0.00 0.00 14时52分51秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均时间: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 平均时间: eth0 6.33 6.33 0.60 0.45 0.00 0.00 0.00 平均时间: eth1 4.00 2.67 0.16 3.35 0.00 0.00 0.00 平均时间: lo 13.00 13.00 1.85 1.85 0.00 0.00 0.00
简单参数分析:socket
IFACE:网络接口的名字,如上图,我服务器中主要有三个网卡,eth0内网,eth1外网,还有lo回环 rxpck/s:每秒钟接收的数据包 txpck/s:每秒钟发送的数据包 rxbyt/s:每秒钟接收的字节数,网络I/O洲入主要查看此参数 txbyt/s:每秒钟发送的字节数,网络I/O流出主要查看此参数 rxcmp/s:每秒钟接收的压缩数据包 txcmp/s:每秒钟发送的压缩数据包 rxmcst/s:每秒钟接收的多播数据包
[root@iZ25b31bdp0Z ~]# sar -f /var/log/sa/sa01 Linux 3.10.0-123.9.3.el7.x86_64 (iZ25b31bdp0Z) 2017年09月01日 _x86_64_ (4 CPU) 00时00分01秒 CPU %user %nice %system %iowait %steal %idle 00时10分01秒 all 0.49 0.01 0.41 0.13 0.03 98.93 00时20分01秒 all 0.49 0.01 0.41 0.12 0.03 98.94 00时30分01秒 all 0.50 0.01 0.41 0.17 0.03 98.88 00时40分01秒 all 0.47 0.01 0.41 0.10 0.03 98.97 00时50分01秒 all 0.48 0.01 0.41 0.12 0.03 98.96 01时00分01秒 all 0.48 0.01 0.40 0.15 0.03 98.92 01时10分01秒 all 0.48 0.01 0.40 0.12 0.03 98.95 01时20分01秒 all 0.47 0.01 0.41 0.07 0.03 99.01
sar默认保存一个月的系统报告,在其中能够简单的查看其中的状态。
相关时长配置文件更改,可在/etc/sysconfig/sysstat
调整history值
[root@iZ25b31bdp0Z ~]# grep ^[^#] /etc/sysconfig/sysstat HISTORY=28 COMPRESSAFTER=31 SADC_OPTIONS="-S DISK"
固然sar只能提供简单的历史数据,相关详细的系统状态值,仍是得去zabbix中查看系统状态值
dstat没有sar那么繁杂的参数选定,基本使用只有dstat
连续滚动,或者使用dstat 1 10
这样次数限定的显示,不过centos7上面才会自带,centos6上面并无加入
[root@iZ25b31bdp0Z ~]# dstat You did not select any stats, using -cdngy by default. ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai hiq siq| read writ| recv send| in out | int csw 1 1 98 1 0 0| 143k 251k| 0 0 | 0 0 | 688 954 0 0 99 0 0 0| 0 0 |3372B 28k| 0 0 | 668 910 0 0 99 0 0 0| 0 80k|1257B 3302B| 0 0 | 489 732 1 0 99 0 0 0| 0 0 | 775B 9720B| 0 0 | 565 830 0 1 98 1 0 0| 120k 80k| 780B 3983B| 0 0 | 558 836 0 1 99 0 0 0| 0 0 |1189B 10k| 0 0 | 496 731
其中相比于top而言,在网络上面有recv和send的区分,也不至于像sar那样过于细分,能够很方便的显示
最重要的,它是彩色显示!
iftop是一款专门用来显示网络I/O的工具,其相对于dstat而言,其能够显示相关进程的网络I/O使用,在epel源中,默认没有安装
经常使用的命令
[root@iZ25b31bdp0Z ~]# iftop -n -P -o 2s -i eth1
参数简单讲解:
-n:不对主机名进行反解,直接显示ip -i:选择对应的网卡,不选择默认显示第一个网卡,eth0为个人内网网卡,eth1才为外网网卡 -P:显示进程端口 -o 2s: 2秒的统计结果,进行排序
与iftop相似的一款工具,能够显示程序详细的进程网络I/O。不过由于命令难记,因此本人通常逐渐使用iftop
进行了替代
使用时方便,不须要使用其它的附带参数
free -h
为内存使用量查看,由于使用人不少,因此不过多介绍
[root@iZ25b31bdp0Z ~]# free -h total used free shared buffers cached Mem: 3.5G 2.6G 833M 248M 194M 118M -/+ buffers/cache: 2.3G 1.1G Swap: 0B 0B 0B
用于查看cpu和磁盘I/O的工具,相比于sar而言,其优势在于能够显示每块盘的I/O情况,其中-x选项使用频率挺高,能够查看util的值,若是util值太高,说明该磁盘io繁忙,不少监控系统会监控此选项值
[root@10-110-151-75 ~]# iostat -x 1 10 Linux 2.6.32-926.573.26.1.letv.el6.x86_64 (10-110-151-75) 01/31/2018 _x86_64_ (6 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 26.42 0.00 3.85 2.41 0.00 67.32 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.03 1.55 0.61 1.36 22.44 23.32 23.31 0.01 3.11 1.07 0.21 sdb 0.53 0.27 6.93 6.85 2230.21 2502.06 343.57 0.22 16.10 0.80 1.10 sdc 0.52 0.27 6.38 5.99 1946.43 2102.32 327.34 0.21 16.64 0.78 0.97 sdd 0.52 0.26 6.91 5.97 2230.60 2091.13 335.64 0.20 15.50 0.84 1.08 sde 0.49 0.27 6.79 6.00 2180.22 2108.09 335.43 0.21 16.53 0.84 1.07 sdf 0.53 0.27 6.21 6.01 1826.62 2112.35 322.40 0.21 16.81 0.76 0.92 sdg 0.49 0.27 6.83 5.98 2164.34 2093.05 332.56 0.20 15.85 0.83 1.06 sdh 0.50 0.27 6.74 5.98 2153.15 2092.00 333.82 0.21 16.14 0.85 1.08 sdi 0.51 0.27 6.90 5.99 2200.24 2103.99 333.95 0.21 16.09 0.83 1.08 sdj 0.54 0.27 6.97 5.97 2251.68 2091.70 335.60 0.21 16.13 0.85 1.10 sdk 0.61 0.42 6.87 5.82 2214.42 2081.00 338.41 0.20 15.45 17.41 22.10 sdl 0.49 0.26 6.19 6.12 1739.91 2116.46 313.28 0.22 17.82 0.84 1.03 sdm 0.50 0.26 6.20 6.01 1845.52 2092.76 322.60 0.21 17.08 0.79 0.96
netstat主要用于查看本机端口使用,网络状态链接数
1.查看端口使用netstat -tnl
[root@iZ25b31bdp0Z ~]# netstat -tnl Active Internet connections (only servers) 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 127.0.0.1:953 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:15770 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:188 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:8800 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:55203 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:33060 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:718 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:178 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:8181 0.0.0.0:* LISTEN tcp 0 0 101.200.215.232:53 0.0.0.0:* LISTEN tcp 0 0 10.44.182.73:53 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:8088 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN tcp6 0 0 :::21 :::* LISTEN
2.查看网络链接数
netstat -n |grep 'WORD'
通常使用为查看tcp链接最多的ip
经常使用命令:
[root@iZ25b31bdp0Z ~]# netstat -na|grep ESTABLISHED |awk '{print $5}' | awk -F: '{ip[$1]++}END{for (i in ip){print ip[i],i}}' | sort -nr 166 118.192.170.71 42 123.207.167.163 9 114.242.249.229 8 61.148.244.65 8 183.198.197.154
或者直接使用sort
和uniq
来进行获取
[root@iZ25b31bdp0Z ~]# netstat -na|grep ESTABLISHED |awk '{print $5}' | awk -F: '{print $1}' | sort -n | uniq -c | sort -nr 165 118.192.170.71 42 123.207.167.163 9 114.242.249.229 8 61.148.244.65 8 183.198.197.154
ss,man的解释中说的是another utility to investigate sockets
,可是我以为其能够是netstat的替代者,至少在端口占用这方面,其少了链接数等查看,可是在程序占用端口方面却直观不少。
主要使用命令有
[root@wlinux conf.d]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 127.0.0.1:9000 *:* LISTEN 0 128 *:80 *:* LISTEN 0 128 *:50998 *:* LISTEN 0 80 :::3306 :::*
其能够更直观的显示端口,同时加上-p
参数,能够显示占用对应端口的程序
ps:snapshot of the current processes.
显示当时运行进程
ps通常有两种风格,一种是BSD风格,一种是NUIX风格
两种经常使用的命令有
ps aux
和ps -ef
固然ps中还有其它的参数,可是以这二者组合居多
[root@wlinux conf.d]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 Sep01 ? 00:00:17 /usr/lib/systemd/systemd --system --deserialize 20 root 2 0 0 Sep01 ? 00:00:00 [kthreadd] root 3 2 0 Sep01 ? 00:00:00 [ksoftirqd/0] 如下略
[root@wlinux conf.d]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 125120 3352 ? Ss Sep01 0:17 /usr/lib/systemd/systemd --system --deserialize 20 root 2 0.0 0.0 0 0 ? S Sep01 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Sep01 0:00 [ksoftirqd/0] 如下略
通常相比而言,本人使用ps aux
多于ps -ef
,前者相比于后者,能够更好的看出资源的使用量,不事后面能够直接看出ppid
,不过ps中使用ps ax -o user,pid,ppid,stat,command
加入-o
的选项,加上ppid
的参数,也是能显示ppid
值的。
这三者均也是经常使用工具,特别是top
,其相关解释能够查看top命令使用