在Linux机器(也很可能是Unix机器)中生成的Java堆转储具有受限访问权限。堆只能由进程的所有者读取(ACL掩码设置为600)。我知道这是出于安全原因。但是,我无法找到任何引用或解释行为的文档。任何人都可以指向我的文档(如果有的话)?另外,有没有办法覆盖这种行为?
答案 0 :(得分:4)
如果您对深度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 }
答案 1 :(得分:-1)
堆转储由JVM进程编写,该进程以特定用户身份运行。就像任何 Linux进程创建的任何文件一样,它将归该用户所有。
如果您想要实际文档,here it is。查看O_CREAT
下的说明。