如何以编程方式使系统创建交换文件?
Posted
技术标签:
【中文标题】如何以编程方式使系统创建交换文件?【英文标题】:How to programmatically cause system to create swap files? 【发布时间】:2011-12-29 18:11:31 【问题描述】:如果您必须以编程方式让系统为您创建交换文件,您会怎么做?
我并不是要实际创建交换文件,而是在自己的代码中调试一个问题,试图更好地了解我做错了什么会导致系统创建交换文件。
我的程序(毫无疑问你已经猜到了)正在对文件进行大量读写(从文件 A 中提取一些数据并将其写入文件 B)
什么会导致这样的事情发生?
更新:
请注意,创建的交换文件大小为 0 字节。 程序用 Java 编写并在 Linux 上运行【问题讨论】:
我刚刚意识到我的答案依赖于很多假设。请编辑您的问题,至少参考您程序的编程语言。其次,(我不确定它是否相关),您可能需要参考操作系统,以防万一。 其次,可能涉及的某些 SDK 正在制作 swp 文件。同样,不确定这是否重要,但可能。 @JayC,我更新了我的问题。谢谢 好吧,如果您想填充大量 RAM 并进入交换区域……perl -e 'while (fork) open IN, "/dev/urandom"; while ($x .= <IN>) $x .= $x;
在 Fedora 系统上,这将(希望)在实际分叉之前达到您的每用户资源限制- 将你炸死,但它会慢慢膨胀以填满所有可用的 RAM……
【参考方案1】:
Vim or Gvim 创建 .swp 文件。也许你有一个调用 Vim 的脚本?我从来没有在脚本中调用过vim,但是this is a question about doing that,所以我很确定这是可能的。
【讨论】:
【参考方案2】:交换文件适用于程序使用的内存超过 RAM 中可用内存的情况。要使系统写入交换,您只需要使用大量内存即可。您可以通过分配大量内存块来做到这一点。
【讨论】:
多次加载一个1GB的文件可以快速加载内存。【参考方案3】:事实证明,问题的出现是由于我在读取/写入文件后不正确地关闭了 IO 连接。
曾经我
finally
try
in.close();
fstream.close();
br.close();
catch (IOException e)
e.printStackTrace();
交换文件已停止创建,问题已解决。
【讨论】:
以上是关于如何以编程方式使系统创建交换文件?的主要内容,如果未能解决你的问题,请参考以下文章