当前位置: 首页 > news >正文

《Linux从小白到高手》综合应用篇:深入理解Linux磁盘及IO优化

1. 前言

其实磁盘优化和IO优化,我在前面的其他Linux调优博文中已经讲述过或者涉及过了,但是太过零碎,所以本篇就来集中深入讨论下Linux磁盘和IO调优。

2.磁盘调优

结合我多年的经验,本人认为磁盘调优最重要的是读写性能的提升和冗余度两个方面(当然还有其他优化方法,但是效果不是那么明显,只是在某些方面有提升)。因为作为和内存相连,并且是存放大量数据的地方,读写和数据安全是最最重要的。

2.1 提升磁盘的读写性能

  1. 磁盘读写性能优化
    对于磁盘,最容易实现但也是最有效果的,就是利用硬盘发展技术,选择读写性能和可靠性更好的磁盘,比如固态硬盘(SSD),相较于传统的机械硬盘(HDD),SSD具有更高的读写速度和更低的访问延迟,是提升磁盘性能的首选,但是价格也会更贵。另外企业级磁盘驱动器也具有更高的性能和可靠性,适用于对读取和写入速度要求较高的场景。
  2. 使用RAID磁盘阵列技术:
    RAID(冗余阵列磁盘)是一种将多个磁盘组合成一个逻辑单元的多磁盘整合技术,可以同时提高磁盘的读写性能和数据冗余度。关于RAID,写一节会详细介绍下。
  3. 将磁盘分区对齐:
    磁盘分区对齐‌是指将分区的起始位置与硬盘物理层的页边界对齐。这种对齐可以显著提高数据访问的效率,因为硬盘在读写时是以页为单位进行的。如果分区没有对齐,可能会导致额外的读写操作,从而影响性能。特别是对于‌SSD,4K对齐可以显著提高读写速度并延长硬盘寿命。可以使用fdisk和parted命令来实现磁盘分区对齐(具体的操作不在本篇演示,有兴趣的家人们可以自行在虚拟机测试研究下,不难)。
    对于SSD,确保分区起始位置与硬盘物理扇区对齐(即4K对齐),可以避免读写操作跨多个存储单元,从而提高数据读写效率。
    4.文件系统选择与优化
    Linux主要的文件系统有以下类型:
    **EXT4:**是 Linux 系统中广泛使用的文件系统。它支持日志功能,能在系统崩溃后快速恢复文件系统的一致性。在挂载 EXT4 文件系统时,可以通过设置挂载选项来优化性能。例如,使用noatime选项可以避免每次访问文件时更新文件的访问时间,减少磁盘 I/O 操作。在/etc/fstab文件中,对于 EXT4 分区的挂载行可以添加noatime选项,像/dev/sda1 / ext4 defaults,noatime 0 0。
    **XFS:**对于处理大文件和高并发写入场景表现出色。它具有高效的日志机制和可扩展性。在创建 XFS 文件系统时,可以使用-f选项强制覆盖现有文件系统(需谨慎使用),如mkfs.xfs -f /dev/sda2。在挂载时,也可以设置一些参数,如logbufs来调整日志缓冲区大小,提高性能。
    **Btrfs:**提供了高级功能,如快照、压缩和数据冗余。通过使用mount命令挂载 Btrfs 文件系统时,可以启用压缩功能来减少磁盘空间占用,例如mount -o compress=zstd /dev/sda3 /btrfs_partition,其中zstd是一种高效的压缩算法。
  4. 文件系统参数调整:
    对于 EXT4 文件系统,可以通过tune2fs命令调整文件系统参数。例如,tune2fs -m 1 /dev/sda1可以将保留的文件系统块百分比设置为 1%,减少磁盘空间预留,释放更多空间用于存储数据。
    XFS 文件系统可以使用xfs_admin命令来调整一些参数。比如,通过xfs_admin -u [新的UUID] /dev/sda2可以修改文件系统的 UUID。
  5. 磁盘调度策略优化(这个我测试过,好像不怎么明显,有懂得大佬可以请教下):
    常见的磁盘调度算法:
    **CFQ(Completely Fair Queuing):**完全公平队列调度算法,将 I/O 请求按照进程进行公平排队,每个进程都能获得相对公平的磁盘 I/O 资源。它适用于多用户桌面系统和通用服务器场景。
    **NOOP(No Operation):**这是一种简单的电梯算法实现,基本没有对 I/O 请求进行复杂的排序,适合固态硬盘(SSD),因为 SSD 的随机 I/O 性能较好,不需要复杂的调度算法。
    **DEADLINE:**保证每个 I/O 请求在一定时间内得到服务,它对延迟敏感的应用比较友好,会优先处理接近截止时间的请求。
    了解磁盘调度算法:
    CFQ(Completely Fair Queuing):完全公平队列调度算法,将 I/O 请求按照进程进行公平排队,每个进程都能获得相对公平的磁盘 I/O 资源。它适用于多用户桌面系统和通用服务器场景。
    NOOP(No Operation):这是一种简单的电梯算法实现,基本没有对 I/O 请求进行复杂的排序,适合固态硬盘(SSD),因为 SSD 的随机 I/O 性能较好,不需要复杂的调度算法。
    DEADLINE:保证每个 I/O 请求在一定时间内得到服务,它对延迟敏感的应用比较友好,会优先处理接近截止时间的请求。
    修改磁盘调度算法:可以通过echo命令修改/sys/block/[磁盘设备名]/queue/scheduler文件的内容来选择调度算法。例如,要将磁盘设备sda的调度算法设置为 DEADLINE,可以使用
echo deadline > /sys/block/sda/queue/scheduler
  1. 磁盘缓存优化
    操作系统缓存:
    Linux 内核有页缓存(page cache)和块缓存(block cache)机制。页缓存用于缓存文件系统的页面,块缓存用于缓存磁盘块。可以通过调整/proc/sys/vm/dirty_ratio和/proc/sys/vm/dirty_background_ratio参数来控制磁盘写缓存。dirty_ratio表示当系统中脏页(已修改但未写入磁盘的页面)达到这个百分比时,系统会主动将脏页写入磁盘;dirty_background_ratio是在后台开始将脏页写入磁盘的阈值。这就意味着你要根据系统的具体情况来做出权衡,如果你的系统对查询性能和实时性要求很高,那就要尽量利用大内存,反之,如果你的内存是瓶颈资源,而且对实时性和查询性能要求不高,那就要多利用磁盘。例如,
echo 5 > /proc/sys/vm/dirty_background_ratio
echo 15 > /proc/sys/vm/dirty_ratio

磁盘硬件缓存:许多磁盘和存储设备本身带有缓存。对于有缓存的磁盘,可以通过磁盘制造商提供的工具或者设备的 BIOS/UEFI 来优化缓存设置。一些高端磁盘可以设置缓存的读写策略。

2.2 提升磁盘的冗余度

  1. RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列),是一种磁盘组合冗余技术,常见的raid有以下几种(关于Linux的磁盘raid创建后续我会专门博文介绍,这里重点介绍raid 01/raid5/raid10):
    RAID 0+1(但可理解为RAID 0与RAID 1的组合):
    工作原理:先将数据条带化分布在多个硬盘上(RAID 0),然后再对这些条带化的数据进行镜像成RAID 1。但实际操作中,这种组合方式并不常见,且可能带来复杂的管理和性能问题。
    性能:由于结合了RAID 0的高性能和RAID 1的数据冗余,具有较高的读写速度和数据安全性。
    冗余:提供数据冗余,但冗余度取决于具体的实现方式。
    磁盘空间使用率:较低,因为镜像会占用额外的磁盘空间。
    在这里插入图片描述
    RAID 5:
    工作原理:RAID 5结合了RAID 0的条带化技术和数据校验信息。它将数据和校验信息分散存储在多个硬盘上,当某个硬盘出现故障时,可以利用其他硬盘上的数据和校验信息来恢复丢失的数据。
    性能:RAID 5具有和RAID 0相近的数据读取速度,但写入速度稍慢,因为每次写入数据都需要计算和写入校验信息。然而,由于其提供了数据冗余和容错能力,这种性能上的折衷是可以接受的。
    冗余:允许一个硬盘故障而不影响数据的完整性。
    磁盘空间使用率:较高,因为不需要像RAID 1那样进行完全的数据镜像。
    在这里插入图片描述
    RAID 10(RAID 1+0)
    工作原理:RAID 10是先组成RAID 1镜像对,然后再将多个镜像对组成RAID 0条带化。这种组合方式既提供了数据冗余(通过RAID 1),又提高了数据传输速度(通过RAID 0)。
    性能:RAID 10提供了非常高的读写速度和数据安全性。由于数据分散存储在多个镜像对上,因此即使某个硬盘出现故障,数据仍然可以从其他镜像对上读取和恢复。
    冗余:提供100%的数据冗余,因为每个数据块都有一个镜像副本。
    磁盘空间使用率:较低,因为每个数据块都需要存储一个镜像副本。此外,由于RAID 10需要至少4个硬盘(每个镜像对需要2个硬盘,而RAID 0至少需要2个镜像对),因此其成本也相对较高。
    在这里插入图片描述
    不同raid组合对比如下表所示:
    在这里插入图片描述
  2. LVM(Logical Volume Manager,逻辑卷管理器)与磁盘镜像
    原理:LVM 可以将多个物理磁盘或分区组合成一个逻辑卷。通过在 LVM 上创建镜像逻辑卷,可以实现数据的冗余。当一个物理磁盘出现故障时,LVM 可以自动切换到镜像磁盘上。
    配置方法:
  3. 使用pvcreate命令将物理磁盘或分区创建为物理卷(PV)。例如,pvcreate /dev/sda和pvcreate /dev/sdb。
    然后,使用vgcreate命令创建卷组(VG),将多个物理卷组合在一起。例如,vgcreate myvg /dev/sda /dev/sdb。
  4. 使用lvcreate命令创建逻辑卷(LV),并指定镜像选项。例如,lvcreate -L 200G -m1 -n mylv myvg创建一个大小为 200GB 的镜像逻辑卷。
  5. 格式化并挂载这个逻辑卷,如mkfs.ext4 /dev/mylv和mount /dev/mylv /mnt。

3.磁盘读写 IO监控优化最重要的2个命令

  1. iostat
    功能:监控磁盘使用情况。
    输出内容:包括CPU使用情况、设备(磁盘)的I/O统计信息等:
    在这里插入图片描述
    经验总结:
    –%idle值高,表示CPU较空闲。若%idle值高但系统响应慢,可能是CPU等待分配内存,此时应加大内存容量。
    –%idle小于70,I/O压力较大。
    –%idle值如果持续低于10,表明系统中最需要解决的资源是CPU。
    –如果%util比较大,说明I/O请求太多,硬盘可能存在瓶颈。
    –await大于svctm,差值越小,说明队列时间越短;反之差值越大,队列时间越长,说明系统出现了问题。
    –avgqu-sz队列长度也可衡量I/O负荷,avgqu-sz是单位时间内的平均值。
  2. iotop
    iotop 的功能
    实时监测磁盘 I/O 活动:
    –iotop 可以实时显示系统中各个进程的磁盘读写情况,让用户能够清楚地了解哪些进程正在频繁进行磁盘 I/O 操作,对于及时发现磁盘性能瓶颈和排查问题非常有帮助。
    识别高 I/O 消耗进程:
    –通过对进程的磁盘 I/O 速度进行监测和排序,iotop 可以快速定位那些消耗大量磁盘资源的进程,有助于管理员采取针对性的措施,如优化进程的行为、调整其优先级或限制其磁盘访问。
    –可以区分磁盘读取和写入操作,帮助用户确定是哪个方向的 I/O 活动较为频繁。
    输出内容
    进程信息:
    PID:进程的标识符,用于唯一确定一个进程。
    USER:启动该进程的用户。
    DISK READ:进程的磁盘读取速度,通常以字节 / 秒或更易读的单位(如 KB/s、MB/s)显示。
    DISK WRITE:进程的磁盘写入速度,单位与磁盘读取速度相同。
    SWAPIN:表示进程从交换分区读取数据的速度。
    IO>:综合的磁盘 I/O 速度,是磁盘读取和写入速度的总和。
    COMMAND:正在运行的进程的命令名称。
    表头说明:
    TID:线程标识符(如果显示线程级别的信息)。
    PRIO:进程的优先级。
    NI:Nice 值,表示进程的优先级调整值。
    % CPU:进程占用的 CPU 百分比。
    TIME+:进程运行的累计时间。
    在这里插入图片描述
    本篇完结。
    码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。

相关文章:

《Linux从小白到高手》综合应用篇:深入理解Linux磁盘及IO优化

1. 前言 其实磁盘优化和IO优化,我在前面的其他Linux调优博文中已经讲述过或者涉及过了,但是太过零碎,所以本篇就来集中深入讨论下Linux磁盘和IO调优。 2.磁盘调优 结合我多年的经验,本人认为磁盘调优最重要的是读写性能的提升和…...

【Linux】内存文件系统的I/O、重定向

文章目录 1. 系统中的文件2. 回顾C中的文件接口3. 文件类的系统调用3.1 open3.2 文件描述符 4. IO的基本过程5.重定向5.1 引入重定向5.2 系统中的重定向接口 6. 缓冲区问题7. 简单版shell的实现 1. 系统中的文件 在学习完Linux权限后,我们清楚的知道:文…...

力扣10.18

1463. 摘樱桃 II 给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地。 grid 中每个格子的数字表示你能获得的樱桃数目。 你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) 出发,机器人 2 从右上角格子 (0, cols-1) 出发。 请你按照如下规则…...

cs木马图形化界面出现问题处理

一个月多月没用cs木马了,发现打开客户端之后显示不出图形化界面,且出现下面这样的报错。 、 最后发现是java版本的问题,kali的java自动更新了。把原来的openjdk11改到了openjdk23。 解决方法: 输入: sudo update-…...

数据结构与算法 - 树 #数的概念 #二叉树 #堆 - 堆的实现/堆排序/TOP-K问题

文章目录 前言 一、树 (一)、概念 1、树的定义 (二)、树的定义 1、树为什么是递归定义的? 2、如何定义树(如何表达一棵树) 解决方案一:假设我们得知该树的度 解决方案二:顺序表 解决方案三:左孩子右兄弟表示法 二、二叉…...

Git推送被拒

今天开发完成一个新的需求,将自己的分支合并到test分支后,推送到远程仓库,结果显示推送被拒: 原因是因为有人更新了test分支的代码,我在合并之前没有拉取最新的test分支代码,所以他提示我“推送前需要合并…...

Jmeter进行http接口测试

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 本文主要针对http接口进行测试,使用jmeter工具实现。 Jmeter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较…...

工业相机详解及选型

工业相机相对于传统的民用相机而言,具有搞图像稳定性,传输能力和高抗干扰能力等,目前市面上的工业相机大多数是基于CCD(Charge Coupled Device)或CMOS(Complementary Metal Oxide Semiconductor)芯片的相机。 一,工业相机的分类 …...

RAID 矩阵

在架构设计中,RAID矩阵(RAID Log)是一个用于项目管理和风险管理的工具,帮助团队有效管理和跟踪项目中可能影响成功交付的关键因素。与存储技术中的 RAID 不同,这里的 RAID 是一个缩写,代表: R:…...

详细分析Redisson分布式锁中的renewExpiration()方法

目录 一、Redisson分布式锁的续期 整体分析 具体步骤和逻辑分析 为什么需要递归调用? 定时任务的生命周期? 一、Redisson分布式锁的续期 Redisson是一个基于Redis的Java分布式锁实现。它允许多个进程或线程之间安全地共享资源。为了实现这一点&…...

实验3,网络地址转换

实验3:网络地址转换 实验目的及要求: 通过实验,掌握NAT技术的工作原理,了解三种不同类型NAT技术的主要作用以及各自的主要应用环境。能够完成静态NAT和复用NAT技术的应用,并熟练掌握NAT技术相关的配置命令。 实验设…...

Java 中的 String 字符串是不可变的

文章目录 什么是不可变字符串?举个例子直观理解 不可变的原理1. 内部实现2. 字符串常量池3. 线程安全 为什么要设计成不可变?什么时候用可变字符串?示例 总结推荐阅读文章 在 Java 编程中,字符串(String)是…...

计算机网络架构实例

小型企业网络 1. 终端设备: - 员工的台式电脑和笔记本电脑,用于日常办公,如文档处理、邮件收发、业务软件使用等。 - 智能手机和平板电脑,方便员工在外出或移动办公时也能接入公司网络,查看邮件和处理紧急事务。 2.…...

Chrome与Firefox浏览器HTTP自动跳转HTTPS的解决方案

一、背景介绍 随着网络安全意识的不断提高,越来越多的网站开始采用HTTPS协议,以确保数据传输的安全性。然而,有时用户在浏览网页时,可能会遇到HTTP请求被自动跳转至HTTPS的情况导致网站打不开,提示安全问题&#xff0…...

众数信科荣登“2024 CHINA AIGC 100”榜单

2024年10月17日,由非凡产研推出的「2024 CHINA AIGC 100」榜单隆重发布,众数信科凭借领先的企业AI智能体解决方案能力荣登榜单。 非凡产研AIGC 100 评选旨在挖掘国内具有高潜力的AI应用,为AI产业的高质量发展注入新动力。榜单覆盖了教育、医疗…...

【AI知识】距离度量和相似性度量的常见算法

本文介绍一些AI中常见的距离度量和相似性度量算法: 1. 欧几里得距离(Euclidean Distance) 欧几里得距离是最常见的距离度量方法,用来计算两个向量之间的“直线距离”,也被成为L2范数。 公式如下,其中 x…...

LeetCode1004.最大连续1的个数

题目链接:1004. 最大连续1的个数 III - 力扣(LeetCode) 1.常规解法(会超时) 遍历数组,当元素是1时个数加一,当元素是0时且已有的0的个数不超过题目限制时,个数加一,若上…...

Parallels Desktop20虚拟机软件能让你在Mac上无缝运行Windows

Code 生成器:Parallels Desktop 20最新版本虚拟机的奇妙世界 🌟【轻松跨越操作系统界限】🌟 你是否常常感到在Mac和Windows之间切换太麻烦?Parallels Desktop 20最新版,让你不再为跨系统操作而烦恼。这款虚拟机软件能让…...

Golang | Leetcode Golang题解之第476题数字的补数

题目&#xff1a; 题解&#xff1a; func findComplement(num int) int {highBit : 0for i : 1; i < 30; i {if num < 1<<i {break}highBit i}mask : 1<<(highBit1) - 1return num ^ mask }...

Spring 实现 3 种异步流式接口,干掉接口超时烦恼

大家好&#xff0c;我是小富&#xff5e; 如何处理比较耗时的接口&#xff1f; 这题我熟&#xff0c;直接上异步接口&#xff0c;使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性&#xff0c;处理结果仅返回单个值。在某…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...