在我的系统中,总是有一些“空闲”和“非活动”内存可用,但有时系统会移动几兆字节进行交换。每晚可能约为 100MB,但几天的交换可能会超过 4000MB。
如何确定系统所需的内存?
答案1
自由BSD将内存分为5个列表:
- 有线(锁定在内存中,不可分页)
- 活跃(最近使用过)
- 不活动(最近未使用)
- 缓存
- 自由的
其中一些有最低免费和自由目标水平,例如
Pool Minimum Target
Free 0.7% 3%
Cache 3% 6%
Inactive 0% 4.5%
(来源:FreeBSD操作系统的设计与实现》,相当过时:2004 年涵盖 FreeBSD 5.2——从那时起这些数字已经改变,但我相信一般方法没有改变。)
页面守护进程的任务是维护级别并根据需要调出页面。
从我这里的 FreeBSD 9.0 VM 中,这些是一些相关的数字:
hw.availpages: 3138511
vm.stats.vm.v_inactive_target: 121342 # 3.9%
vm.stats.vm.v_free_target: 80895 # 2.6%
vm.stats.vm.v_free_reserved: 4011 # 0.1%
vm.stats.vm.v_free_min: 19221 # 0.6%
vm.stats.vm.v_cache_min: 80895 # 2.6%
vm.stats.vm.v_cache_max: 161790 # 5.1%
(我不确定它们是如何计算的,这取决于物理内存,大概kern.maxusers
)。
自由BSD将主动分页以增加可用缓存因此,仅仅因为使用了交换并不意味着您的系统面临压力。检查(并绘制图表!)分页速率和其他负载指标(例如磁盘 I/O 和 CPU 滴答)要有用得多,systat -io
这是一个开始。运行locate/updatedb 是夜间转移内存使用的好方法。
即使有空闲内存,也使用交换区是正常行为,它可以有效地为空闲时可能的未来内存需求做好准备,因此单独使用交换区并不是确定 RAM 需求的可靠方法。 FreeBSD 非常擅长告诉您何时需要调整某些内容(grep“请参阅文件中的调整” messages
)。
其他有用的阅读:
答案2
如果您有空闲内存,增加内存不起作用,您应该更改参数swappiness
。它告诉内核使用非物理内存(交换)的频率。
检查交换值:
cat /proc/sys/vm/swappiness
将临时的 swappiness 值(重新启动时丢失)更改为值 10(可以减少交换使用量的好值)
sudo sysctl vm.swappiness=10
如果你想改变它永久使用配置文件:
sudo vim /etc/sysctl.conf
搜索vm.swappiness
并将其更改为所需的值。
vm.swappiness=10
保存并重新启动。
描述:
什么是交换器?
swappiness 参数控制内核将进程从物理内存移出到交换磁盘上的趋势。由于磁盘比 RAM 慢得多,因此如果过于频繁地将进程移出内存,可能会导致系统和应用程序的响应时间变慢。
swappiness 的值可以在 0 到 100 之间
swappiness=0 告诉内核尽可能长时间地避免将进程交换出物理内存
swappiness=100 告诉内核积极地将进程从物理内存中交换出来并将它们移动到交换缓存
Ubuntu 中的默认设置是 swappiness=60。降低 swappiness 的默认值可能会提高典型 Ubuntu 桌面安装的整体性能。建议使用 swappiness=10 的值,但请随意尝试。注意:Ubuntu 服务器安装与桌面系统有不同的性能要求,默认值 60 可能更合适。
答案3
一项简短的研究指出了这一点:为什么 swappiness 默认设置为 60? 其中更详细地解释了交换性
和这个: https://www.kernel.org/doc/Documentation/sysctl/vm.txt 其中解释了所有与 vm 相关的参数。如果您喜欢单进程内存管理,它可以帮助您了解其他与内存相关的限制/参数。
答案4
我之前的回答不适用于 freeBSD,但我保留它。我测试了它,它在 Debian 上运行起来就像一个魅力。对于 freeBSD,您可以使用以下命令来sysctl
查看交换是否启用:
-bash-2.05b$ sysctl vm.swap_enabled
vm.swap_enabled: 1
1 - 启用
0 - 禁用
您可以通过在其中写入以下行来禁用它/etc/sysctl.conf
:
vm.swap_enabled=0
和这个链接您可以获得有关交换和物理内存的更多信息。