如何以编程方式使系统创建交换文件?

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();
    

交换文件已停止创建,问题已解决。

【讨论】:

以上是关于如何以编程方式使系统创建交换文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式使 Mac OS 上的文件夹可全局写入?

如何使以编程方式生成的子视图符合超级视图(iOS)的边界?

python3以ftp方式备份华为交换机配置文件

是否可以在 Windows 服务器存储上存储 .PEM 文件并以编程方式读取它

如何使用winscp连接到交换机的文件系统

如何使用Xmodem传输交换机系统文件