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。我不知道带了或不带有什么区别。英文帮助看懂了,但是不知道如何实施效果

RHCA rh442 002 监控工具 脏页 块设备名 缓存的更多相关文章

  1. 面试题:了解MySQL的Flush-List吗?顺便说一下脏页的落盘机制!(文末送书)

    Hi,大家好!我是白日梦! 今天我要跟你分享的MySQL话题是:"了解Flush-List吗?顺便说一下脏页的落盘机制!(文末送书)" 本文是MySQL专题的第 8 篇,共110篇 ...

  2. InnoDB引擎之flush脏页

    利用 WAL 技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能,由此也带来了内存脏页的问题. 脏页会被后台线程自动 flush,也会由于数据页淘汰而触发 flush,而刷脏页的过程由于会占用 ...

  3. redis存在大量脏页问题的追查记录

    from:https://www.zybuluo.com/SailorXiao/note/136014 case现场 线上发现一台机器内存负载很重,top后发现一个redis进程占了大量的内存,TOP ...

  4. Innodb刷脏页技术深度挖掘

    DBA某数据库集群每日17:00左右会出现一个性能陡降的现象,在10~20秒内主库出现大量慢查询.这些查询本身没有性能问题,也没有任何关联,可以认为是由于数据库系统负载较重,由于并发导致的慢查询.通过 ...

  5. 【MySQL 读书笔记】SQL 刷脏页可能造成数据库抖动

    开始今天读书笔记之前我觉得需要回顾一下当我们在更新一条数据的时候做了什么. 因为 WAL 技术的存在,所以当我们执行一条更新语句的时候是先写日志,后写磁盘的.当我们在内存中写入了 redolog 之后 ...

  6. MySQL:刷脏页

    1. 脏页,干净页 当内存数据页和磁盘数据页上的内容不一致时,我们称这个内存页为脏页: 内存数据写入磁盘后,内存页上的数据和磁盘页上的数据就一致了,我们称这个内存页为干净页. 2. 刷脏页的时机 2. ...

  7. Checkpoint--查看各DB上的脏页

    可以使用sys.dm_os_buffer_descriptors来看数据页在buffer pool中的状态,其中is_modified来标示数据页是否为脏页 --------------------- ...

  8. Mysql的刷脏页问题

    平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短. 当内存数据 ...

  9. MySQL中InnoDB脏页刷新机制Checkpoint

    我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页,这样就产生了脏页.既然有重做日志保证数据持久性,查询时也可以直接从缓冲池页中 ...

  10. InnoDB Redo Flush及脏页刷新机制深入分析

    概要: 我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页,这样就产生了脏页.既然有重做日志保证数据持久性,查询时也可以直接从缓 ...

随机推荐

  1. UIView AutoLayout WrapContent,UIview 实现自动包裹

    一.需求 实现一个UI组件,要求组件内部的内容变化的时候,内容需要同时产生变化 二.实现 效果: 一个三个元素的组件,两边固定大小,中间的Label内容会变化 实现的约束: 首先保证三个元素同时居中, ...

  2. nonatomic 带来的线程安全问题

    一.结论 一个对象对外暴露的读写属性,如果这个属性在多个线程中访问,一定会出现crash. 因此对外暴露的属性一定要考虑线程安全问题. 二.看下面的代码 下面的代码一定会crash,除非obj是ato ...

  3. 基本定时器TIM6实现精确延时

    1.基本定时器的特点 (1).16位自动重装载累加计数器 (2).16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1-65536之间的任意数值 !!!注意基本定时器只有向上计数模式,不要被 ...

  4. webpack 路径别名与导入后缀省略

    // 解析模块的规则 resolve: { // 配置解析模块路径别名:优点简写路径,缺点路径没有提示 alias: { // 定义一个@变量,可在import引入时使用 '@': path.reso ...

  5. vue Ref 动态组件 keeplive

    ref被用来给元素或子组件注册引用信息.引用信息将会注册在父组件的 $refs 对象上.如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素:如果用在子组件上,引用就指向组件实例 # 普通d ...

  6. 用 Sentence Transformers v3 训练和微调嵌入模型

    Sentence Transformers 是一个 Python 库,用于使用和训练各种应用的嵌入模型,例如检索增强生成 (RAG).语义搜索.语义文本相似度.释义挖掘 (paraphrase min ...

  7. 使用优启通 制作 WIN PE U盘时报BOOT.WIM 有毒的解决方法

    使用优启通 制作 WIN PE U盘时报BOOT.WIM 有毒的解决方法 1.打开"Windows Defender". 2.点击"病毒和威胁防护". 3.点击 ...

  8. 漫画图解 Go 并发编程之:Channel

    当谈到并发时,许多编程语言都采用共享内存/状态模型.然而,Go 通过实现 Communicating Sequential Processes(CSP)而与众不同.在 CSP 中,程序由不共享状态的并 ...

  9. mybatis查询参数Set遍历查询

    #sqlmapper <resultMap id="BaseResultMap" type="com.LogEntity" > <result ...

  10. lovelive - μ's

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` lovelive - μ's 日期:2017-12-16 ...