目录
一、理论
1.命令描述
2.命令作用
3.命令参数
4.实用实例
二、实验
1.压力测试
三、问题
1.Linux系统五大负载如何解决
2.为什么使用ab命令进行网络传输数据的压力测试
3.ab命令发送请求测试失败
四、总结
1.sar命令
2.ab命令
3.五大负载
一、理论
1.命令描述
sar(System Activity Reporter系统活动情况报告)是目前Linux比较全的系统性能分析工具之一,可以从多方面对系统的活动进行报告 ,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状态、进程活动有IPC有关的活动等。
sar 还可以配置配置信息收集历史指标。
-n,代表的是监控一些网络信息。DEV,代表的是监控网卡信息。
时间间隔,表示多少秒采样一次数据,这里的1就是1秒次数,表示采样的次数。比如时间间隔是3,采样次数是4,那么sar命令将会阻塞12秒钟。
2.命令作用
sar是sysstat软件包的一部分,如果系统没有安装的话,可以使用命令进行安装。
yum install -y sysstat
[root@localhost /]# rpm -q sysstat
sysstat-10.1.5-12.el7.x86_64
3.命令参数
① 语法:
sar [options] [-A] [-o file] [[t] [n]]
② 选项
表1 sar命令选项
选项 | 功能 |
-b | I/O传输速率信息状态 |
-B | 分布状况 |
-c | 进程创建活动 |
-d | 块设备状况 |
-e | 设置显示报告的结果时间 |
-m | 电源管理信息状况 |
-f | 从指定文件提取报告 |
-I {<中断> | SUM | ALL | XALL —>} | 中断信息状况 |
-m | 电源管理信息状况 |
-n{ <关键词> [,…] | ALL } | 网络统计信息,关键词可以是: DEV ->网卡 EDEV ->网卡(错误) NFS ->NFS客户端 NFSD ->NFS服务器 SOCK ->Sockets(套接字)(v4) IP ->IP流(v4) EIP ->IP流(错误)(v4) ICMP ->ICMP流(v4) EICMP ->ICMP流(错误)(v4) UDP ->UDP流(v4) SOCK6 ->Sockets(套接字)(v6) IP6 ->IP流(v6) EIP6 ->IP流(错误)(v6) ICMP6 ->ICMP流(v6) EICMP6 ->ICMP流(错误)(v6) UDP6 ->UDP流(v6) |
-P | 报告每个CPU的状态 |
-q | 队列长度和平均负载 |
-r | 内存利用率 |
-R | 内存状态 |
-S | 交换空间利用率 |
-u [ ALL ] | CPU利用率 |
-v | Kernel table状况 |
-w | 任务创建与系统转换统计信息 |
-W | 交换信息 |
-y | TTY设备状态 |
-x | 显示给定进程的状态 |
4.实用实例
①监测CPU
sar -u 1 3 或 sar 1 3 (1:每隔一秒刷新一次,3:刷新3次)
② 进程长度和CPU平均负载状态监控
sar -q 1 3 (1:每隔一秒刷新一次,3:刷新3次)
③ 内存监控
sar -r 1 3 (1:每隔一秒刷新一次,3:刷3次)
sar -W 1 3 SWAP交换的统计信息(监控状态同iostat 的si so)
④ I/O和传送速率监控与磁盘使用情况
sar -r 1 3 输出内存使用率统计信息
sar -b 1 3 (1:每隔一秒刷新一次,3:刷新3次)
sar -d 1 3 (1:每隔一秒刷新一次,3:刷新3次)
sar -d 1 3 -p(1:每隔一秒刷新一次,3:刷新3次)
⑤ 网络宽带监控
sar命令使用-n选项可以汇报网络相关信息,可用的参数包括:DEV、EDEV、SOCK和FULL。
二、实验
1.压力测试
(1)测试CPU占用率
测试前数据:
sar -u 1 3
stress命令测试:
stress-ng --io --hdd 15 --timeout 600
开PC2远程PC1
测试后数据:
sar -u 1 3
cpu空闲时间已经没有了。
(2)测试内存占用率
测试前数据:
sar -r 1 3
stress命令测试
stress-ng --vm 2 --vm-hang 100 --timeout 100s
测试后数据:
sar -r 1 3
(3)测试I/O与传输速率与磁盘使用情况
测试前数据:
sar -b 1 3
stress命令测试
stress-ng --io -hdd 15 --timeout 600
测试后数据:
sar -b 1 3
(4)检测网络流量
网路设备的状态信息
首先在本机PC1上(192.168.204.200)安装httpd服务,并启动(注意一定要关闭防火墙)
测试前数据:
sar -n DEV 1 1
再开一台虚拟机PC2(192.168.204.150)
先使用yum 安装ab命令
yum install -y httpd-tools
用ab命令来测试
ab -c 1000 -n 50000 http://192.168.204.200/
接受和发送的数据都非常的大
sar -n DEV 1 1
三、问题
1.Linux系统五大负载如何解决
(1)I/O过高异常
使用命令:iostat、iotop
解决方法:
①IO使用情况定位
②top查询wa(i/o)的使用情况,查看io占用cpu是否较高。
top - 15:50:07 up 6:05, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 195 total, 2 running, 193 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.3 sy, 0.0 ni, 99.3 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1867048 total, 133076 free, 789220 used, 944752 buff/cache
KiB Swap: 4194300 total, 4183600 free, 10700 used. 844616 avail Mem
③iostat -x 2 5查看各磁盘的使用情况,越高说明磁盘对应的io越高。
[root@localhost /]# iostat -x 2 5
Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 2023年06月15日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.18 0.23 0.31 0.01 0.00 99.27
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.16 1.04 0.40 60.38 58.92 165.64 0.00 1.57 1.33 2.21 0.70 0.10
sdb 0.00 0.00 0.02 0.00 0.23 0.10 29.66 0.00 0.16 0.14 2.00 0.14 0.00
sdd 0.00 0.00 0.02 0.00 0.27 0.00 31.19 0.00 0.12 0.12 0.00 0.11 0.00
sdc 0.00 0.00 0.02 0.00 0.24 0.00 30.46 0.00 0.20 0.20 0.00 0.15 0.00
scd0 0.00 0.00 0.00 0.00 0.05 0.00 72.41 0.00 0.79 0.79 0.00 0.72 0.00
dm-0 0.00 0.00 1.00 0.42 58.67 58.28 164.48 0.00 1.59 1.36 2.14 0.68 0.10
dm-1 0.00 0.00 0.01 0.13 0.12 0.53 9.30 0.00 5.53 0.40 5.78 0.19 0.00
dm-2 0.00 0.00 0.01 0.00 0.06 0.10 36.82 0.00 0.13 0.09 2.00 0.10 0.00
dm-3 0.00 0.00 0.00 0.00 0.05 0.00 48.19 0.00 0.09 0.09 0.00 0.09 0.00
……
④iotop直接查看IO较高的进程号
1)iotop 默认按照 I/O 使用量大小进行排序,按照 I/O 占用最高的进程排列在最上面。
2)通过按下 O
键可以对进程列表进行排序,如按照 CPU 占用排序等。
3)按下 P
键可以暂停/恢复 I/O 监测,这样可以更方便地找到正在进行 I/O 操作的进程。
4)对于需要退出 iotop 的情况,可以按下 q
键退出。
先安装软件包
yum install -y iotop
iotop
⑤ cat /proc/pid/io查看对应进程使用的io情况
[root@localhost /]# cat /proc/1403/io
rchar: 2047910
wchar: 62473
syscr: 1064
syscw: 70
read_bytes: 2068480
write_bytes: 16384
cancelled_write_bytes: 0
⑥ ls /proc/pid/fd查看对应的应用目录
[root@localhost /]# lsof -p 980
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firewalld 980 root cwd DIR 253,0 248 64 /
firewalld 980 root rtd DIR 253,0 248 64 /
firewalld 980 root txt REG 253,0 7136 100842928 /usr/bin/python2.7
……
[root@localhost /]# ls /proc/980/fd
0 1 10 2 3 4 5 6 7 8 9
⑦fdisk -l 或pvdisplay 查看对应的磁盘,来确认是否与io高的磁盘一致。
[root@localhost opt]# fdisk -l
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000d84b8
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 10487807 5242880 83 Linux
/dev/sda2 10487808 123750399 56631296 8e Linux LVM
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xb2b3538f
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
/dev/sdb2 20973568 39847935 9437184 83 Linux
……
(2)网络流量异常
Linux下使用iftop工具结合iptables服务来解决带宽资源被恶意请求满的问题,主要通过2个步骤来实现:
① 使用iftop工具查出来是哪些个在请求主机的带宽资源,找出耗带宽的程序。
1)<= 、=> 左右箭头,表示流量的方向;
2)右边3列,表示的是该访问ip连接到本机2秒,10秒和40秒的平均流量
3)TX:发送流量
4)RX:接收流量
5)TOTAL:总流量
6)Cum:运行iftop到目前时间的总流量
7)peak:流量峰值
8)rates:分别表示过去 2s 10s 40s 的平均流量
安装软件包
yum –y install iftop
② 找出耗带宽的或者段,分析是out方向还是in方向,使用iptables规则来进行控制。
-raw:主要用来决定是否对数据包进行状态跟踪 包含两个规则链,OUTPUT、PREROUTING
-mangle : 修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING
-nat:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。
-filter:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个链,即INPUT、FORWARD、 OUTPUT
(3)硬盘满了
①确定是不是真的是磁盘空间不足
输入命令:df –h 查看磁盘信息
磁盘下的挂载点 /dev/sda1 下的40G容量已经耗尽
既然问题已经确定了,接下来就是处理了
处理方法也很简单,就是删文件
问:删除什么文件?
答:删除占用磁盘空间大,但又无用的文件
问:什么是无用的文件?
答:如果对系统不熟悉的话,日志可能是你第一的下手目标
②如何定位最大文件目录
输入命令: cd / 进入根目录
输入命令:du -h --max-depth=1 寻找当前目录,哪个文件夹占用空间最大
③如何定位最大文件
输入命令:ls -Sl将文件以从大到小顺序展现
[root@localhost ~]# ls -Sl
总用量 12
-rw-r--r--. 1 root root 2069 5月 10 16:11 initial-setup-ks.cfg
-rw-------. 1 root root 2041 5月 10 16:01 anaconda-ks.cfg
-rw-r--r--. 1 root root 1213 5月 24 13:26 ks.cfg
drwxr-xr-x. 2 root root 24 5月 13 11:57 RECOVERED_FILES
drwxr-xr-x. 2 root root 6 5月 10 16:11 公共
drwxr-xr-x. 2 root root 6 5月 10 16:11 模板
drwxr-xr-x. 2 root root 6 5月 10 16:11 视频
drwxr-xr-x. 2 root root 6 5月 10 16:11 图片
drwxr-xr-x. 2 root root 6 5月 10 16:11 文档
drwxr-xr-x. 2 root root 6 5月 10 16:11 下载
drwxr-xr-x. 2 root root 6 5月 10 16:11 音乐
drwxr-xr-x. 2 root root 6 5月 10 16:11 桌面
最终定位相关日志文件
④确认文件未被占用
删除文件:rm –f 文件 但是,最好确认下是否要下载下来让开发人员分析日志
在Linux或系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。
输入命令:/usr/sbin/lsof | grep deleted 确认删除文件是否被占用
[root@localhost ~]# /usr/sbin/lsof | grep deleted
firewalld 804 root 8u REG 253,0 4096 11908607 /tmp/ffiUR0HQR (deleted)
gmain 804 949 root 8u REG 253,0 4096 11908607 /tmp/ffiUR0HQR (deleted)
tuned 1122 root 7u REG 253,0 4096 8388681 /tmp/ffifijTWq (deleted)
gmain 1122 1228 root 7u REG 253,0 4096 8388681 /tmp/ffifijTWq (deleted)
tuned 1122 1230 root 7u REG 253,0 4096 8388681 /tmp/ffifijTWq (deleted)
tuned 1122 1231 root 7u REG 253,0 4096 8388681 /tmp/ffifijTWq (deleted)
tuned 1122 1233 root 7u REG 253,0 4096 8388681 /tmp/ffifijTWq (deleted)
确实被占用,根据第二列提供的pid,输入命令:kill -9 pid 杀掉进程。
再次输入命令:df –lh
⑤硬盘空间满,删除了大文件之后空间没有释放
1)使用lsof | grep deleted查看,发现被删除文件仍在占用着
2)使用kill -9 pid 终止以上进程,再用df -h检查空间情况,发现空间已经完全被释放
(4)cpu满了
① 使用top命令查询cpu的使用情况,同时用P按使用cpu排序
ps -aux查看cpu使用
③ 使用lsof -p对应进程号或者-i对应端口号,查看使cpu过高的文件情况
④ kill 杀死没有用的进程
(5)内存满了
① 使用命令:free -m
② 配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:
0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓存
[root@localhost /]# cat /proc/sys/vm/drop_caches
0
③ 释放所有缓存,就输入下面的命令:
echo 3 > /proc/sys/vm/drop_caches
④ 清理缓存:
echo 1 > /proc/sys/vm/drop_caches
2.为什么使用ab命令进行网络传输数据的压力测试
(1) 命令描述
ab命令全称为:Apache bench 。是Apache自带的压力测试工具。ab命令非常实用,它不仅可以对Apache服务器进行网站访问压力测试,也可以对其它类型的服务器进行压力测试。可以测试安装Web服务器每秒种处理的HTTP请求。
(2)命令作用
ab命令会创建多个并发线程,模拟多个访问者同时对某一个url地址进行访问,测试的目标基于url。安装httpd时,ab命令也会被同时安装,所以不需要再另行安装。
ab命令缺点会给服务器造成非常高的负载,可能会造成目标服务器资源耗尽,严重时可能会导致死机,而且它没有图形化结果不能监控,所以只能用作临时紧急任务和简单的测试。
yum install -y httpd
(3) 命令参数
语法:
ab[选项][s] http://主机名:端口/路径
常用选项:
表2 ab命令选项
选项 | 功能 |
-A | 指定连接服务器的基本的认证凭据 |
-c | 指定一次向服务器发出请求数 |
-C | 添加cookie |
-g | 将测试结果输出为“gnuolot”文件 |
-h | 显示帮助信息 |
-H | 为请求追加一个额外的头 |
-i | 使用“head”请求方式 |
-k | 激活HTTP中的“keepAlive”特性 |
-n | 指定测试会话使用的请求数 |
-p | 指定包含数据的文件 |
-q | 不显示进度百分比 |
-T | 使用POST数据时,设置内容类型头 |
-v | 设置详细模式等级 |
-w | 以HTML表格方式打印结果 |
-x | 以表格方式输出时,设置表格的属性 |
-X | 使用指定的代理服务器发送请求 |
-y | 以表格方式输出时,设置表格属性 |
(4)实用实例
使用ab命令测试web服务器:
ab https://www.baidu.com
向web服务器发送指定并发指定次数的请求测试:
ab -n 1000 -c 100 https://www.baidu.com
3.ab命令发送请求测试失败
(1)原因分析:
① 对方的域名确实不通;
② 本机自己开了防火墙;
③ 对方开了防火墙;
④ 本机的etc/hosts 里面没有配置本机的机器名和ip
(2)解决方法:PC1关闭防火墙
(3)如遇到1个月都正常,然后突然几天不正常
etc/hosts 在不配置的时候是间断性的。修改方案如下:
在结尾加上:机器名和机器ip(用空格隔开)
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 localhost 192.168.204.200
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
四、总结
1.sar命令
sar命令功能强大,在很多方面方面都可以使用sar来查询到我们需要的数据。
CPU瓶颈: sar -u 和sar -q等
内存瓶颈:sar -B、sar -r、sar -W等
I/O瓶颈:sar -b、sar -u、sar -d 等
网络瓶颈:sar -n DEV
2.ab命令
ab命令不仅可以对Apache服务器进行网站访问压力测试,也可以对其它类型的服务器进行压力测试。
3.五大负载
CPU负载、内存负载、磁盘负载、I/O负载、网络流量负载