有没有一种方法可以计算IO活动(文件访问,读取的字节)?

斯诺里克:

我希望能够找出正在运行的JVM多长时间访问一次磁盘,以及在可能的情况下对其进行访问。
例如,我想知道:通过ImageIO加载图像是否真的将其加载到内存中,还是只是创建一个指向文件的指针并在其真正绘制到屏幕时访问它?诸如此类。有没有办法做到这一点?

更新,我添加了这个:

public class SecurityManagerExtension extends SecurityManager {


    @Override
    public void checkRead(FileDescriptor fd)
    {
        logger.error("reading file1: {}", fd.toString());
        super.checkRead(fd);
    }

    @Override
    public void checkRead(String file)
    {
        logger.error("reading file2: {}", file);
        super.checkRead(file);
    }

    @Override
    public void checkRead(String file, Object context)
    {
        logger.error("reading file3: {} in context {}", file, context.toString());
        super.checkRead(file, context);
    }
}

我已经设置了安全管理器:

    SecurityManagerExtension secMan = new SecurityManagerExtension();
    java.lang.System.setSecurityManager(secMan);

现在,新的问题是:基本上,我加载或加载的每个文件,除类文件外,似乎都会引起如下的StackTrace:

引起原因:java.security.AccessControlException:访问被拒绝(“ java.io.FilePermission”“ C:\ Program Files \ Java \ jdk-13.0.1 \ bin \ awt.dll”“读取”)

如果我注释掉setSecurityManager()行,一切将再次正常运行。我什至尝试授予我的用户对JDK目录的完全访问权限,因此这不是真正的权限问题。它不是,因为如果我恢复为默认设置,则一切将再次正常运行。

我究竟做错了什么?

horstr:

我想到两种可能的方法:

#1:自定义安全策略

您可以通过扩展java.lang.SecurityManager和安装(java.lang.System.setSecurityManager来实施自己的安全策略这个类提供checkRead/ checkWrite/ checkDelete方法,即得到尽快称为代码试图读取/写入/删除文件。这使您可以记录所有基于Java的文件访问。但是,这不能在字节级别上进行。

默认情况下,未安装安全管理器。默认策略仅对中的代码启用文件系统访问java.ext.dirs要变通解决此问题,可以在设置安全管理器之前按如下所示设置最小策略:

System.setProperty("java.security.policy", "<policy-path>");

最小政策:

grant {
  permission java.security.AllPermission "", "";
};

#2:通过OS级跟踪器监视I / O

在Windows上,可以使用Process Monitor记录I / O。在Linux上,您可以使用strace进行相同的操作。其他平台也提供类似的功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有一种方法可以计算Go模板?

有没有一种方法可以计算对sql.Exec的每次调用?

有没有一种方法可以生成填充特定字符的字节片?

有没有一种方法可以从HttpServletRequest读取表单数据?

有没有一种方法可以在Spring外部公开要通过Internet访问的文件夹?

有没有一种方法可以计算嵌套for循环生成的索引?

Intershop:有没有一种方法可以从ISML的属性文件中读取值?

有没有一种方法可以读取C ++中的文件文件夹?

有没有一种方法可以在Linux环境中访问.zip内的文件

有没有一种方法可以计算concat语句?

有没有一种方法可以计算MySQL中每行的LIKE结果?

有没有一种方法可以逐行读取Excel文件

有没有一种方法可以设置活动书签元素的样式?

有没有一种方法可以计算没有导入的时间?

有没有一种方法可以在不打开文件的情况下提取访问模块?

有没有一种方法可以将文件设置为仅在GODOT中读取

有没有一种方法可以在Python中实现全局计算属性?

有没有一种方法可以重用ImageData以减少GC活动?

有没有一种方法可以计算SQL中计数别名的总和?

有没有一种方法可以按组计算比例?

有没有一种方法可以提供文件下载而无需从Java路径中读取文件?

有没有一种方法可以重用公式中的计算值?

有没有一种方法可以计算javascript中的聚会列表?

有没有一种方法可以访问组成VBA中字符串的各个字节?

有没有一种方法可以通过sizeof()计算指向向量的大小?

有没有一种方法可以计算许多不同的值?

有没有一种方法可以在接口上声明计算属性?

有没有一种方法可以在excel中具有可以从多台不同的计算机访问的文件附件?

有没有一种方法可以在表格视图中计算警报?