#1. 环境配置
1 | #报错缺少时 curses.h: No such file or directory |
#2. 软件安装1
2
3
4
5
6
7wget -c https://github.com/samtools/samtools/releases/download/1.9/samtools-1.9.tar.bz2
tar xvf samtools-1.9.tar.bz2
cd samtools-1.9/
./configure --prefix=~/biosoft/samtools-1.9
make
make install
3. 异常处理
##3.1 samtools打开的文件句柄数目超出Linux限制
问题描述
在使用Samtools进行排序时,遇到如下情况,程序中断,
从截图中可以看到,samtools一共需要合并1032个bam文件,但是在合并到1020个文件时,程序打开文件失败了。
因为常用samtools的时候,我们都知道这个sort.1020.bam 文件,其实是samtools在进行排序处理过程中,生成的中间文件。而这个报错是在合并时出现的(意味着该文件已经生成)。所以经过查找,发现是Linux文件句柄存在限制导致的问题。
1 | $ ulimit -n |
本次问题中,Linux系统支持最多打开1024个文件,但是需要排序的文件超过了这个数字,因为由于句柄超出,软件处理失败。
解决方案
其实Linux是有文件句柄限制的,一般都是1024,因此我们需要把这个值改大一些。这个1024是当前用户给准备要运行的程序的限制。
- 针对非Root用户
1
2
3
4
5
6
7ulimit -n 2048 # 句柄数调整为2048。 #调整当前工作窗口,重启工作窗口后会重置。
```
2. 针对具有root权限的用户
```
$ cat >> /etc/security/limits.conf
soft nofile 1000000
hard nofile 1000000
将ulimit 值添加到/etc/profile文件中(适用于有root权限登录的系统)
为了每次系统重新启动时,都可以获取更大的ulimit值,将ulimit 加入到/etc/profile 文件底部。