我有一台虚拟机,其中有一个进程消耗了大量内存(~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它非常清晰地说明了如何手动制作交换文件。
要添加交换文件:
- 确定新交换文件的大小(以兆字节为单位),然后乘以 1024 以确定块数。例如,64 MB 交换文件的块大小为 65536。
- 以 root 身份在 shell 提示符下输入以下命令,其中 count 等于所需的块大小:
dd if=/dev/zero of=/swapfile bs=1024 count=65536
- 使用以下命令设置交换文件:
mkswap /swapfile
- 要立即启用交换文件但不在启动时自动启用:
swapon /swapfile
- 要在启动时启用它,请编辑 /etc/fstab 以包含以下条目:
/swapfile swap swap defaults 0 0
系统下次启动时,它会启用新的交换文件。
cat /proc/swaps
添加新的交换文件并启用它后,通过查看命令或的输出来验证它是否已启用free
。
答案2
我最终设法将数据转换为 SQLite 数据库,并写道https://github.com/assafmo/SQLiteQueryServer能够远程访问。它运行完美,速度超快。