RHCA rh442 002 监控工具 脏页 块设备名 缓存

sar

看某一个时间的数据

sar -d 1 5 与iostat类似
计算机识别设备按编号识别
0-15预留出 8 为iscsi设备

做一个块设备名

名字不重要是给人看的,重要的是编号 8 17(主编号 次编号),这是设备看的

areq-sz:加到设备上I/O请求平均大小(以字节为大小)

aqu-sz:加到设备上请求长度的平均值

await:加到设备上I/O请求的平均响应时间,这个时间包括了请求处于等待队列中的时间

%util:加到设备上I/O请求所用的时间百分比,对于串行设备,接近100%意味着设备出现了性能瓶颈,但是对于并行设备比如RAID或者SSD,这个值实际上并不能反映出设备的极限

vda为虚拟化磁盘 virshIO 252,0
cdrom 主编号就是11开头

sar -d -p 1 5
这个-p就为设备名输出


source /root/.bashrc
默认12小时制,看着不舒服
LANG=C sar


看cpu -C

vda这块硬盘负载最高是什么时候

两个窗口

先执行

[root@servera ~]# sar -d -p 1 50 |  grep vda &>> /root/sar-disk.log

然后

[root@servera ~]# rm -rf /tmp/*
[root@servera ~]# 
[root@servera ~]# cp -rf /var/ /tmp/ & cp -r /etc/ /tmp/ & dd if=/dev/zero of=/tmp/test1 bs=256K count=4000 oflag=direct
[3] 1346
[4] 1347
4000+0 records in
4000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 11.1474 s, 94.1 MB/s
[3]   Done                    cp -i -rf /var/ /tmp/
[4]-  Done                    cp -i -r /etc/ /tmp/
[root@servera ~]# sync
[root@servera ~]# 

去掉文件中的最后一列平均值

[root@servera ~]# cat /root/sar-disk.log  | head -n -1  > /root/sar1.data
head -n  -1 为取反 1  不是head -n 1

得到最大读写量的时间

[root@servera ~]# cat /root/sar1.data    | awk '{ print ($4 + $5)/1024, $1 }' | sort -rn    

sar会实时更新var/log/sa,实时收集Linux状态

sar 会每10分钟更新/var/log/sa
根据日期命名文件
列如今天29
就会有sa29

[root@servera sa]# sar -f sa28 -d -p  -s 14:00:00 -e 15:00:20
看磁盘
[root@servera sa]# sar -f sa28 -C -p  -s 14:00:00 -e 15:00:20
看内存

更改默认十分钟

[root@servera sa]# cd /usr/lib/systemd/system
[root@servera system]# ls | grep time
chrony-dnssrv@.timer
dbus-org.freedesktop.timedate1.service
dnf-makecache.timer
fstrim.timer
insights-client.timer
mdadm-last-resort@.timer
mlocate-updatedb.timer
sysstat-collect.timer
sysstat-summary.timer
systemd-timedated.service
systemd-tmpfiles-clean.timer
timedatex.service
timers.target
timers.target.wants
time-sync.target
unbound-anchor.timer
user-runtime-dir@.service
[root@servera system]# 


[root@servera system]# cat sysstat-collect.timer 
# /usr/lib/systemd/system/sysstat-collect.timer
# (C) 2014 Tomasz Torcz <tomek@pipebreaker.pl>
#
# sysstat-11.7.3 systemd unit file:
#        Activates activity collector every 10 minutes

[Unit]
Description=Run system activity accounting tool every 10 minutes

[Timer]
OnCalendar=*:00/2

[Install]
WantedBy=sysstat.service
[root@servera system]# 

将10改成2

改变了服务的配置文件(只要改了类似这个目录下的配置文件)

[root@servera system]# pwd
/usr/lib/systemd/system

加载到磁盘里 (重读文件,reload。不然服务起不来)

[root@servera system]# systemctl daemon-reload 

[root@servera system]# systemctl restart sysstat-collect.timer 


-rw-r--r--. 1 root root 57132 Jun 28 19:46 sa28
[root@servera sa]# ll
total 60
-rw-r--r--. 1 root root 58608 Jun 28 19:48 sa28
[root@servera sa]# 

间隔两分钟一更新

sar每两分钟收集一次信息

free

[root@servera system]# free -m
            total        used        free      shared  buff/cache   available
Mem:           1829         195        1152          16         480        1469
Swap:             0           0           0

share 共享内存,多个进程使用同一个内存
buff/cache buff索引innode缓存 cache为block缓存 共480
available 可使用

buffer缓存: 当用户读取数据时。系统会将硬盘的数据读到内存中,当数据处理完成后,改数据继续保留在缓存中,供下次读取时调用,这样可以提升读性能


为什么考到redhat下面会比考到tmp下快
因为var被硬盘读到缓存,然后从缓存拷贝
第二次直接调用了缓存


当进行第一次拷贝时,buff/cache变大了
说明数据从硬盘拷到了缓存,下次再拷相同数据时,速度会变快

sysctl -w vm.drop_caches=3
清理缓存。1为清理buff,2为清理cache,3为全部

[root@servera system]# free -m
            total        used        free      shared  buff/cache   available
Mem:           1829         195        1153          16         480        1469
Swap:             0           0           0
[root@servera system]# sysctl -w vm.drop_caches=3
vm.drop_caches = 3
[root@servera system]# free -m
            total        used        free      shared  buff/cache   available
Mem:           1829         171        1539          16         117        1517
Swap:             0           0           0
[root@servera system]# 

sysctl -w vm.drop_caches=3
这个数值也可以通过echo
直接改 /proc/sys/vm/drop_caches
sysctl 只是方便你echo罢了

内存充足则buff/cache不清空
紧张就会自动清空
buff只是缓存,非正常关机,丢掉了就丢掉了

内存里有个叫dirty page:脏页
数据已经在内存中修改,但还未写入到硬盘的数据,一旦非正常关机,则数据丢失

执行

[root@servera system]# watch -n 1 'cat /proc/meminfo  | grep Dirty'                 

实时检查这个命令的结果


可以看到,我的cp命令已经执行完了
命令确实执行完了,只能说命令的结果已经写到内存中了,但并不表示写到了硬盘
我的脏页瞬间变大
如果在脏页没有变小时关机,你的脏页数据将会丢失。会丢失数据!
过一会儿,脏页变小、直到为0数据真正同步到了硬盘

sync会让你把内存的东西写到硬盘

默认数据写到内存中,脏页老化时间为30s
写入数据后30s才会把脏数据写入到硬盘

为什么不直接写硬盘呢
在内存中可以进行io聚合
写入内存的数据可能是随机的,在内存中经过一段时间,会将多个随机的数据聚合成连续的io,一并下发,提升写性能

经过内存,可以把不连续的数据变的连续,从而提升写性能。如果直接写硬盘,会将不连续的数据,多次写

内存对于小io更加重要,将小io聚合。不然磁盘多次读写小io吃不消

存储控制器 缓存
raid卡 缓存
硬盘 缓存
cpu 缓存硬盘
内存 缓存
数据经过缓存进行聚合

分布式存储
创建存储池 100块创建存储池 fusionstorage 必须给存储池配置缓存,如果存储池的硬盘是sas,则缓存必须是ssd或以上
如果存储池ssd硬盘,则缓存可以无或者nvme ssd
数据写进入先缓存,再存储池

存储案例

突然有一天,存储写性能变得很差,后来找原因,发现是存储的bbu故障了,后背电池单元,平时在充电状态,为什么bbu故障,导致存储写性能下降

默认存储缓存机制为透写,先写缓存,再写硬盘
透写:直接写硬盘

BBU故障:意味着没有后背电池,如果数据写入缓存,一旦掉电,数据丢失,为了数据的完整性,所以就牺牲了性能,从而存储自动将缓存机制改为透写

top

up值 已经开机了多少分钟
2 users 两个用户在使用
load average 平均负载率 1分钟,5分钟,15分钟 (图上可以看到 三个0.00,主要与cpu有关。)[web http一次连接消耗一些内存(可能耗内存不耗cpu)]

[root@servera ~]# lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2

如果load average超过你cpu的数量就比较高了,超出cpu数量就是不可能承受范围内
Tasks:所有的任务数
running:R 在运行进程
sleeping:I 休眠的进程 (无人使用为休眠,节省资源)
stopped:S 程序被暂停,系统有个进程被ctrl+z
zombie:Z 父进程死了,父子依赖关系无了。子进程既死不了,也用不了。
hi:硬中断 硬件相关
si:软中断 优先级 (被强占)
top 里按c 可以看到具体命令

将传统数据中心业务迁移到云上
各个厂商开发一些迁移工具将业务迁移到云上,甚至公有云,而且在迁移过程中,不能停止业务
在top里按c 可以知道迁移工具在干什么 (rsync 同步 + tar)
tar + rsync 同步到目标服务器
使用LiveCD Centos LiveCD 通过ISO启动服务器,配置ip地址等
手动迁移一定要用tar打包工具
保存文件权限时间戳

根 删除 修复 ?
通过集群的另外一台主机,tar打包把数据在救援模式下复制过去,救援模式支持网络

vmstat

[root@servera ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
2  0      0 1457824   2104 217368    0    0    17     3   51   42  1  2 97  0  0
[root@servera ~]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
2  0      0 1457904   2104 217408    0    0    17     3   51   42  1  2 97  0  0
0  0      0 1457784   2104 217408    0    0     0     0   72  118  0  0 100  0  0
0  0      0 1457784   2104 217408    0    0     0     0   59  108  0  0 100  0  0
0  0      0 1457784   2104 217408    0    0     0     0   58  106  0  0 100  0  0
0  0      0 1457784   2104 217408    0    0     0     0   54  103  0  0 100  0  0
[root@servera ~]# 

r 运行
b 阻塞
swap si so swap进swap出
system in cs 整体系统的上下文切换
context switch
psr 上下文切换,进程在多个cpu运行

[root@foundation0 ~]# watch -n 1 'ps axo %cpu,%mem,pid,comm,psr | grep -w  cp'


如果那个值一直变变变说明上下文切换频繁
taskset -p 0 command
指定命令只运行在一个cpu上
防止cpu因上下文切换过忙

-w:匹配整个单词,如果是字符串中包含这个单词,则不作匹配

pcp

[root@foundation0 ~]# yum -y install pcp-gui
[root@foundation0 ~]# systemctl start pmcd.service 
[root@foundation0 ~]# pminfo | wc -l
2051    
显示多少个参数可监控

[root@foundation0 ~]# pmval -s 5 disk.dev.write_bytes

metric:    disk.dev.write_bytes
host:      foundation0.ilt.example.com
semantics: cumulative counter (converting to rate)
units:     Kbyte (converting to Kbyte / sec)
samples:   5
interval:  1.00 sec

    sda         sdb    
    19.97        0.0    
    0.0         0.0    
    0.0         0.0    
    0.0         0.0    
    0.0         0.0    

[root@foundation0 ~]# pminfo -dt  disk.dev.write_bytes

disk.dev.write_bytes [per-disk count of bytes written]
    Data Type: 32-bit unsigned int  InDom: 60.1 0xf000001
    Semantics: counter  Units: Kbyte
查看disk.dev.write_bytes细节

图形化pminfo

测试


检查磁盘读写情况。另一边开始读写

.pcp看图形化结束时的结构

科学计数法那个奇怪的16进制给他换成浮点数,那个$0就是调用全部数字

存疑

当内存紧张时,更偏向释放内存,还是使用swap?

我man了一下sysctl 查看了一下-w。我不知道带了或不带有什么区别。英文帮助看懂了,但是不知道如何实施效果

posted @ 2022-06-29 09:47  supermao12  阅读(264)  评论(0编辑  收藏  举报