当我使用Transmission或Wget等程序一次性下载大量数据(例如3GB)时,在下载过程中逐步下载,下载完成后,计算机总是显得有点迟缓,就好像它一直在使用交换一样。然而,free
无论是在下载期间还是之后,结果始终显示使用了 0 字节的交换。
我通常注意到,用于下载的程序关闭速度较慢,后续程序打开速度也较慢,但仅限于第一次打开时,就好像数据正在从交换区传输到 RAM 一样。
我的交换并free
没有错误,因为在其他情况下free
会按预期报告一些交换使用情况。我的计算机从未暂停或休眠;我不使用屏幕保护程序;我的电脑每天结束时都会关闭。
我的电脑有 4 GB RAM 和一个快速处理器,在我下载时/之后其使用率从未超过约 20%。
我正在使用Linux。
造成这种行为的原因是什么?
答案1
计算机中的 RAM 有两个用途:存储程序的内存,以及作为缓存最近使用的磁盘内容。在典型的健康桌面系统中,大约一半的内存用于每个磁盘。您可以使用命令检查内存使用情况free
;“-/+ buffers/cache”的“used”列是用于程序数据的内存数字,“buffers”和“cache”值是磁盘缓存。
当您下载了很多东西时,这些数据就会填满磁盘缓存。当它这样做时,其他东西就必须消失,因为内存是有限的。看来您没有运行任何包含不常用数据的程序,因此没有数据写入交换区;相反,其他数据会从缓存中逐出。
下载后第一次打开程序的速度较慢,因为您已经习惯了程序代码和数据已在缓存中的速度,但现在它们已从缓存中移出,以便为下载的文件腾出空间。
由于写入延迟,下载程序的关闭速度可能较慢:它写入的文件是缓冲的,并且只有当系统不使用磁盘带宽来处理更重要的事情或需要重新调整缓冲区内存的用途时,或者通过显式请求时,数据才会完全写入磁盘sync
命令。
你根本没有看到任何交换有点奇怪。这表明您已经调整了您的交换性到一个会降低性能的值(交换空间的使用是健康的,但网上有很多建议建议将其关闭,这几乎总是适得其反)。