性能调优
性能调优主要包含三个方面,包括硬件、操作系统、应用程序这三大块。
硬件(cpu、内存、磁盘、网卡)
操作系统(进程、文件系统、内核…)
应用程序(nginx、mysql…)
如何进行性能调优
通过性能分析工具,为性能调优提供有效的性能监控数据,常用的工具(命令)如下:
vmstat、 htop、iostat #检测cpu的瓶颈
free、vmstat、smem #检测内存瓶颈
iostat、iotop #检测磁盘I/O瓶颈
netstat、mtr、traceroute #检测网络连通性以及带宽瓶颈
cpu性能调优工具:
vmstat工具:
vmstat是Virtual Memory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SJQKEvPm-1676343425791)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20230214094944441.png)]
Procs(进程):r: 运行队列中进程数量 b: 等待IO的进程数量
Memory(内存):swpd: 使用虚拟内存大小 free: 可用内存大小 buff: 用作缓冲的内存大小 cache: 用作缓存的内存大小
Swap:si: 每秒从交换区写到内存的大小 so: 每秒写入交换区的内存大小
IO:(现在的Linux版本块的大小为1024bytes)bi: 每秒读取的块数 bo: 每秒写入的块数系统: in: 每秒中断数,包括时钟中断 cs: 每秒上下文切换数。
CPU(以百分比表示):us: 用户进程执行时间(user time) sy: 系统进程执行时间(system time) id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 以百分比表示 wa: 等待IO时间。
内存评估工具:
free工具:free是指查看当前系统内存的使用情况,它显示系统中剩余及已用的物理内存和交换内存,以及共享内存和被核心使用的缓冲区。
每隔5秒打印一次,重复打印2次
total:是内存总大小
used:已经使用内存数,used = total - free - buffers - cache
free:未使用的空闲内存
shared:共享内存,大部分是tmpfs占用,tmpfs 就是内存实现的文件系统比如 /dev/shm
buff/cache: 缓冲、缓存区内存数,缓存在应用之中
available:真正剩余的可被程序应用的内存数
-h 以人类可读的方式输出统计结果
-t 使用该选项会多显示一行标题为Total的统计信息,该行统计的是(used、free、total的总和)此Total与total不同,
-o 禁止显示第二行的缓冲区调整值(-/+ buffers/cache)
-s 每个多少秒自动刷新结果
-c 与-s配合使用,控制刷新结果次数
-l 显示高低内存的统计详情
-a 显示可用内存
磁盘评估工具:
iostat工具:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y5FeAPrs-1676343425793)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20230214100257724.png)]
字段 说明
%user CPU处在用户模式下的时间百分比
%nice CPU处在带NICE值的用户模式下的时间百分比
%system CPU处在系统模式下的时间百分比
%iowait CPU等待输入输出完成时间的百分比
%steal 管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
%idle CPU空闲时间百分比
-c 显示cpu报告
-d 显示磁盘报告
-k 使用KB
-m 使用MB
-p 单个分区的统计信息
-t 时间戳输出
-x 扩展统计
-z 不显示空活动
网络性能评估工具
ping工具:
PING是一个网络工具,用来测试与网络主机俄连通性。PING通过发送ICMPECHO_REQUEST数据包到网络主机,并显示响应情况,程序会按时间和成功响应的次数估算丢失数据包率。
ping -dfnqrRv -c完成次数 -i间隔秒数 -I网络界面 -L前置载入 -p范本样式 -s数据包大小 -t存活数值主机名称或IP地址
-d:使用Socket的SO_DEBUG功能。
-f:极限检测,大量快速送网络封包给网络主机。
-n:只输出数值。
-q:不显示任何传送封包的信息,只显示最后结果。
-r:忽略普通Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
-R:记录路由过程。
-v:详细显示指令的执行过程。
-c:数目,指定要发送的IMCP数据包数量。
-i:秒数,设定发送网络数据包的间隔,默认一秒。
-I:指定网卡发送IMCP数据包。
-l:前置载入,指定发送IMCP数据包前,先行发出的数据包。
-p:范本样式,设置填满数据包的范本样式。
-s:字节数,指定发送数据字节数,预设值为56,加上8字节的ICMP头,一共是64字节ICMP数据包。
-t:存活数值,设置存活数值TTL大小。
系统性能综合监控工具
top工具:
top命令是Linux系统中常用的性能分析工具,可以实时地查看系统的运行情况,比如内存、CPU、负载以及各个进程的资源占用情况。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0HJg2wNI-1676343425794)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20230214101742712.png)]
第1行是任务队列信息,其参数如下:
05:43:27 | 表示当前时间 |
---|---|
up 4:52 | 系统运行时间 格式为时:分 |
2 users | 当前登录用户数 |
load average: 0.58, 0.41, 0.30 | 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 |
第2、3行是任务队列信息,其参数如下:
159 total | 进程总数 |
---|---|
1 running | 正在运行的进程数 |
158 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
37.0 us | 用户空间占用CPU百分比 |
3.7 sy | 内核空间占用CPU百分比 |
0.0 ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
59.3 id | 空闲CPU百分比 |
0.0 wa | 等待输入输出的CPU时间百分比 |
0.0 hi | 硬中断(Hardware IRQ)占用CPU的百分比 |
0.0 si | 软中断(Software Interrupts)占用CPU的百分比 |
第4、5行是任务队列信息,其参数如下:
KiB Mem: 1530752 total | 物理内存总量 |
---|---|
1481968 used | 使用的物理内存总量 |
48784 free | 空闲内存总量 |
70988 buffers(buff/cache) | 用作内核缓存的内存量 |
KiB Swap: 3905532 total | 交换区总量 |
267544 used | 使用的交换区总量 |
3637988 free | 空闲交换区总量 |
617312 cached Mem | 缓冲的交换区总量。 |
3156100 avail Mem | 代表可用于进程下一次分配的物理内存数量 |
内存调优机制(释放内存):
a)清理pagecache(页面缓存)
# echo 1 > /proc/sys/vm/drop_caches 或者 # sysctl -w vm.drop_caches=1
b)清理dentries(目录缓存)和inodes
# echo 2 > /proc/sys/vm/drop_caches 或者 # sysctl -w vm.drop_caches=2
c)清理pagecache、dentries和inodes
# echo 3 > /proc/sys/vm/drop_caches