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