磁盘这玩意儿,即使不作为一个开发人员我们也会经常跟它打交道。比如你家里的台式机,或者拿来办公的电脑,再比如你装个操作系统,会涉及到对磁盘进行分区。 而作为开发人员,自然更加需要关注磁盘。 平时你开发的代码会暂存在磁盘上;开发中用的最多的数据库 MySQL,其数据是持久化到磁盘中的;Redis 的持久化数据是落到磁盘的;Zookeeper 内存中的数据、事务日志、快照会持久化到磁盘;像 RocketMQ 我们可能听过,磁盘 IO 慢,为什么?我们可能听过,磁盘顺序 IO 会快些,为什么?我们可能听过磁盘的顺序 IO 甚至比内存随机 IO 要快,为什么? 这实际上就是数据被持久化进了磁盘,下次需要文件时再从磁盘中取出来。 这个存、取的过程其实对我们完全无感知的,我们就知道装机的时候安了一块硬盘,其他的啥也不知道。 磁盘结构 那磁盘里究竟长啥样呢? 磁盘性能 了解完一些简单的原理之后,我们终于可以来了解磁盘性能相关的问题了,我们会深入的分析为什么磁盘 IO 是个非常昂贵的操作。 现在思考一个问题,我们要查询数据,底层会怎么做?
1、TOP命令查看CPU是否长时间等待IO [root@localhost ~]# top %wa超过30%,说明IO压力很大 2、iostat命令查看磁盘工作时长占比 [root@localhost iostat -x 1 //1表示1秒刷新一次 3、pidstat命令查看当前进行IO的进程 [root@localhost ~]# pidstat -d 1 4、dd测试磁盘的读写速度 [root@localhost ~]# time dd if=/dev/vdb1 of=/dev/null bs=8k count=30000 [root@localhost ~]# time dd if=/dev/zero of=test.txt bs=8k count=300000 time命令用于输出整条语句的执行所花费的时间(real/user/sys那部份是time的输出)。 /dev/zero也是一个模拟设备用于产生空字节并不真正进行IO,所以第一条命令相当天测试当前文件夹对应的磁盘的写入性能(711MB/s)。
线上一台Linux服务器最近经常磁盘根分区满告警, 但不是普通的日志文件或数据文件过多过大,现象如下: 1)执行“df -h”查看各分区空间的使用情况 [root@XEN64 print $2}'`;for pid in $pids; do lsof -p $pid|grep del; done stati 28885 root 1w REG 8,1 5969132048 409096 /tmp/process_monitor-root.log (deleted) stati 28885 root 2w REG 8,1 5969132048 409096 /tmp/process_monitor-root.log (deleted) stati 28885 root 3u REG 8,4 5969132048 409096 /tmp/process_monitor-root.log (deleted) consumer 29756 root 2w REG 8,1
官网地址:https://wiztreefree.com 一款磁盘占用分析工具,速度极快,能够快速分析出磁盘中大文件的位置,十分推荐使用。 通过它清晰直观的可视化扫描结果(可按文件大小排序、修改时间排序),你能非常容易地揪出那些占用硬盘空间的“大流氓”——大型文件和文件夹,快速定位并删除它们,轻松搞定磁盘清理,腾出宝贵的硬盘空间。
今天借助overdisk这款免费小工具,让我们能直观的了解磁盘的空间情况。 下载地址 http://dl.dbank.com/c0cb7rz9d0 软件打开之后在左上角选择分区,几秒钟之后便会展现出磁盘空间饼状图。中间灰色区域是当前目录名,根目录时则是盘符。 鼠标悬停在相应色块则会显示文件夹占用空间等详细信息,单击则进入相应目录进行分析。右键点击可以在资源管理器中打开对应目录。
处置分析 症状:cp: 无法创建目录 ‘’: 设备上没有空间 sudo su cd / ls df -h 20210826141836766773.png 很明显,得从 / 根目录着手 du -h -- du 会显示指定的目录或文件所占用的磁盘空间。
磁盘I/O 操作系统每一层都存在I/O,CPU和内存都存在I/O,磁盘也有I/O,网络传输也有I/O,内存和CPU的I/O处理可能会产生磁盘I/O,上一篇我们已经分析磁盘进行I/O处理时的总体响应时间, Linux性能分析 Linux系统使用ps -o来查看某一个进程号为24150的java进程的缺页错误 ps -o min_flt,maj_flt,cmd,args,uid,gid 24150 ? sort命令来观察产生缺页错误最多的几个进程 watch -n 1 "ps -eo min_flt,maj_flt,cmd,args,uid,gid,pid | sort -nrk1 | head -n 8" 当这个值接近100%时,表示磁盘I/O已经饱和 sar(System ActivityReporter系统活动情况报告)命令是比较全面的分析系统性能的工具。 保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区) commit 这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值 内存分析
在磁盘阵列在线支持的过程中,会遇到一些常见的问题,现将有典型意义的问题分析如下 1.在服务器往盘阵中写入或读出数据时报错(如I/0 error,读写延缓失败等),或不能写入数据,或写入过程中出错 1) 这时一定要提醒用户先关闭服务器,再关闭盘阵,稍等片刻,等静电释放完毕后立即将SCSI线换接到in口 3) 查看通道速度: 正常情况下本公司盘阵的通道频率都为160MHZ(对应传输速率为320MB/s),如果发现磁盘通道频率为 ahead则是将本次要读的数据及下次可能会读到的数据一起放到缓存,读性能更好 写策略与infrotrend类似 5)条带大小的设置 控制器往盘阵中写数据或从中读数据都是以条带为单位进行的,条带大小范围从 (8KB 否则在用户端会出现多次停顿,因此,要求条带比较大,条带大小设置为64K或更大为宜,否则将影响性能 b)数据库文件访问:访问次数比较频繁,但每次I/O数据量不大,一般为一个表或某几个字段的修改,这时要求条带比较小,一般设置为8K 或更小为宜 在常见的盘阵问题在线支持中,遇到的另一个常见问题就是服务器识别不到盘阵,一般分析思路如下: 作为一个硬件设备,盘阵被服务器识别有两个层次, 第一是在服务器启动时,HBA卡会扫描硬件设备,这一过程与操作系统无关
前置操作 pve在初始化安装的时候,可以指定安装在哪块磁盘上(如果有多块磁盘的话),本例有2块,一块是 机械硬盘,一块是nvme的固态硬盘(小黑盘,贼快),在安装pve的时候我们选择 /dev/nvme 磁盘,即固态硬盘为系统盘所在的位置; 2. 分配机制 在安装的时候如果不手动指定分区大小,pve会自动进行分区 在pve节点上执行查看磁盘总体情况 lsblk image-3a8b4eaf54534b2c8818b2f04e98fea5.png ,其中 pve-root是作为 debain文件系统使用的逻辑磁盘,其余的是后来创建的虚拟机所占用的逻辑磁盘 扩容机制 由于命令显示只有物理磁盘(pv)和逻辑磁盘(lv),我们不能直观的看到其扩容机制. 实际上linux的文件系统是通过挂载磁盘分区或逻辑磁盘(lv)实现.又通过vg(磁盘分组)来实现,由vg这一层向上屏蔽了lv对物理磁盘(pv)的感知,固可以实现在上层(lv)不动的情况下进行vg下pv的调整
磁道扇区 上图中灰色的圆环就是磁道,磁道上的绿色的一段弧为扇区,扇区是磁盘读写的基本单位,通常为512字节。 柱面 每个磁道由外向里从 0 编号,不同盘面上编号相同的磁道组成的圆柱称为磁盘的柱面。 传送时间 也就是磁盘旋转读取数据的时间,一般也取决于旋转速度。 早期 CHS 这个三元组用 24 位来表示,前 10位 表示柱面,中间 8 位表示磁头,后面 6 位表示扇区,最大寻址空间为 $2^{10}\times2^8\times2^6\times512\div2 ^{30} = 2^3=8GB$。 所以磁盘出厂时一般都会做低级格式化,跳跃着将扇区编号,给检验传输等留出足够的时间。而高级格式化就是给磁盘分区制作文件系统。
问题背景我的C盘出现了空间不足的警告:于是我向WorkBuddy发出了指令:分析我C盘的磁盘空间占用情况实现过程1.初步尝试-使用PowerShellWorkBuddy首先尝试使用PowerShell命令分析磁盘 WorkBuddy生成可视化图表:使用图表对磁盘进行可视化分析,优化磁盘分析报告WorkBuddy立即创建了可视化脚本,使用matplotlib生成多种图表:python复制生成的可视化图表包含:图表类型用途说明饼图总体使用率直观显示已用 :50-65GB✅推荐工具WorkBuddy还推荐了几款实用的磁盘管理工具:WizTree-极速磁盘空间分析工具,秒速扫描整个磁盘CCleaner-系统清理工具,一键清理垃圾文件TreeSizeFree font.sans-serif']=['MicrosoftYaHei']plt.rcParams['axes.unicode_minus']=False#创建饼图fig,ax=plt.subplots(figsize=(8,6 :✅完整的磁盘空间分析✅可视化图表展示✅精美的HTML报告✅分优先级的清理建议✅预计可释放20-35GB空间工作效率提升:传统手动分析需要2-3小时,使用AI只需5分钟!
前言 不管是使用电脑还是维护服务器,都会遇到一个问题,磁盘空间不足。一般都是通过 du 命令来统计磁盘占用空间。 今天推荐一个非常好用的统计磁盘占用工具 ncdu。 ncdu 项目地址 https://github.com/rofl0r/ncdu ncdu 相对与 du 的优势 优势: 统计的目录以仪表盘展示 可以以磁盘占用大小或者文件名称排序 支持远程导出本地分析
如果数目较多,如 64,128 等,我们可以认为是大块 I/O;反之,如果很小,比如 4,8,我们就会认为是小块 I/O,实际上,在大块和小块 I/O 之间,没有明确的界限。 可以得到此时磁盘 hdisk2 吞吐量为 318M。 使用 nmon 收集一个时间段的数据,然后使用 nmon analyzer 进行分析,可以得出更为直接的图表: ? 将收集好的 nmon 文件使用 nmon analyzer 进行分析,得出如下报表: 图 2.nmon 图表显示磁盘性能 ? 我们才会从磁盘 I/O 方面分析 I/O 性能。 需要注意的是,下面几个参数的调整值,只是经验数值;对于不同的应用,不同的场景,应具体情况具体分析。
查看磁盘分区 fdisk -l image.png 详细解读 Disk /dev/sda:298.1 GiB,320072933376 字节,625142448 个扇区 磁盘名称sda 总容量为298.1G sda2 209719296 625141759 415422464 198.1G f W95 扩展 (LBA) /dev/sda3 2099200 209719295 207620096 99G 8e
今天给大家推荐一款关于磁盘整理相关的软件,非常实用方便,提高效率! ---- 工作学习之余,我们打游戏,听音乐,存照片都会占用我们电脑磁盘空间,从而导致磁盘空间不足,也不知道到底是哪些文件占用了大容量。 这时,我们就需要一款强大的工具来帮助我们整理分析磁盘,Tree Size就是这么一款工具,它具有以下功能: 1,整体展现磁盘空间占用情况 我们可以很客观地看到c盘的各个文件夹占用大小以及修改信息; ? 2,扫描磁盘或文件夹,分级展开目录 我们可以查看磁盘的占用信息,也可以查看任一文件夹的占用信息 ? 分级目录 3,视图多种形式展开文件 我们可以以多种形式展开磁盘的文件,采用视图展开,按照文件大小展开等等 ? 多形式展开 最后: 这个软件我日常工作学习都会使用到,对于清理磁盘来说,感觉非常良好!
3.RAID 的两个关键目标是提高数据可靠性和 I/O 性能,磁盘阵列中数据分散在多个磁盘中,然而对于计算机系统来说就像一个单独的磁盘。 在重建故障磁盘数据至新磁盘的过程中,系统可以继续正常运行,但是性能方面会有一定程度上的降低; 比如RAID 6可以在两块磁盘同时损坏下采用新磁盘进行替换,然后RAID会自动根据剩余磁盘中的数据和校验数据重建丢失的数据 JBOD 将多个物理磁盘串联起来,提供一个巨大的逻辑磁盘。 JBOD 的数据存放机制是由第一块磁盘开始按顺序往后存储,当前磁盘存储空间用完后,再依次往后面的磁盘存储数据。 缺点:写性能较RAID5稍差(与RAID5在性能与性价比方面的较大劣势),成本较RAID5高; 应用领域: RAID 6等级基本没有实际应用过,只是对更高级的数据的冗余进行的一种技术与思路上的尝试 8) RAID60是RAID 6与RAID 0的组合(先作RAID 6,再作RAID 0),换句话说就是对两组以上的RAID 6作Stripe访问;RAID 6至少需具备4颗硬盘,所以RAID 60的最小需求是8颗硬盘
前言 上篇写了 Spark Shuffle 内存分析 后,有不少人提出了疑问,大家也对如何落文件挺感兴趣的,所以这篇文章会详细介绍,Sort Based Shuffle Write 阶段是如何进行落磁盘的 流程分析 入口处: org.apache.spark.scheduler.ShuffleMapTask.runTask runTask对应的代码为: val manager = SparkEnv.get.shuffleManager writer.stop(success = true).get 这里manager 拿到的是 org.apache.spark.shuffle.sort.SortShuffleWriter 我们看他是如何拿到可以写磁盘的那个 我们分析的线路假设需要做mapSideCombine sorter = if (dep.mapSideCombine) { require(dep.aggregator.isDefined, " 文件被被记录在一个数组里: private val spills = new ArrayBuffer[SpilledFile] 迭代完一个task对应的partition数据后,会做merge操作,把磁盘上的
阅读完本篇文章,我期望你能够在磁盘遇到楼下这种情况的时候,能利用SpaceSniffer冷静分析是谁在搞事情,然后出台相应的措施。
线上的一个问题分析过程 上周五下午的时候,线上的一个服务器出了一个报警,报警内容是CPU利用率大于80%,持续时间五分钟。 于是我上去看了一眼监控,监控中可以看到的数据如下: ? ? 3、从磁盘的状态来看,磁盘的IO负载也是满的,是否产生了大量的慢日志,导致磁盘负载激增? 于是我查询了所有实例的慢日志文件增长情况,发现慢日志的几乎没有什么增长。这个问题就比较奇怪了。 得到的结果是他们正在对一个log库进行数据统计分析,所以将一个月的log进行了一下查询,同时反馈的信息还有,这个查询现在已经过了一个小时了,还没有得到结果。 可以看到,CPU、负载和磁盘使用率发生了一个比较明显的下降。 一点反思: 0、本例子中,CPU的升高和负载的升高其实是由磁盘的IO打满导致其他系统任务出现等待。 之所以能够写出这一篇文章,其实也是由于我有截取日志的习惯,所以提示大家在发现问题的时候,一定要保留现场,即使自己不能解决,也能够让其他人帮助自己进行分析和处理。
详细背景:技术分享 | 客户说 insert 慢,我该怎么办 2日志分析 2.1 慢日志分析 发现 MySQL 慢日志中记录的慢日志是一批一批地被记录,并不是实时被记录。 pages 2022-08-26T01:03:05.205966+08:00 0 [Note] [MY-011953] [InnoDB] Page cleaner took 10077ms to flush 8 pages 2022-08-26T23:11:08.958039+08:00 0 [Note] [MY-011953] [InnoDB] Page cleaner took 9625ms to flush 8 pages 2022-08-26T23:32:53.922992+08:00 0 [Note] [MY-011953] [InnoDB] Page cleaner took 9886ms to flush 8 3持续观测磁盘 IO 通过 iostat 命令看到磁盘确实会出现一段时间的 IO 异常(此时磁盘 IO 使用基本为 0,但是磁盘使用率为 100%)。