我有大量的 Fortran 源代码(沃夫) 进行编译。
每次我编译代码时,系统就会卡住。为了诊断问题,我在 Ubuntu 的系统监视器中查看了内存性能,编译会占用整个 RAM。然后它还开始占用交换内存。我的笔记本电脑有 4 GB RAM。我将其扩展到 8 GB RAM。我创建了一个 12 GB 的交换分区。但是一旦我的交换分区利用率达到 4 GB。系统就会挂起。为什么我的整个交换分区都没有被使用(见下文)?
答案1
为什么您希望交换使用率更高?
读/写交换是慢 1000 倍比读取/写入 RAM。
系统可能没有挂起,只是它忙于来回交换东西,所以看起来就像挂起一样。
@phihag 在评论中说道:
最有可能的是,当交换达到 4GB 时,用户界面的某些部分就会被交换出去。例如,这可能是处理 Ctrl+C 的代码、键盘布局处理程序、在终端中显示输出的代码、终端的一些数据缓冲区、绘制图片的 X 服务器的一些数据缓冲区等。如果您等待几个小时,您的交换空间可能会被填满,或者在各个层处理 Ctrl+C 所需的所有数据和代码最终导致您的 Fortran 进程被终止
我建议多买点内存。这会大大加快编译速度。现在内存很便宜,16GB 约 60 美元。
答案2
使用过多swap
对系统不利。交换越多,延迟就越大。Android 开发已经指出了为什么你真的不想使用更多的交换。但是有一种方法可以配置系统使用交换分区的频率。它由一个名为的设置控制swappiness
。您将在此找到有关修改交换性的详细指南关联。
我不建议你增加交换空间。你甚至不能使用 12GB 的交换分区。一般规则是交换空间应该是主内存的一半。对你来说,就是 2GB。