【问题标题】:How to reliably detect disk is down on Linux via Java如何通过 Java 可靠地检测 Linux 上的磁盘已关闭
【发布时间】:2011-04-30 19:01:12
【问题描述】:

有没有一种通过 Java 检测 Linux 服务器上特定磁盘脱机的好方法?

我有一个应用程序,由于性能原因,它直接写入所有磁盘(中间没有任何 RAID)。

我需要检测 Linux 在运行时是否会因磁盘崩溃而卸载任何磁盘,因此我将停止使用它。问题是每个挂载都有一个根目录,所以如果没有正确检测,应用程序只会填满根分区。

将不胜感激任何关于此的建议。

【问题讨论】:

  • 我对此没有任何经验,因此可能有更好的方法,但一种选择是直接从 Java 运行诸如 mount 之类的命令并读取输出。见:download.oracle.com/javase/1.5.0/docs/api/java/lang/…
  • 如果它仅适用于 linux,您可以读取并解析 /proc/mounts 并在那里检查该目录。
  • 顺便说一句,请记住,您的操作系统(有或没有 RAID 控制器)可以做一些惊人的事情来优化 IO(缓存、延迟写入、预读......)所以绕过时要小心它以获得表演......
  • 我实际上使用的是标准 Java 调用,所以这里没有绕过操作系统。

标签: java linux disk mount


【解决方案1】:

在 Linux 中,一切都可以通过文本文件访问。我不太明白您需要的确切信息是什么,但请查看/proc/diskstat/proc/mounts/proc/mdstat(用于突袭)等...

【讨论】:

  • @Guillaume 好吧,对于 OP 来说,相当惊人显然还不够。他正在尝试进行微优化(几个百分比最高),那么为什么不使用原始系统调用和 C 呢?
  • @SyBer 你也可以使用df命令知道磁盘空间占用。
  • @Guillaume 实际上,我更多地谈论的是直接系统调用(尽管我猜你也可以在 Java 中做到这一点),而不是语言与语言。
  • 我正在使用纯 Java 写入磁盘,正如 Guillaume 所说,这确实得到了显着改进并提供了非常下降的性能。我之所以提高速度,是因为没有为目标机器计划硬件袭击(由于几个原因),而且从我们的基准测试来看,软件袭击对于繁重的写作来说非常慢。因此,我们通过将数据分布在多个磁盘上来进行编码,它工作得很好,只需要这一点检测工作。
【解决方案2】:

任何有系统管理员经验的人都会告诉你,磁盘崩溃或以其他方式消失有一个令人讨厌的习惯,即让任何接触挂载点下任何东西的进程都处于不间断睡眠状态。此外,根据我的经验,这可能包括尝试读取 /proc/mounts 或运行“df”命令。

我的建议是使用 RAID,并在必要时投资解决问题。比如说,如果性能受到少量随机写入的限制,那么带有电池支持的写入缓存的 RAID 卡可以创造奇迹。

【讨论】:

  • 感谢您的建议,不幸的是,不使用 RAID 是开发早期做出的“战略”决定之一 :)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2021-03-15
  • 2015-01-15
  • 2015-11-06
  • 2017-11-15
  • 2010-10-03
  • 1970-01-01
相关资源
最近更新 更多