RHCA rh442 001 调优本质 调优方法 监控
调优是一种感知
调优按照成本和性能
一.架构及调优
二.代码及调优
三.配置类调优
从调优效果和成本成正比
设计电商,日访问百万级,未来可能千万级
数据库 系统 服务器多少台 缓存 appache,nginx选什么 负载均衡用什么 七层怎么设计..... (可不可以线性扩容?) 一百万预算
架构级
12306最复杂
电商可以充分利用缓存技术。电商有10000件商品,卖了9000。还剩1000,电商也可也不用着急。慢慢的更新
12306每一天,每一趟车,每一个座位都是唯一的。不能利用缓存机制
12306重新做了架构设计
12306客户做10次查询,才会有一次支付,查询是大头。他们把架构切分
微服务化,把服务分拆。后台有很多台服务器
电商卖两件退两件前台完全不会受影响,数据库也不用马上更新
腾讯视频
几百万人看热门高清视频,需要几百g带宽,不会出现卡,以及还会出现缓存
百分之90的流量来自cdn缓存。分散在各地机房分担业务
架构该如何设计?
房子该怎么设计才好
代码级
你把sql语句写成循环
把简单代码写的复杂
配置级
磁盘 三种调度算法
deadline最终期限(小IO) cfq完全公平原则(不好不坏) noop无调优 as适合于大IO的算法
守门员站中间,对手向哪里踢?
站中间就是折中,所以才需要我们调优
让数据库就跑在这个八个cpu上,另外八个跑其他业务
利用缓存,否则数据库来回在16个cpu上跑失去缓存意义
有些多喝热水
有些病吃个药就好
有些需要大手术
考试有东西所以不难,没东西rh442最难
rh442 不用死记硬背,要理解
scale 天平,磅秤;天平盘 进制位
学会使用计算器
bc
未保留小数
scale可以保留小数,不是四舍五入,是直接去掉的那种
^20在不同的保留小数值上,误差会变大
单位
KB:1000为换算单元
KiBi:1024为换算单位
Kb: bit位 需要/8
KB:Btye
单位换算,非常简单
调优的方法 (还有许多)
grub2
vi /etc/default/grub
改了之后
[root@localhost boot]# grub2-mkconfig -o /boot/grub2/grub.cfg
通过重新给值改变内核参数
[root@localhost boot]# vi config-4.18.0-193.el8.x86_64
告诉你我打开了哪些功能,他只是告诉你,改成n也没用
编译内核的时候保存你的哪些选项
改功能重新编译内核工作量就大了
sysctl
除了grub2还可以
vim /etc/sysctl.conf
参数写在这个里面,下次开机就可以读到
sysctl -a 列出可调优参数
sysctl改的参数在 /proc/sys
可以通过echo调优,立即生效。修改内存中数据,临时有效
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
直接-p读一遍文件
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_use_pmtu = 0
改成0再读
系统启动会读sysctl.conf
[root@localhost ~]# sysctl -a | wc -l
1248
老师怎么有2204个我才1248个
proc进程
proc下的数字都是进程号
对进程调优,就是对文件夹调优
sys目录
cd /sys/ 设备、总线、模块相关
以上都是内存中
立即生效,重启可能就不生效
将所有命令写成一个服务,开机运行服务
[root@localhost ~]# vi /etc/rc.local
命令每次开机都启动,可以写在这里面
[root@localhost /]# cd /etc/rc.d/
[root@localhost rc.d]# ls
init.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local
[root@localhost rc.d]# ll
total 4
drwxr-xr-x. 2 root root 37 Jun 22 20:06 init.d
drwxr-xr-x. 2 root root 6 Sep 10 2018 rc0.d
drwxr-xr-x. 2 root root 6 Sep 10 2018 rc1.d
drwxr-xr-x. 2 root root 6 Sep 10 2018 rc2.d
drwxr-xr-x. 2 root root 6 Sep 10 2018 rc3.d
drwxr-xr-x. 2 root root 6 Sep 10 2018 rc4.d
drwxr-xr-x. 2 root root 6 Sep 10 2018 rc5.d
drwxr-xr-x. 2 root root 6 Sep 10 2018 rc6.d
-rw-r--r--. 1 root root 484 Jun 23 15:37 rc.local
[root@localhost rc.d]#
得给rc.local执行权限
以服务形式启动
[root@localhost system]# vim /usr/lib/systemd/system/tcsd.service
模仿
[Unit]
Description=TCG Core Services Daemon
[Service]
Type=forking
ExecStart=/sbin/tcsd
[Install]
WantedBy=multi-user.target
[root@localhost ~]# cp realtime /usr/local/bin/
[root@localhost ~]# cd /usr/lib/systemd/system/
[root@localhost system]# pwd
/usr/lib/systemd/system
[root@localhost system]# cat realtime.service
[Unit]
Description=Realtime process
[Service]
Type=forking
ExecStart=/usr/local/bin/realtime &
[Install]
WantedBy=multi-user.target
[root@localhost system]# systemctl daemon-reload
systemctl enable realtime.service
Created symlink /etc/systemd/system/multi-user.target.wants/realtime.service → /usr/lib/systemd/system/realtime.service.
照着其他服务写服务
加载服务时,可以读到/etc/systemd/system
bad-setting 可以systemctl status 查看更多信息
调优的功能
参数不知道什么意思
学会查帮助文档,里面有英文的参数解释
[root@localhost yum.repos.d]# yum list all | grep kernel-doc
kernel-doc.noarch 4.18.0-193.el8
[root@localhost yum.repos.d]# rpm -ql kernel-doc
查找他的所有文件
[root@localhost kernel-doc-4.18.0]# grep -irn ip_forward Documentation/
Documentation/s390/Debugging390.txt:1930:cat /proc/sys/net/ipv4/ip_forward
Documentation/s390/Debugging390.txt:1933:telling me ip_forwarding is not on to switch it on I can do
Documentation/s390/Debugging390.txt:1934:echo 1 > /proc/sys/net/ipv4/ip_forward
Documentation/s390/Debugging390.txt:1936:cat /proc/sys/net/ipv4/ip_forward
Documentation/virt/uml/UserModeLinux-HOWTO.txt:1311: bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
Documentation/virt/uml/UserModeLinux-HOWTO.txt:1830: host# echo 1 > /proc/sys/net/ipv4/ip_forward
Documentation/networking/ip-sysctl.txt:3:ip_forward - BOOLEAN
Documentation/networking/ip-sysctl.txt:46:ip_forward_use_pmtu - BOOLEAN
Documentation/networking/ip-sysctl.txt:84:ip_forward_update_priority - INTEGER
[root@localhost kernel-doc-4.18.0]# pwd
/usr/share/doc/kernel-doc-4.18.0
[root@localhost kernel-doc-4.18.0]#
[root@localhost kernel-doc-4.18.0]# vi Documentation/networking/ip-sysctl.txt
红帽7光盘里没有这个包
fat32 < 4G
应付光盘用户
[root@localhost tmp]# find /proc /sys -perm /200 -type f > /tmp/tunables
可调优文件
监控
监控为调优的基础。通过监控发现系统的瓶颈
CPU 内存 磁盘 网络 四大子系统
yum -y install sysstat
avg-cpu 和为100% idle为空闲率
iostat不加任何参数,自从系统启动以来我们所看到的状态,不是当前的结果
开机到现在的平均值
iostat 1 5 /dev/sda 一秒显示一次,连续显示五次
user level的使用百分比,应用程序消耗的比较多
system level 内核的级别消耗多
nice nice调cpu消耗资源
iowait io等待时间太长,系统瓶颈为磁盘
steal 虚拟化相关。因虚拟化的开销而消耗资源
idle 空闲率
kB_read/s kB_wrtn/s 每秒的值 kB_read kB_wrtn 总值
tps 每秒传输io请求数
小io与大io
每秒读和写加在一起 / tps 为每秒io大小
可以得知io大小,可以判定机器的io大小来判定调优思路
同样的资源,虚拟机差于物理机
地址转换带来的开销
虚拟化 地址转换
dd if=/dev/zero of=/dev/null &
cpu空消耗
dd 为内核提供命令所以 消耗的是system
一个dd消耗一个cpu
top看到的是一个满载的cpu
多个dd同时运行可以cpu负载均衡
进程轮询,负载均衡
但是chrt -f 之后就不行。因为指定了cpu的机制
抢占资源
chrt -f 10 dd if=/dev/zero of=/dev/null &
先进先出
测试硬盘
dd if=/dev/zero of=/tmp/test bs=4k count=102400 oflag=direct
跳过内存直接写硬盘 (通常情况下,写到缓存慢慢写进磁盘)
4k为小io场景
user space 用户空间
kernel space 内核空间 (装完内核就会有)
存储 RAID 10 块盘 到OS只能看到一块盘
RAID性能差,也许是其中某一块盘有问题
可以进入到存储底层的OS去看
iostat -x 可以看到具体情况
svctm:IO平均服务时间
总结
调优本质 调优难。综合性很强,上层应用,底层原理
调优方法
换算单位
iostat