- 查看 CentOS 版本号:
cat /etc/redhat-release
12:04:52 up 16 days, 12:54, 1 user, load average: 0.06, 0.13, 0.12
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 116.21.24.85 11:57 4.00s 16:18 0.01s w
- 第一行:
12:04:52
表示当前系统时间up 16 days
表示系统运行时间1 user
表示登录用户数load average
表示平均负载,0.06 表示一分钟内系统的平均负载值,0.13 表示五分钟内系统的平均负载值,0.12 表示十五分钟内系统的平均负载值。一般这个字不要超过服务器的 CPU 线程数(process)就没有关系。- 查看 CPU 总的线程数:
grep 'processor' /proc/cpuinfo | sort -u | wc -l
- 查看 CPU 总的线程数:
- 第二行:
- 开始表示各个登录用户的情况,当前登录者是 root,登录者 IP 116.21.24.85
- 命令:
vmstat 5 10
,每 5 秒采样一次,共 10 次。
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 72648 0 674564 0 0 0 7 0 26 1 1 99 0 0
0 0 0 72648 0 674596 0 0 0 0 442 557 1 0 99 0 0
0 0 0 72648 0 674596 0 0 0 12 438 574 0 1 99 0 0
0 0 0 72648 0 674596 0 0 0 0 430 540 0 0 100 0 0
0 0 0 72648 0 674596 0 0 0 0 448 567 0 1 99 0 0
0 0 0 72648 0 674596 0 0 0 0 459 574 1 0 99 0 0
0 0 0 72648 0 674596 0 0 0 0 425 543 0 1 99 0 0
0 0 0 72276 0 674600 0 0 0 0 480 643 2 3 95 0 0
- 第二行:
r
表示运行和等待CPU时间片的进程数,该数字如果长期大于服务器CPU的进程数,则说明CPU不够用了。b
表示等待资源的进程数,比如等I/O,内存等。该数字如果长时间大于 1,则需要关注一下。si
表示由交换区写入到内存的数据量so
表示由内存写入到交换区的数据量- 如果 si 和 so 的数字比较高,并且不断变化时,说明内存不够了。而且不断变化也表示对系统性能影响很大。
bi
表示从块设备读取数据的量(读磁盘)bo
表示从块设备写入数据的量(写磁盘)- 如果bi和bo两个数字比较高,则说明,磁盘IO压力大。
wa
表示I/O等待所占用CPU的时间比
- 命令:
iostat -x -k 3 3
,每 3 秒采样一次,共 3 次。
avg-cpu: %user %nice %system %iowait %steal %idle
0.55 0.00 0.52 0.00 0.00 98.93
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.04 0.02 0.62 0.44 6.49 21.65 0.00 1.42 1.17 1.42 0.25 0.02
avg-cpu: %user %nice %system %iowait %steal %idle
0.34 0.00 0.00 0.00 0.00 99.66
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 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
2.02 0.00 0.34 0.00 0.00 97.64
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.00 0.00 1.68 0.00 16.16 19.20 0.00 0.20 0.00 0.20 0.20 0.03
- 列说明:
rrqm/s
: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并wrqm/s
: 每秒对该设备的写请求被合并次数r/s
: 每秒完成的读次数w/s
: 每秒完成的写次数rkB/s
: 每秒读数据量(kB为单位)wkB/s
: 每秒写数据量(kB为单位)avgrq-sz
:平均每次IO操作的数据量(扇区数为单位)avgqu-sz
: 平均等待处理的IO请求队列长度await
: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)svctm
: 平均每次IO请求的处理时间(毫秒为单位)%util
: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
- 总结
iowait%
表示CPU等待IO时间占整个CPU周期的百分比,如果iowait值超过50%,或者明显大于%system、%user以及%idle,表示IO可能存在问题。%util
表示磁盘忙碌情况,一般该值超过80%表示该磁盘可能处于繁忙状态
- sar(system activity reporter 系统活动情况报告)
- sar 是目前 linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动情况进行报告。包括(文件的读写、系统调用、磁盘I/O、cpu效率、内存使用、进程活动以及IPC有关的活动)
- 如果没安装,运行:
yum install -y sysstat
- 命令:
sar -u 5 10
,每 5 秒采样一次,共 10 次
01:57:29 PM CPU %user %nice %system %iowait %steal %idle
01:57:34 PM all 1.81 0.00 0.40 0.00 0.00 97.78
01:57:39 PM all 0.20 0.00 0.40 0.00 0.00 99.39
01:57:44 PM all 0.40 0.00 0.60 0.00 0.00 98.99
01:57:49 PM all 0.20 0.00 0.40 0.00 0.00 99.39
01:57:54 PM all 0.80 0.00 1.41 0.00 0.00 97.79
01:57:59 PM all 0.40 0.00 0.60 0.00 0.00 98.99
01:58:04 PM all 0.20 0.00 0.40 0.00 0.00 99.39
01:58:09 PM all 0.20 0.00 0.40 0.00 0.00 99.39
01:58:14 PM all 0.40 0.00 0.61 0.00 0.00 98.99
01:58:19 PM all 0.20 0.00 0.61 0.00 0.00 99.19
Average: all 0.48 0.00 0.59 0.00 0.00 98.93
- 列说明:
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瓶颈 - 2.若
%idle
的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量,可以使用内存监控命令分析内存。 - 3.若
%idle
的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。
- 1.若
- 命令:
sar -B 5 10
,每 5 秒采样一次,共 10 次
02:32:15 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
02:32:20 PM 0.00 0.81 258.47 0.00 27.22 0.00 0.00 0.00 0.00
02:32:25 PM 0.00 0.00 611.54 0.00 300.20 0.00 0.00 0.00 0.00
02:32:30 PM 0.00 26.61 10.08 0.00 11.90 0.00 0.00 0.00 0.00
02:32:35 PM 0.00 1.62 3.64 0.00 3.84 0.00 0.00 0.00 0.00
02:32:40 PM 0.00 0.00 3.42 0.00 4.43 0.00 0.00 0.00 0.00
02:32:45 PM 0.00 0.00 3.43 0.00 3.83 0.00 0.00 0.00 0.00
02:32:50 PM 0.00 1.62 3.84 0.00 5.86 0.00 0.00 0.00 0.00
02:32:55 PM 0.00 0.00 3.41 0.00 3.82 0.00 0.00 0.00 0.00
02:33:00 PM 0.00 2.42 763.84 0.00 208.69 0.00 0.00 0.00 0.00
02:33:05 PM 0.00 13.74 2409.70 0.00 929.70 0.00 0.00 0.00 0.00
Average: 0.00 4.68 406.50 0.00 149.69 0.00 0.00 0.00 0.00
pgpgin/s
:表示每秒从磁盘或SWAP置换到内存的字节数(KB)pgpgout/s
:表示每秒从内存置换到磁盘或SWAP的字节数(KB)fault/s
:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)majflt/s
:每秒钟产生的主缺页数pgfree/s
:每秒被放入空闲队列中的页个数pgscank/s
:每秒被kswapd扫描的页个数pgscand/s
:每秒直接被扫描的页个数pgsteal/s
:每秒钟从cache中被清除来满足内存需要的页个数%vmeff
:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比
- 命令:
sar -b 5 10
,每 5 秒采样一次,共 10 次
02:34:13 PM tps rtps wtps bread/s bwrtn/s
02:34:18 PM 3.03 0.00 3.03 0.00 59.80
02:34:23 PM 0.00 0.00 0.00 0.00 0.00
02:34:28 PM 0.00 0.00 0.00 0.00 0.00
02:34:33 PM 0.00 0.00 0.00 0.00 0.00
02:34:38 PM 1.61 0.00 1.61 0.00 24.80
02:34:43 PM 0.00 0.00 0.00 0.00 0.00
02:34:48 PM 0.40 0.00 0.40 0.00 4.86
02:34:53 PM 0.00 0.00 0.00 0.00 0.00
02:34:58 PM 0.00 0.00 0.00 0.00 0.00
02:35:03 PM 0.00 0.00 0.00 0.00 0.00
Average: 0.50 0.00 0.50 0.00 8.94
tps
:每秒钟物理设备的 I/O 传输总量rtps
:每秒钟从物理设备读入的数据总量wtps
:每秒钟向物理设备写入的数据总量bread/s
:每秒钟从物理设备读入的数据量,单位为块/sbwrtn/s
:每秒钟向物理设备写入的数据量,单位为块/s
- 命令:
sar -n DEV
,查看网卡历史流量(因为是按时间显示每棵的流量,所以有很多) - 如果要动态显示当前的网卡流量:
sar -n DEV 1
- 采样收集网卡流量:
sar -n DEV 5 10
,每 5 秒采样一次,共 10 次 - 如果要查看其他日期下的记录,可以到这个目录下:
cd /var/log/sa
查看下记录的文件,然后选择一个文件,比如:sar -n DEV -f /var/log/sa/sa01
)
01:46:24 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
01:46:25 PM lo 3.00 3.00 0.18 0.18 0.00 0.00 0.00
01:46:25 PM eth0 4.00 4.00 0.55 0.56 0.00 0.00 0.00
01:46:25 PM
表示时间IFACE
表示网卡名称rxpck/s
每秒钟接收到的 包数目,一般如果这个数字大于 4000 一般是被攻击了。txpck/s
每秒钟发送出去的 包数目rxkB/s
每秒钟接收到的数据量(单位kb),一般如果这个数字大于 5000 一般是被攻击了。txkB/s
每秒钟发送出去的数据量(单位kb)rxcmp/s
:每秒钟接收到的压缩包数目txcmp/s
:每秒钟发送出去的压缩包数目txmcst/s
:每秒钟接收到的多播包的包数目
- Demo CPU 型号:Intel® Xeon® Processor E5-2620 v2(15M Cache, 2.10 GHz)
- 该 CPU 显示的数据中有一项这个要注意:
Intel® Hyper-Threading Technology
是Yes
。表示该 CPU 支持超线程 cat /proc/cpuinfo
,查看 CPU 总体信息grep 'physical id' /proc/cpuinfo | sort -u | wc -l
,查看物理 CPU 个数- 结果:2
- 物理 CPU:物理 CPU 也就是机器外面就能看到的一个个 CPU,每个物理 CPU 还带有单独的风扇
grep 'core id' /proc/cpuinfo | sort -u | wc -l
,查看每个物理 CPU 的核心数量- 结果:6,因为每个物理 CPU 是 6,所有 2 个物理 CPU 的总核心数量应该是:12
- 核心数:一个核心就是一个物理线程,英特尔有个超线程技术可以把一个物理线程模拟出两个线程来用,充分发挥 CPU 性能,意思是一个核心可以有多个线程。
grep 'processor' /proc/cpuinfo | sort -u | wc -l
,查看 CPU 总的线程数,一般也叫做:逻辑 CPU 数量- 结果:24,正常情况下:CPU 的总核心数量 == CPU 线程数,但是如果该 CPU 支持超线程,那结果是:CPU 的总核心数量 X 2 == CPU 线程数
- 线程数:线程数是一种逻辑的概念,简单地说,就是模拟出的 CPU 核心数。比如,可以通过一个 CPU 核心数模拟出 2 线程的 CPU,也就是说,这个单核心的 CPU 被模拟成了一个类似双核心 CPU 的功能。
- Linux 的 CPU 简单监控一般简单
- 常用命令就是
top
- 命令:
top -bn1
,可以完全显示所有进程出来,但是不能实时展示数据,只能暂时命令当时的数据。
- 命令:
top
可以动态显示进程所占的系统资源,每隔 3 秒变一次,占用系统资源最高的进程放最前面。- 在
top
命令状态下还可以按数字键 1 显示各个 CPU 线程使用状态 - 在
top
命令状态下按 shfit + m 可以按照 内存使用 大小排序 - 在
top
命令状态下按 shfit + p 可以按照 CPU 使用 大小排序 - 展示数据上,%CPU 表示进程占用的 CPU 百分比,%MEM 表示进程占用的内存百分比
- Linux 的内存本质是虚拟内存,这样说是因为它的内存是:物理内存 + 交换分区。有一个内存模块来管理应用的内存使用。
- 如果所以你内存大,可以考虑把 swap 分区改得小点或者直接关掉。
- 但是,如果是用的云主机,一般是没交换分区的,
free -g
中的 Swap 都是 0。 - 查看内存使用命令:
- 以 M 为容量单位展示数据:
free -m
- 以 G 为容量单位展示数据:
free -g
- CentOS 6 和 CentOS 7 展示出来的数据有差别,CentOS 7 比较容易看,比如下面的数据格式是 CentOS 7 的
free -g
:
- 以 M 为容量单位展示数据:
total used free shared buff/cache available
Mem: 11 0 10 0 0 10
Swap: 5 0 5
- 在以上结果中,其中可以用的内存是看
available
列。 - 对于 CentOS 6 的系统可以使用下面命令:
[root@bogon ~]# free -mlt
total used free shared buffers cached
Mem: 16080 15919 160 0 278 11934
Low: 16080 15919 160
High: 0 0 0
-/+ buffers/cache: 3706 12373
Swap: 0 0 0
Total: 16080 15919 160
- 以上的结果重点关注是:
-/+ buffers/cache
,这一行代表实际使用情况。
df -h
:自动以合适的磁盘容量单位查看磁盘大小和使用空间df -m
:以磁盘容量单位 M 为数值结果查看磁盘使用情况du -sh /opt/tomcat6
:查看tomcat6这个文件夹大小 (h的意思human-readable用人类可读性较好方式显示,系统会自动调节单位,显示合适大小的单位)du /opt --max-depth=1 -h
:查看指定录入下包括子目录的各个文件大小情况
-
安装 iotop:
yum install -y iotop
-
查看命令:
iotop
-
使用 dd 命令测量服务器延迟:
dd if=/dev/zero of=/opt/ioTest2.txt bs=512 count=1000 oflag=dsync
-
使用 dd 命令来测量服务器的吞吐率(写速度):
dd if=/dev/zero of=/opt/ioTest1.txt bs=1G count=1 oflag=dsync
- 该命令创建了一个 10M 大小的文件 ioTest1.txt,其中参数解释:
- if 代表输入文件。如果不指定 if,默认就会从 stdin 中读取输入。
- of 代表输出文件。如果不指定 of,默认就会将 stdout 作为默认输出。
- bs 代表字节为单位的块大小。
- count 代表被复制的块数。
- /dev/zero 是一个字符设备,会不断返回0值字节(\0)。
- oflag=dsync:使用同步I/O。不要省略这个选项。这个选项能够帮助你去除 caching 的影响,以便呈现给你精准的结果。
- conv=fdatasyn: 这个选项和 oflag=dsync 含义一样。
-
该命令执行完成后展示的数据:
[root@youmeek ~]# dd if=/dev/zero of=/opt/ioTest1.txt bs=1G count=1 oflag=dsync
记录了1+0 的读入
记录了1+0 的写出
1073741824字节(1.1 GB)已复制,5.43328 秒,198 MB/秒
- 利用 hdparm 测试硬盘速度:
yum install -y hdparm
- 查看硬盘分区情况:
df -h
,然后根据分区测试: - 测试硬盘分区的读取速度:
hdparm -T /dev/sda
- 测试硬盘分区缓存的读取速度:
hdparm -t /dev/sda
- 也可以以上两个参数一起测试:
hdparm -Tt /dev/sda
,结果数据如下:
/dev/sda:
Timing cached reads: 3462 MB in 2.00 seconds = 1731.24 MB/sec
Timing buffered disk reads: 806 MB in 3.00 seconds = 268.52 MB/sec
- 安装 iftop(需要有 EPEL 源):
yum install -y iftop
- 如果没有 EPEL 源:
yum install -y epel-release
- 如果没有 EPEL 源:
- 常用命令:
iftop
:默认是监控第一块网卡的流量iftop -i eth1
:监控eth1iftop -n
:直接显示IP, 不进行DNS反解析iftop -N
:直接显示连接埠编号, 不显示服务名称iftop -F 192.168.1.0/24 or 192.168.1.0/255.255.255.0
:显示某个网段进出封包流量
- 查看 3316 端口是否有被使用:
lsof -i:3316
,有被使用会输出类似如下信息,如果没被使用会没有任何信息返回。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 12011 root 77u IPv6 4506842 0t0 TCP JDu4e00u53f7:58560->116.196.110.69:aicc-cmi (ESTABLISHED)
java 12011 root 78u IPv6 4506843 0t0 TCP JDu4e00u53f7:58576->116.196.110.69:aicc-cmi (ESTABLISHED)
java 12011 root 79u IPv6 4506844 0t0 TCP JDu4e00u53f7:58578->116.196.110.69:aicc-cmi (ESTABLISHED)
java 12011 root 80u IPv6 4506845 0t0 TCP JDu4e00u53f7:58574->116.196.110.69:aicc-cmi (ESTABLISHED)
java 12011 root 82u IPv6 4506846 0t0 TCP JDu4e00u53f7:58562->116.196.110.69:aicc-cmi (ESTABLISHED)
java 12011 root 83u IPv6 4506847 0t0 TCP JDu4e00u53f7:58564->116.196.110.69:aicc-cmi (ESTABLISHED)
java 12011 root 84u IPv6 4506848 0t0 TCP JDu4e00u53f7:58566->116.196.110.69:aicc-cmi (ESTABLISHED)
java 12011 root 85u IPv6 4506849 0t0 TCP JDu4e00u53f7:58568->116.196.110.69:aicc-cmi (ESTABLISHED)
java 12011 root 86u IPv6 4506850 0t0 TCP JDu4e00u53f7:58570->116.196.110.69:aicc-cmi (ESTABLISHED)
java 12011 root 87u IPv6 4506851 0t0 TCP JDu4e00u53f7:58572->116.196.110.69:aicc-cmi (ESTABLISHED)
docker-pr 13551 root 4u IPv6 2116824 0t0 TCP *:aicc-cmi (LISTEN)
- 查看所有在用的端口:
netstat -ntlp
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:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 746/sshd
tcp 0 0 127.0.0.1:32000 0.0.0.0:* LISTEN 12011/java
tcp6 0 0 :::9066 :::* LISTEN 12011/java
tcp6 0 0 :::6379 :::* LISTEN 28668/docker-proxy
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::3316 :::* LISTEN 13551/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 746/sshd
tcp6 0 0 :::35224 :::* LISTEN 12011/java
tcp6 0 0 :::3326 :::* LISTEN 14203/docker-proxy
tcp6 0 0 :::1984 :::* LISTEN 12011/java
tcp6 0 0 :::8066 :::* LISTEN 12011/java
tcp6 0 0 :::43107 :::* LISTEN 12011/java
- 查看当前连接80端口的机子有多少:
netstat -an|grep 80|sort -r
- 查看已经连接的IP有多少连接数:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n