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. nginx优化实践与验证

    nginx优化实践 实践场景1: 单台nginx 2核4G 实践场景2: 三台nginx 2核4G 压测工具:WRK 初始安装的nginx压测: yum install -y nginx 安装WRK压 ...

  2. 第一次线上 OOM 事故,竟和 where 1 = 1 有关

    这篇文章,聊聊一个大家经常使用的编程模式 :Mybatis +「where 1 = 1 」. 笔者人生第一次重大的线上事故 ,就是和使用了类似的编程模式 相关,所以印象极其深刻. 这几天在调试一段业务 ...

  3. Python中多线程的简单使用

    from threading import Timer import time def run1(): print(1) print(2) print(3) def run2(): print(&qu ...

  4. Vue简单自定义Canvas验证码组件。

    在您的Vue项目中,是否曾遇到过需要增加验证码来增强账户安全性的情况?这个Vue通用Canvas验证码组件!采用Canvas,实现了高度自定义和灵活的验证码生成方式,让您的网站或应用轻松应对各类验证码 ...

  5. 地址栏hash模式以?问号分割也可以分割的

    可以看到href里面hash没有? 但是还是以?分割了 就很不明白 但是我就indexof判断有没有? 再进行下一步逻辑 这里记录一下坑

  6. 随机化 base64 加密

    随机化 base64 加密 项目原址:Jeefy / jtim-enc · GitLab 技术 采用双重随机化技术. 第一重随机化是利用固定的随机种子改变 base64 解码的映射数组. 第二重随机化 ...

  7. 题目:SHMIP The subglacial hydrology model intercomparison Project

    SHMIP(冰下水文模型比较计划)是一个致力于解决冰下水文多种理论方法问题的项目.该计划通过构建一系列综合模拟实验,并对运行这些模拟的各参与模型的结果进行比较,以达到其目标.这将有助于潜在的模型用户更 ...

  8. == 和 equals 的区别是什么

    == : 它的作用是判断两个对象的地址是不是相等.即,判断两个对象是不是同一个对象.(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址) equals() : 它的作用也是判断两个 ...

  9. 安装nodejs易遇到的坑

    @ 目录 背景描述 流程步骤 小结 背景描述 我的服务器是centos7.9,打算先直接通过yum安装,但是yum不能指定node版本,我直接指定显示404找不到,然后我设置了下node下载的源,还是 ...

  10. Asp.net Core Flurl.Http 结合IHttpClientFactory管理HttpClient生命周期

    Asp.net Core, 在我用过的多种Http REST 客户端: RestSharp WebApiClient Refit Flurl 中,Flurl可以说是最符合我口味的,用起来那可真的顺滑无 ...