Linux系统调优相关工具

文章概览:

1
2
3
4
5
6
1、系统调优概述
2、查看CPU负载相关工具
3、通过/proc目录下的文件了解系统实时运行状态
4、查看Memory运行状态相关工具
5、查看IO运行状态相关工具
6、查看Network运行状态相关工具

说明:

1
2
1)本文只是说明一些系统调优的相关查看方式,想要调优,肯定要先学会怎么查看系统资源使用情况
2)可能有些专业术语用的不是很好,请见谅

系统调优概述

1
2
3
4
系统调优:
1)系统的运行状况:CPU->MEM->DISK->NETWORK->应用程序调优
2)分析是否有瓶颈(依据当前应用需求)
3)调优(把错误的调正确)

性能优化就是找到系统处理中的瓶颈以及去除这些瓶颈的过程,就是对OS各个子系统调整到一种平衡的定义,这些子系统之间是相互彼此依赖的,任何一个高负载都会导致其它子系统出现问题,这些子系统包括:

1
2
3
4
CPU
Memory
IO
Network

比如:

1
2
3
1)大量的网页调入请求导致内存队列的拥堵
2)网卡的大吞吐量可能导致更多的CPU开销
3)大量来自内存的磁盘写请求可能导致更多的CPU以及IO问题

所以,要对一个系统进行优化,查找瓶颈来自哪个方面是关键,虽然看似是某一个子系统出现问题,其实有可能是别的子系统导致的。调优就像医生看病,因此需要你对服务器所有地方都了解清楚。

一、CPU负载相关查看工具

1、uptime命令

PjmWRJ.png

内容详解:

PjneLq.png

注:负载的数字记录跟你的处理器有关,单核1分钟的系统平均负载不要超过3

如果服务器的CPU为1核,则load average中的数字>=3时,负载过高,如果服务器的CPU为4核,则load average中的数字>=12时,负载过高。

2、ps命令

1
ps -aux

主要进程状态:

1
2
3
4
5
S -------睡眠
R -------正在运行或准备运行
Z -------僵尸进程
D -------不可终端的睡眠进程
L -------内存锁,防止交换(解决swap信息泄露,锁住内存,防止交换)

辅进程状态:

1
2
3
4
5
s -------父进程,引导进程
+ -------前台进程组,表示是一组进程,而不是一个进程
l -------进程,线程
< -------高级优先进程
N-------低优先级进程

PjnQFU.png

命令使用:

1
2
3
4
5
6
7
8
1)内存使用率情况降序排序
ps -aux --sort -rss | more 或者ps -aux --sort -rss > a.log

2)内存使用率情况升序排序
ps -aux --sort rss | more 或者ps -aux --sort rss > a.log

3)cpu使用率降序排序
ps -aux --sort -pcpu | more或者ps -aux --sort -pcpu > a.log

3、top命令(该命令本身很消耗cpu)

1
2
3
4
5
6
7
[root@test02centos6 ~]# top

top - 15:13:23 up 5:44, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 77 total, 1 running, 76 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1914496k total, 393688k used, 1520808k free, 8032k buffers
Swap: 2047992k total, 0k used, 2047992k free, 90960k cached

参数说明:

1
2
3
4
5
6
7
8
0.0%us			#用户态
0.0%sy #内核态
0.0%ni #优先级切换
100.0%id #空闲cpu
0.0%wa #等待,IO输入输出等待
0.0%hi #硬中断
0.0%si #软中断
0.0%st #cpu偷窃时间,如开启虚拟机会出现这种情况

排序方法:

1
2
3
4
5
1)输入1		#显示所有CPU使用情况
2)输入M #内存使用率降序排序
3)输入P #cpu使用率降序排序
4)shift+< #前后翻页,查看进程
5)shift+> #前后翻页,查看进程

4、top -p 进程号(动态查看某个或多个进程)

先查看进程号,比如nginx:

1
2
3
ps -aux | grep nginx

root 1325 0.0 0.0 45252 1212 ? Ss 09:28 0:00 nginx:

动态查看:

1
top -p 1325

Pjn1W4.png

二、Memory负载相关查看工具

1、free -m或者free -g或者free -h(-h在centos7上使用,6没有)

Pjn8SJ.png

2、通过/proc文件夹,查看非活跃的内存

1
2
3
4
cat /proc/meminfo

Active: 19785184 kB #活跃内存,指进程一直读写的内存空间
Inactive: 9791680 kB #非活跃内存

注:当内存不够用时,kernel总是把不活跃的内存交换到swap空间,如果Inactive内存多时,加swap空间可以解决问题,而Active多时,则考虑加内存

3、vmstat(查看内存及系统整体运行状态)

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,MEM内存使用,VMSwap虚拟交换内存交换情况,IO读写情况。

使用vmstat可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率,比top命令节省资源。

注:当机器运行比较慢时,建议使用vmstat查看运行状态,不需要使用top,因为top使用资源比较多。

PjnGl9.png

以上参数说明:

PjnJyR.png

三、IO调优相关查看工具

通过iostat命令查看IO是否存在瓶颈

iostat可以显示CPU和I/O系统的负载情况及每个磁盘分区的读写状态信息,从而知道我们系统IO是否存在问题

iostat命令安装过程省略

1
2
rpm -qf `which iostat`
sysstat-10.1.5-11.el7.x86_64

PjnYO1.png

注释:

1
2
3
4
5
6
avg-cpu段:
%user:在用户级别运行所使用的CPU百分比
%nice:nice操作所使用的CPU百分比
%sys:在系统级别kernel运行所使用CPU百分比
%iowait:CPU等待硬件I/O时,所占用百分比
%idle:CPU空闲时间的百分比

1
2
3
4
5
6
Device段:
tps:每秒钟发送到的I/O请求数
kB_read/s:每秒读取的block数,这里的block,指的是扇区数,一个扇区大小:512B
kB_wrtn/s:每秒写入的block数,这里的block,指的是扇区数,一个扇区大小:512B
kB_read:读取的block总数,这里的block,指的是扇区数,一个扇区大小:512B
kB_wrtn:写入的block总数,这里的block,指的是扇区数,一个扇区大小:512B

iostat各个参数说明:

1
2
3
4
5
-c			#仅显示CPU统计信息,与-d选项互斥
-d #仅显示磁盘统计信息,与-c选项互斥
-k #以k为单位显示每秒的磁盘请求数,默认单位块
-p+设备号 #用于显示块设备及系统分区的统计信息,与-x选项互斥
-x #输出扩展信息

iostat的使用:

1)显示每个分区读写速度
1
iostat -p vda –dk

PjnaTK.png

2)显示输出扩展信息
1
iostat -p vda -dk –x

PjnBfe.png

1
2
3
4
5
6
7
8
9
10
11
12
13
rrqm/s		#将读入请求合并后,每秒发送到设备的读入请求数
wrqm/s #将写入请求合并后,每秒发送到设备的写入请求数
r/s #每秒发送到设备的读入请求数
w/s #每秒发送到设备的写入请求数
rsec/s #每秒从设备读入的扇区数
wsec/s #每秒向设备写入的扇区数
rkB/s #每秒从设备读入的数据量,单位为k
wkB/s #每秒向设备写入的数据量,单位为k
avgrq-sz #发送到设备的请求的平均大小,单位是扇区
avgqu-sz #发送到设备的请求的平均队列长度
await #I/O请求平均执行时间,包括发送请求和执行的时间,单位是毫秒
svctm #发送到设备的I/O请求的平均执行时间,单位是毫秒
%util #在I/O请求发送到设备期间,占用cpu时间的百分比,用于显示设备的带宽利用率,当这个值接近100%时,表示设备带宽已经占满,I/O不够使用
3)每隔2秒显示一次设备统计信息,总共输出3次
1
iostat -p vda -dk -x 2 3

PjnrSH.png

通过iotop命令查看哪个进程使用磁盘读写最多

参数:

1
2
3
4
-o			#只显示在读写硬盘的程序
-d #设定显示时间间隔
不加参数 #动态显示所有进程使用磁盘的状态
退出按q或者ctrl+c
1
iotop -a -d 1

然后再打开另一个终端执行find /测试磁盘读

Pjny6A.png

接下来在另外一个终端再执行dd if=/dev/zero of=/a.txt bs=8k count=300000测试磁盘写

PjnRTf.png

四、Network负载相关查看工具

使用sar命令记录系统一段时间的运行状态

sar命令的常用格式:

1
2
sar [options] [-A] [-o file] t [n]
在命令行中,n和t两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有的参数,n为采样次数,是可选的,默认值是1。-o file表示将命令结果以二进制格式存放在文件中,file在此处不是关键字,是文件名。options为命令行选项。sar命令的选项很多,下面只列出常用选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-A:所有报告的总和
-n:网络接口的情况
-u:CPU利用率
-v:进程、I节点、文件和锁表状态
-d:硬盘使用报告
-r:查看内存
-g:串口I/O的情况
-b:缓冲区使用情况
-a:文件读写情况
-c:系统调用情况
-R:进程的活动情况
-y:终端设备活动情况
-w:系统交换活动
-o文件名:打印到屏幕并将采样结果以二进制形式存入当前目录下的文件中
-f文件名:查看之前保存的二进制文件
-P:查看cpu
-w:每秒上下文切换次数

例一:每2秒采样一次,连续采样5次,观察CPU使用情况,并将采样结果以二进制形式存入当前目录下的cpu.sar中

1
sar -u 2 5 -o cpu.sar

Pjnolj.png

查看该保存的二进制文件:

1
sar -f cpu.sar

其中,显示内容包括:

1
2
3
4
%user:CPU处在用户模式下的时间百分比
%system:CPU处在系统模式下的时间百分比
%iowait:CPU等待输入输出完成时间的百分比
%idel:cpu空闲时间百分比

在所有显示中,我们需要注意的是%iowait和%idel的值

1
2
3
1)如果%iowait的值过高,表示硬盘存在I/O瓶颈。
2)如果%idel值高,表示CPU较空闲,如果%idel值高但是系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。
3)%idel值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU

例二:查看sar的计划任务:

1
vim /etc/cron.d/sysstat

Pjn7Xn.png

例三:生成的日志位置

1
ls /var/log/sa/

Pjnbmq.png

注:只要安装了sar之后就会定期收集系统信息

例四:查看网络接口情况

1
sar -n DEV 1 4

PjnL7V.png

-n参数很有用,他有6个不同的开关:DEV | EDEV | NFS | NFSD | SOCK | ALL 。DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,NFS统计活动的NFS客户端的信息,NFSD统计NFS服务器的信息,SOCK显示套 接字信息,ALL显示所有5个开关。它们可以单独或者一起使用。我们现在要用的就是-n DEV了。

参数注释:

1
2
3
4
5
6
7
8
IFACE:LAN接口
rxpck/s:每秒钟接收的数据包
txpck/s:每秒钟发送的数据包
rxbyt/s:每秒钟接收的字节数
txbyt/s:每秒钟发送的字节数
rxcmp/s:每秒钟接收的压缩数据包
txcmp/s:每秒钟发送的压缩数据包
rxmcst/s:每秒钟接收的多播数据包

例五:查看内存

1
sar -r 1 4

PjnjtU.png

例六:根据sar的计划任务保存的日志读取一个时间段的监控信息

1)网络
1
sar -n DEV -s 15:00:00 -e 15:30:00 -f /var/log/sa/sa01

PjnvhF.png

2)CPU
1
sar -u -s 15:00:00 -e 15:30:00 -f /var/log/sa/sa01

Pjnzp4.png

3)硬盘
1
sar -d -s 15:00:00 -e 15:30:00 -f /var/log/sa/sa01

PjuS1J.png

4)内存
1
sar -r -s 15:00:00 -e 15:30:00 -f /var/log/sa/sa01

Pju9XR.png

博主QQ:1012405802
技术交流QQ群:830339411
版权声明:网站内容有原创和转载,如有侵权,请联系删除,谢谢!!
感谢打赏,93bok因你们而精彩!!(支付宝支持花呗)
0%