【问题标题】: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……

标签: java file swap


【解决方案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();
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2012-05-31
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      相关资源
      最近更新 更多