Linux - 使用磁盘作为 RAM

Linux - 使用磁盘作为 RAM

我有一台虚拟机,其中有一个进程消耗了大量内存(~200GB)。某种内存数据库。我需要在标准笔记本电脑上运行它,但我无法重新编译它或查看代码。

我已经在 /etc/fstab 中添加了 256GB 的交换空间,其中 pri=32767,在 /etc/sysctl.conf 中添加了 vm.swappiness=100,但它无法足够快地加载数据库(24 小时后卡在 4GB;似乎不再增长)。

(编辑:我克隆了机器,将 RAM 从 256GB 更改为 4GB,添加了硬盘,将其格式化为 ext4,并创建了一个大小为 256GB 的交换文件(dd -> mkswap -> swapon...))

为什么它停止生长了?

我怀疑速度缓慢是由于它是一个交换空间,因此操作系统正忙于“交换”(加载->空间不足->决定交换什么...)。

我正在寻找一种“添加更多内存”但让操作系统将其视为普通内存的方法。或者我的交换配置有误?

我知道这会影响性能,但是对我来说是可以接受的。

VM 是 CentOS 6。

答案1

您是否尝试过多个交换文件?4 GB 听起来像是达到了 32 位系统的文件大小限制。

我发现这个教程centos.org它非常清晰地说明了如何手动制作交换文件。

要添加交换文件:

  1. 确定新交换文件的大小(以兆字节为单位),然后乘以 1024 以确定块数。例如,64 MB 交换文件的块大小为 65536。
  2. 以 root 身份在 shell 提示符下输入以下命令,其中 count 等于所需的块大小:

dd if=/dev/zero of=/swapfile bs=1024 count=65536

  1. 使用以下命令设置交换文件:

mkswap /swapfile

  1. 要立即启用交换文件但不在启动时自动启用:

swapon /swapfile

  1. 要在启动时启用它,请编辑 /etc/fstab 以包含以下条目:

/swapfile swap swap defaults 0 0

系统下次启动时,它会启用新的交换文件。

cat /proc/swaps添加新的交换文件并启用它后,通过查看命令或的输出来验证它是否已启用free

答案2

我最终设法将数据转换为 SQLite 数据库,并写道https://github.com/assafmo/SQLiteQueryServer能够远程访问。它运行完美,速度超快。

相关内容