eggNOG注释时内存不够的处理方式

 

###eggNOG32G内存注释完整步骤

#开启screen

screen -S eggArHeCHN

#diamond比对

diamond blastp --db eggnog_proteins --query ./ArHeCHN.chr.pep --out eggNOG.xml --outfmt 5 --sensitive --max-target-seqs 20 --evalue 1e-5 --id 10 --tmpdir /dev/shm --index-chunks 1

运行时间1h7min

  ? --threads  是否可以调整命令时采用的线程数 ?#In-house Perl脚本提取xml比对结果

parsing_blast_result.pl --no-header --max-hit-num 1 --HSP-num 1 eggNOG.xml | cut -f 1,2,11,12 > eggNOG.emapper.seed_orthologs

 

#在111上测试执行下面的命令

/opt/biosoft/eggnog-mapper-2.1.11/emapper.py -m no_search --annotate_hits_table eggNOG.emapper.seed_orthologs -o eggNOG --override --cpu 4

  运行结果:

Total hits processed: 38371 Total time: 85 secs

#注释结果为eggNOG.emapper.annotations

#生成eggNOG.txt文件

grep -v -P "^#" eggNOG.emapper.annotations | cut -f 1,8 > eggNOG.txt

你的电脑只有 32GB 内存,而 EggNOG-mapper 在 --dbmem 模式下可能会占用高达 45GB 内存,这可能会导致系统崩溃或严重变慢。可以尝试以下方法来降低内存使用量:

1. 不使用 --dbmem 模式(最直接的办法)

--dbmem 选项会将整个数据库加载到内存中,而你的内存不足以支持它。可以去掉 --dbmem,这样会使用磁盘上的数据库文件,但速度可能会变慢:

/opt/biosoft/eggnog-mapper-2.1.11/emapper.py -m no_search --annotate_hits_table eggNOG.emapper.seed_orthologs -o eggNOG --override

2. 使用 --cpu 限制线程数

如果你使用的是多线程,多个线程会加剧内存占用。你可以通过 --cpu 选项减少并行线程数,比如:  

/opt/biosoft/eggnog-mapper-2.1.11/emapper.py -m no_search --annotate_hits_table eggNOG.emapper.seed_orthologs -o eggNOG --override --cpu 4

如果仍然超内存,可以尝试更小的值(如 --cpu 2)。

3. 逐步处理数据

如果你的输入文件很大,可以把 eggNOG.emapper.seed_orthologs 拆分成多个小文件,分别运行 emapper.py,然后合并结果。例如:  

split -l 1000 eggNOG.emapper.seed_orthologs part_

然后对每个 part_* 文件单独运行 emapper.py,最后合并输出。

4. 交换空间(Swap)

如果一定要使用 --dbmem,但内存不足,可以添加 Swap 来缓解:

sudo fallocate -l 64G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile

这样可以增加 64GB 交换空间,避免进程被系统杀死,但速度会变慢。

5. 使用小型数据库

如果 EggNOG-mapper 允许选择更小的数据库(如某个特定物种的数据库,而不是完整数据库),可以考虑使用较小的数据集,减少内存占用。

如果你仍然遇到问题,可以告诉我你的具体数据量,我可以帮你找到更合适的方法。