我有一台正在8GB
运行 RAM 的笔记本电脑4.0.4-2-ARCH
。最近,我安装了安卓工作室,然后砰的一声,我平时纯净的系统突然变得口吃和全身僵硬(不止一次)。
前安卓工作室,我舒舒服服地跑了SMB、Minidlna、Plex、MySQL、PostgreSQL、Apache 和 Chrome同时没有任何问题。现在我什至连跑都费力铬合金和安卓工作室。在这两种情况下,两者free
和系统监控器报告只6.5G
使用了内存!
所以我做了一些挖掘并启用了交换(5G
交换文件)。我对性能的提高感到惊讶!不再有滞后。但是,在峰值负载期间,(工作室和 Chrome)使用量为5G
RAM +1.5G
交换区。
这让我有点困惑,我有两个问题。
首先,如果仅使用内存6G
,为什么会口吃,特别是为什么会冻结?
第二,我的硬盘 ( 1TB
) 已经使用了大约 3 年,我宁愿保持交换禁用。还有其他方法可以实现吗类似交换性能,而不会给硬盘带来压力。我已经设置swappiness
为 10 的低值,大约可以1G
正常使用,而我的笔记本电脑已经达到了最大RAM
限制。
我已经阅读了这些优秀的答案,但是我问这个是因为我对他们不满意。
编辑:这些答案表明Linux将使用所有可用内存,因此对于新程序,寻呼会减慢计算机速度。但如果内容很多Linux放入内存是可以在不这样做的情况下进行管理的东西,为什么当运行需要大内存的程序时性能会受到影响?我的意思是,最好的情况是程序启动应该很慢(分页)。
答案1
虽然看起来您有足够的 RAM,但 Linux 会在内存中缓冲文件数据。将文件系统放置/tmp
在内存中以加速访问也很常见。如果您没有启用交换,那么很多东西可能最终会卡在内存中,从而阻止缓存经常访问的文件。您的选择实际上是:将未使用的内存分页到磁盘;或重复从磁盘读取文件。一旦内存(包括缓冲区)被填满,您就没有任何选项不需要 IO。
如今,通常将内存分页出来以交换最近未访问过的内存,而不是交换整个程序。可能被分页的内容包括:
- 已加载到程序中并修改其内存位置的非 PIC(位置无关代码);
- 读入未主动使用的程序的数据;
- 未主动使用的临时文件(可能已分页);和
- 未主动使用且没有备用后备存储的任何其他内存。
从磁盘读取的 PIC 和其他未修改的数据可以使用从中读取数据的文件作为后备存储,而不是使用交换。
sar
您可以使用诸如监视分页、交换和磁盘 I/O之类的程序。我希望当您启用交换时,您会看到更少的磁盘使用。
如果要挂起到磁盘,通常需要相当大的交换空间,挂起时可以将内存复制到其中。