AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 736727
Accepted
dr_
dr_
Asked: 2015-11-17 07:13:10 +0800 CST2015-11-17 07:13:10 +0800 CST 2015-11-17 07:13:10 +0800 CST

设置高 I/O 超时的缺点?

  • 772

我正在研究几个 Linux VM,其分区安装在 NetApp NAS 上。此 NAS 会定期遇到非常高的 iowait,这会导致 VM 磁盘切换到只读模式、崩溃或损坏。

在VMware KB上,建议增加超时值作为姑息治疗:

echo 180 > /sys/block/sda/device/timeout

设置非常高的超时时间(1800 或更多)可能会产生什么负面影响?在我看来,风险在于延迟写入会累积并填满 I/O 写入缓冲区,从而导致系统崩溃。因此,此解决方案可能比问题更糟糕。

linux
  • 2 2 个回答
  • 3951 Views

2 个回答

  • Voted
  1. Best Answer
    shodanshok
    2015-11-18T01:46:02+08:002015-11-18T01:46:02+08:00

    大多数缓存在 OS 脏页缓存中的写入已经异步完成。换句话说,它们通常与设备超时无关。

    但是,读取和同步写入需要底层块设备立即关注,这正是您的文件系统切换到只读模式的原因(它不能将其日志写入磁盘)。

    增加 I/O 等待时间应该没有坏影响,但它不是灵丹妙药。例如,即使底层文件系统保持读写模式,数据库也可以进入只读模式。

    • 2
  2. sourcejedi
    2019-05-18T14:58:07+08:002019-05-18T14:58:07+08:00

    请注意,默认的 SCSI 超时已经是 30 秒。用计算机术语来说,这已经是相当长的时间了:-P。

    IO 请求(例如异步写入)由/sys/class/block/$DEV/nr_requests和限制/sys/class/block/$DEV/max_sectors_kb。在旧的单队列块层中,总内存使用量被称为2*nr_requests*max_sectors_kb. 因子 2 是因为读取和写入是分开计算的。尽管您还需要考虑硬件队列中的请求,但请参见例如cat /sys/class/block/sda/device/queue_depth。您通常需要确保最大硬件队列深度不大于nr_requests.

    1) 写的是如果你的 IO 请求需要太多空间,就会出现内存不足的错误。 因此,您可以查看特定系统上的上述值。通常它们不是问题。 nr_requests默认为 128。默认值max_sectors_kb取决于您的内核版本。

    如果使用新的多队列块层(blk-mq),读取和写入不单独计算。所以等式的“乘以二”部分消失了,nr-requests而是默认为 256。我不确定如何处理硬件队列(或队列)blk-mq。

    当请求队列已满时,异步写入可以在页面缓存中建立,直到它们达到“脏限制”。从历史上看,默认的脏限制被描述为 RAM 的 20%,尽管现在确切的确定稍微复杂一些。

    当你达到脏限制时,你只需要等待。 内核没有超出 SCSI 超时的另一个硬超时。 从这个意义上说,关于这个主题的常见文档,包括 VMware KB,已经足够了。尽管您应该搜索适用于您的 NAS 的特定文档:-P。不同年份的 NAS 被设计为提供不同的最坏情况时序。

    2) 也就是说,如果进程等待磁盘 IO 超过 120 秒,内核将打印“挂起任务”警告。(可能。这是通常的默认值。除了在我的 Fedora Linux 版本上,内核似乎是在没有 CONFIG_DETECT_HUNG_TEST 的情况下构建的。Fedora 在这里似乎是一个奇怪的异常值)。

    挂起的任务消息不是崩溃,它没有设置内核“污染”标志。

    在 10 个挂起的任务警告(或您设置sys.kernel.hung_task_warnings的任何内容)之后,内核停止打印它们。考虑到这一点,我认为您还应该增加sysctl sys.kernel.hung_task_timeout_secsSCSI 超时,例如 480 秒。

    3) 个别应用程序可能有自己的超时时间。您可能更喜欢看到应用程序超时,而不是让内核返回 IO 错误!文件系统 IO 错误通常被认为是致命的。文件系统本身可能会在 IO 错误后以只读方式重新挂载,具体取决于配置。交换设备或内存映射文件中的 IO 错误会将 SIGBUS 信号发送到受影响的进程,这通常会终止该进程。

    4) 如果使用systemd,配置了看门狗定时器的服务会被强制重启。在当前版本中systemd,如果您运行,您可以看到例如 3 分钟的超时systemctl show -p WatchdogUSec systemd-udevd。这是四年前出于不同的原因而增加的;这似乎只是一个巧合,这与 VMware 建议的 SCSI 超时相匹配 :-)。这些重新启动可能会产生令人震惊的日志噪音。 systemd使用 SIGABRT 终止进程,其想法是获取核心转储以显示进程卡住的位置。然而,像 udev 甚至 journald 这样的东西现在应该很高兴重新启动。

    主要问题是确保您没有配置过短的用户空间重启看门狗,例如RuntimeWatchdogSec=在/etc/systemd-system.conf. 即使您不使用交换,也有可能systemd被磁盘 IO 阻塞,通过进入内核“直接回收”的内存分配。

    • 1

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve