在 Linux 机器(也很可能是 Unix 机器)中生成的 Java 堆转储具有访问限制。堆只能由进程的所有者读取(ACL 掩码设置为 600)。我了解这是出于安全原因。但是,我找不到任何引用或解释该行为的文档。谁能指出我的文档(如果有的话)?另外,有没有办法覆盖这种行为?
问问题
4773 次
2 回答
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 }
于 2012-10-11T10:52:08.007 回答
0
堆转储由作为特定用户运行的 JVM 进程编写。就像任何Linux 进程创建的任何文件一样,它将归该用户所有。
如果您想要实际的文档,这里是. 看看下面的描述O_CREAT
。
于 2012-10-04T19:04:53.830 回答