我在 logback中发现了一个错误,当它尝试删除其他东西(例如外部进程)引用的文件时会出现该错误。通常,如果我关闭外部进程,问题就会消失,但我也遇到过这样的情况,而不是要删除的日志文件的单个文件句柄,突然间我有两个文件句柄用于该 Java 进程到同一个文件. 对我来说,这似乎是两个不同的类在保存同一个文件,或者有两个线程在争夺同一个资源。
无论如何,我想知道文件中保存的是什么。我怎样才能知道呢?我需要处理的只是文件名和进程 ID。
一些随意的浏览提到了对进程进行堆转储并使用 Visual VM 和 OQL 查询语言对其进行检查,但我不完全确定如何在 Windows 服务器上执行此操作,因为这些示例都针对 Linux 及其文件系统描述符。