aria2占用过多内存的解决办法

2019-03-06


aria2号称最轻量的下载软件,占用内存极少,正常情况下占用4M(http和ftp下载)~9M(种子文件下载),而就算是使用种子文件下载,在下载速度达到2.8M/s的时候也只占用6%的CPU性能。

不过,最近通过top发现并不是这么回事,aria2c进程的内存占用一路飙升,有截图保存下来的一次是1.8G,这可和说好的不一样啊,让我一度怀疑是不是下错aria2二进制文件了,不过好在更改配置之后就解决了。

aria2内存占用达到1.8G

其实这样的内存占用是正常的,这是为了提高性能,而要想降低aria2的内存占用只需要更改几个配置文件中的参数即可。

disk-cache

官方关于disk-cache的介绍:

–disk-cache=

启用磁盘缓存。如果SIZE为0,则禁用磁盘缓存。此功能将下载的数据缓存在内存中,所占用的内存最大为设置的SIZE值。缓存存储是为aria2实例创建的,并由所有下载共享。磁盘高速缓存的一个优点是减少磁盘I / O,因为数据以较大的单位写入,并且由文件的偏移量重新排序。如果涉及散列检查并且数据缓存在内存中,那么就不需要从磁盘读取它们。 SIZE可以包括K或M(1K = 1024,1M = 1024K)。默认值:16M

也就是说,aria将下载的文件先存在缓存中,积累到一定的量之后再放进磁盘,这样就不必长时间占用着磁盘的读写,提高性能,不过缺点也是有的,就是占内存,所以要降低内存,可以将这个设为0,也就是不用磁盘缓存:

1
disk-cache=0

如果不是很在意那么一点内存,还是不建议直接设为0,毕竟开了磁盘缓存能减少磁盘IO,延长硬盘寿命,想降低内存就设小一点,比如64M,或者默认值16M。

deferred-input

官方关于deferred-input的介绍:

–deferred-input[=true|false]

可以设为true或者false以打开或关闭该选项。

  • true,aria2不会在启动时从–input-file选项指定的文件中读取所有URI和选项,但在以后需要时会逐个读取。如果输入文件包含大量要下载的URI,这可能会减少内存使用量。
  • false,aria2在启动时读取所有URI和选项。
    默认值:false

aria启动时默认会往内存里面加载所有下载链接的状态,这样做会比较吃内存,如果设为true,那么只会在需要的时候加载。

不过有一点需要注意的是,如果设置了--save-session选项,那么--deferred-input就会失效。

1
deferred-input=true

enable-mmap

官方关于enable-mmap的介绍:

–enable-mmap [true|false]

在内存中存放映射文件. 当–file-allocation选项没有预先分配, 此选项无效.

顺带的,这是关于file-allocation的介绍:

–file-allocation=

指定文件分配方法。

  • none,不预先分配文件空间。
  • prealloc,在下载开始之前预先分配文件空间。这可能需要一些时间,具体取决于文件的大小。
  • falloc,如果您使用较新的文件系统,例如ext4(支持扩展区),btrfs,xfs或NTFS(仅限MinGW构建),则falloc是您的最佳选择。它几乎立即分配大量(少量GiB)文件。不要将falloc与传统文件系统(如ext3和FAT32)一起使用,因为它与prealloc几乎相同,并且在分配完成之前完全阻止aria2。如果您的系统没有posix_fallocate(3)函数,则可能无法使用falloc。
  • trunc,使用ftruncate(2)系统调用或特定于平台的对应文件将文件截断为指定的长度。需要注意的是,使用trunc似乎可以非常快速地分配磁盘空间,但它实际上只是在文件系统中设置文件长度元数据,并且根本不分配磁盘空间。这意味着它无助于避免碎片化。
    默认值:prealloc

这是最有用的一个选项,设完这个内存直接就降下来了,而且设置预分配空间也很有必要,可以减少硬盘碎片化。

1
2
enable-mmap=false
file-allocation=falloc

最后

这次出现aria占用太多内存问题的时候,我重启进程并且仔细观察了一下,发现在存在不少下载任务的前提下(4个种子,近200个文件),刚启动时内存占用很低,不过随着下载速度的提升,内存占用同步增长,也就是说,下载速度几M每秒,在下载的时候内存也以每秒几M的速度在增长,很明显就是下载的文件都存在了内存里面,所以这次是第三个配置起了作用,将enable-mmap设为false大幅降低了内存占用,不过设置哪个才有效因人而异,如果实在不知道要设哪个,又对内存占用很在意,那么三个一起上吧。

这是aria设置完上面三个选项后的内存占用情况,当前下载速度1M/s,3个种子共60个文件:

aria内存占用降到14M



评论