【问题标题】:Monitor open file handles in Java - OS-independent在 Java 中监视打开的文件句柄 - 独立于操作系统
【发布时间】:2017-07-19 08:16:49
【问题描述】:

我的问题是监控 java 中打开的文件句柄,并且独立于操作系统类型(Linux、Windows 等)

My Application 是一个基于 web 的服务器应用程序,使用 tomcat 和 Java8 运行。

对于可能的解决方案,仅考虑 Java 语言本身以及 GuavaApache Commons,因为我的公司不允许使用任何其他语言第三方库。

关于如何做到这一点的任何建议?我已经考虑过继承 InputStream 并在其 open()close() 方法中注入一些东西,但这并不是我认为的“好”解决方案......

非常感谢您的帮助!

【问题讨论】:

  • 您对打开的文件描述符计数感兴趣吗?在计数的情况下,您可以使用 java.lang.management.ManagementFactory.getOperatingSystemMXBean().getOpenFileDescriptorCount()。够你吃吗?
  • 好吧,我已经尝试过了,但是编译器抱怨 getOpenFileDescriptorCount() 找不到。我在其他地方找到了适用于 Linux 的解决方案,他们将getOperatingSystemMXB‌​ean() 转换为 UnixOSMXBean,但对于其他操作系统没有等价物。不过谢谢你的回复

标签: java io inputstream monitoring filehandle


【解决方案1】:

您不太喜欢的解决方案似乎是最好的解决方案,您可以在打开或关闭文件时简单地发出一条消息,例如通过 EventBus(在 Guava 中有它)。您的ManagedFileInputStream 只需致电enventBus.post(someFilePointer)super.open()super.close() .

但是您的应用程序可以打开许多其他文件(jar 文件、网络资源(如 css)、图像、脚本、由 tomcat 创建的临时文件、由 JVM 创建的临时文件)。

我认为没有明智的方法可以从 java 应用程序中监视 java 应用程序打开的所有文件,也许这是操作系统需要管理的东西。

【讨论】:

  • 当我处理URL.openStream() 时,这将迫使我重写java.net.URL 及其组件的很大一部分。不幸的是,这浪费了我的时间资源并炸毁了产品的其余部分......似乎我必须投降并告诉我的老板,以负担得起的复杂性这是不可行的
猜你喜欢
  • 2010-09-14
  • 2012-06-17
  • 2013-06-14
  • 2012-06-02
  • 2010-11-13
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 2011-07-31
相关资源
最近更新 更多