Linux使用交换而不是RAM与大image processing

我正在使用R编程语言在Linux服务器上处理大图像,所以我期望在image processing和文件写入过程中使用大量的RAM。

但是,服务器在似乎需要很长时间之前使用交换内存,从而显着减慢了处理时间。 见下图:

在这里输入图像描述

这表明我使用大约50%的RAM进行image processing,大约50%似乎是为磁盘caching(黄色)保留的,而10Gb的交换正在使用中!

我正在观看这个交换被吃掉了,当这个RAM的使用率比这个图片中显示的要高的时候,它并没有发生。 在正在处理的数据被写入GeoTiff文件的过程中,交换似乎被吃掉了。

我的工作理论是,磁盘写入过程正在使用大部分的磁盘caching区(黄色区域),因此黄色实际上不可用于服务器(通常假定为磁盘cachingRAM)?

这听起来合理吗? 当内存明显可用时,是否有另一个原因使用交换?

我相信你可能会受swappiness内核参数的影响:

当应用程序需要内存并且所有RAM都被占满时,内核有两种方式来释放一些内存:它可以通过消除最老的数据来减少RAM中的磁盘高速缓存,或者可以交换一些较少使用的部分(页面)的程序输出到磁盘上的交换分区。 预测哪种方法更有效率并不容易。 内核根据最近的活动历史,在给定的时刻大致猜测这两种方法的有效性,从而作出选择。

Swappiness取值介于0和100之间,以更改交换应用程序和释放缓存之间的平衡。 在100处,内核总是倾向于找到不活动的页面并将其交换出去。 值为0给出了一些与旧行为接近的地方,即需要内存的应用程序可以将缓存缩小到RAM的一小部分。

如果要强制内核尽可能地避免交换,并将设备缓冲区和磁盘缓存中的RAM分配给应用程序,则可以将swappiness设置为零:

echo 0 > /proc/sys/vm/swappiness 

请注意,使用此设置可能会使性能恶化,因为磁盘缓存可能缩小到现在的一小部分,从而使磁盘访问速度变慢。