jvm - Java 堆转储权限

标签 jvm heap-memory file-permissions heap-dump jmap

Linux 机器(很可能还有 Unix 机器)中生成的 java 堆转储的访问受到限制。堆只能由进程所有者读取(ACL 掩码设置为 600)。我了解这是出于安全原因。但是,我找不到任何引用或解释该行为的文档。谁能指出我的文档(如果有)?另外,有什么办法可以覆盖这种行为吗?

最佳答案

如果您对深入的 JVM 内部结构感兴趣,可以查看 OpenJDK 的源代码。

这里是 HeapDumper 服务的链接:http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/9b0ca45cd756/src/share/vm/services/heapDumper.cpp

如果你深入研究,你会看到 JVM 正在使用 S_IREAD | 创建二进制文件。 S_IWRITE

 4373 // create binary file, rewriting existing file if required
 4374 int os::create_binary_file(const char* path, bool rewrite_existing) {
 4375   int oflags = O_WRONLY | O_CREAT;
 4376   if (!rewrite_existing) {
 4377     oflags |= O_EXCL;
 4378   }
 4379   return ::open64(path, oflags, S_IREAD | S_IWRITE);
 4380 }

关于jvm - Java 堆转储权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12733868/

相关文章:

Javac 实现 : What jvm instructions does a method call produce?

java - YGC(ParNew)实时时间远高于user+sys时间

java - 确定应用程序是否正常关闭

c++ - 当程序退出时,是否有理由在 C++ 中调用 delete?

linux - mkdir() 怎么会成功却设置了错误的权限呢?

java - 在 java 6 中加载/运行在 java 7 中编译的类

java - Hibernate - OutOfMemoryError - java 堆大小

c++ - _CRTDBG_MAP_ALLOC 根本没有输出

php - 使用WebSocket通信保存数据

php - 使用 root :root instead of webapp:webapp 创建的 Laravel 日志文件