核心参数与内存公式
| 参数 | 含义 | 建议 |
|---|---|---|
| -m | 每线程排序内存 | 1-4G(默认 768M 偏保守) |
| -@ | 额外线程数 | 物理核数 - 1 |
| -T | 临时文件前缀/目录 | 指向 NVMe 大分区 |
| --output-fmt | 输出格式 | bam + level=1(排序时低压缩更快) |
内存估算:总占用 ≈ -m × (-@ + 1)。32 核机器配 128GB 内存,安全组合是 -m 3G -@ 30(约 93GB)。超出物理内存会触发临时文件分片,速度骤降。
典型性能参考
- 100GB WGS BAM 排序:16 核 / -m 2G,NVMe 上约 40-60 分钟;机械盘上可能 4 小时+
- markdup 前的排序与 fixmate:建议 sort → fixmate -m → sort → markdup 三步流(Picard 风格),全流程 IO 密集
高频报错
- No space left on device:-T 临时目录满,换大盘
- Killed(OOM):-m × 线程数超内存,调小 -m 或线程数
- sort 极慢但 CPU 闲:IO 瓶颈,换 NVMe 或降低压缩级别
重测序团队处理大队列时,把排序/标记重复这类 IO 密集步骤集中到 NVMe 充足的机器上,整体流程时间可以砍半。
常见问题
samtools sort 总内存占用怎么算?
总内存 ≈ -m(每线程排序内存)× -@(线程数)+ 少量开销。例如 -m 2G -@ 8 约占 17GB。
排序时提示 No space left on device?
是 -T 指定的临时目录满了。把 -T 指向大盘(NVMe),并预留约 1.5 倍 BAM 大小的空间。