Linux系统调优学习笔记 rhel8.0
思路:先找出系统瓶颈在哪,再进行调优,每一个调优参数既有优点又有缺点
调优逻辑性: 架构调优 硬件调优 代码优化 配置优化
最有效,成本贵,难实现 最常用,成本低,效果较差
调优对象: CPU 内存 磁盘 网络
调优单位:
KB Byte KB 1000
Kbps bit KiB 1024
================================================================
对系统资源进行监控的常用手段:
进程监控 ps
ps axo 显示进程的特定字段
案例1: 将系统中的进程按内存的使用率排序
ps aux |more
用户 进程ID CPU 内存 虚拟内存 物理内存 伪终端 状态 开始时间
VSZ 虚拟内存 :应用程序运行时申请使用的内存
RSS 物理内存: 服务器分配给应用程序的内存
TTY 伪终端 tty1~6 服务器真实存在的 tty0 远程登录的终端 tty? 系统进程,不属于任何终端
STAT :状态 S 休眠 R 运行中
======================================
top 指令:
ni 使用率 id 空闲率
CPU压测:
4vcpu 运行4个dd 进程 也不会死机,因为进程优先级一样,轮询使用CPU
kill 进程 : kill -15 4003 可以杀掉4003的进程 -9 强制杀掉 -15 平滑杀掉 killall dd 杀掉所有dd进程
jobs 查看运行的进程
判断系统CPU 是否繁忙 ,如果是4个CPU,若CPU1分钟内负载不大于4,则证明系统空闲
僵尸程序:父进程结束,子进程仍在运行 可以靠重启解决
==========================================================
iostat
需要安装 sysstat 的包
yum install sysstat
一个CPU在同一时刻,只能处理一个任务,偏控制
GPU:在同一个时刻,可以处理多个任务 ,偏计算
读缓存 buffer 当读取一个数据,这个数据默认会先读到内存中,再从内存中写入硬盘,同时保留在内存中,以便再次使用 ,释放读缓存不会丢数据!
[root@localhost yum.repos.d]# sysctl -w vm.drop_caches=3
vm.drop_caches = 3
观察一条命令执行所需时间
[root@localhost yum.repos.d]# time cp /var/ /tmp
cp: -r not specified; omitting directory '/var/'
real 0m0.004s
user 0m0.000s
sys 0m0.002s
watch -n 1 "cp -r /var /tmp" 每秒观察命令的执行情况
写缓存 dirty page
Dirty 脏数据 脏页 内存最基本单位 Page 文件系统 block size
Page size : X86 4096Byte
在内存中已经修改的数据,还未写入硬盘,这样的数据如果掉电,会丢失
#sync 强制将脏页写入硬盘 写缓存
查看Dirtypage的老化时间
[root@localhost yum.repos.d]# sysctl -a |grep dirty
vm.dirty_expire_centisecs = 3000 单位是百分之一秒 这里是30s老化
================================
回写: 内存中的数据先写入缓存,经过IO整合后再写入硬盘,适用于随机小IO的场景,写性能好,但是数据安全性差,可能丢数据
透写:内存中的数据直接写入硬盘 ,适用于顺序大IO的业务场景,数据安全性高,但是写性能较差
案例:后端连接的存储,突然某一时刻写性能突然下降,可能是存储的BBU没电导致回写变成了透写方式
iostate 不加参数显示系统开机以来的平均值
tps: 每秒传输的IO请求数量
nice: 跳进程优先级的参数 -20~19 数字越小优先级越大 renice 调正在运行的进程的优先级
iostat 1 20 查看近20次IO 1s显示一次,连续显示20次
dd if=/dev/zero of=/tmp/test2 bs=10M count=200 oflag=direct
测试写入的是大IO还是小IO