kraken2 命令有一个参数是 --memory-mapping,据我观察,该参数可能会根据参考数据库的大小和系统内存大小来选择是否将数据库读入内存。
我的电脑内存是64G,参考数据库是59G(解压后69G)的标准数据库,刚刚好能读入内存。
在运行kraken2时,如果是数据量较小的样本,该命令就会将数据库全部读入内存,然后进行序列比对。且如果后续的样本大小都差不多,就会保存数据库在缓存中,连续跑通。
但是,一旦运行过程中遇到数据量较大的样本,就会出现【运行所需内存】> 【电脑可分配内存】,之前存储的缓存又无法被释放,继续运行就会导致内存溢出从而被系统的OOM机制杀死。
有没有办法可以实现判断样本大小是否会导致内存溢出并在在运行大样本前释放缓存呢?