Linux||你的服务器怎么一片绿?
最近用学校服务器跑RNA-seq数据的时候,遇到过好几次以下的情况,特别是序列比对、生成sam文件和sam转bam文件。
说实话这么绿的情况我只在我的基金里看到过,慌得一批,生怕哪天管理服务器的老师就来找我了。
究其原因,还是我在跑程序的时候,没有及时设置用多少内存和多少核心。
那么问题来了!
如何查看服务器的CPU信息
在任意目录下,使用cat /proc/cpuinfo查看CPU的信息
随便列举一个
重要参数信息
1.processor:逻辑处理器的id
2.physical id:物理封装的处理器的id
3.core id:该逻辑处理器所处物理CPU的物理核id
4.cpu cores:位于相同物理封装处理器的内核数量
5.siblings:该逻辑处理器所处物理CPU的逻辑处理器的数量
逻辑CPU:所谓的4核8线程,4核指的是物理核心。用Intel的超线程技术(HT)将物理核虚拟而成的逻辑处理单元,现在大部分的主机的CPU都在使用超线程技术,用一个物理核模拟两个虚拟核,即每个核两个线程,总数为8线程。 串行、并发和并行:串行指多个任务,执行时一个执行完再执行另一个。因此串行不宜使用多个节点,会浪费资源。并发指多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。并行指每个线程分配给独立的核心,线程同时运行。
如何操作
cat /proc/cpuinfo | grep 'physical id' | sort | uniq # 抓取physical id
可以看出有两个physical id:0、1
cat /proc/cpuinfo | grep 'cpu core' | sort | uniq # 抓取cpu core
cpu cores:14
cat /proc/cpuinfo | grep 'core id' | sort | uniq # 抓取core id
core id:0~14(无7)
cat /proc/cpuinfo | grep 'processor' | sort | uniq # 抓取processor
图太长只截了部分
processor:0~55
cat /proc/cpuinfo | grep 'siblings' | sort | uniq # 抓取siblings
siblings:28
因此,我用的服务器上physical id有2个,cpu core有14个,core id有14个,processor有56个,siblings有28个。即该服务器的CPU有两个物理封装的处理器,每个物理封装的处理器有14个核,每个核有两个逻辑处理器,因此每个物理封装的处理器有28个逻辑处理器。
另外,通过lscpu也可以查看cpu信息
参数信息
1.Architecture:架构
2.CPU op-mode(s):支持的模式
3.Byte Order:字节排列的顺序
4.CPU(s):逻辑CPU个数
5.On-line CPU(s) list:在线的CPU列表,就好像华农的充电桩,坏掉就会下线
6.Thread(s) per core:每个核心的线程数
7.Core(s) per socket:每个物理CPU的核数
8.CPU socket(s):物理CPU的数量
9.NUMA node(s):MNUMA节点数量
10.Vendor ID:CPU厂商ID
11.CPU family:厂商设定的CPU家族编号
如何查看服务器内存和使用情况
1.top
红框中为内存信息
2.htop
3.ps
ps命令只能查看部分使用情况
对比下来,显然是htop更加的简洁清晰,需要注意的是htop需要另外安装。
conda install -y htop
一次性占用过多线程该怎么办
这还不简单?!全部kill掉!然后重新设置程序!
通过htop查看自己的进程,可以看到command里正在运行的程序
1.killall
# killall的帮助文档
[CPST2018301210701@localhost aligned]$ killall --help
Usage: killall [-Z CONTEXT] [-u USER] [ -eIgiqrvw ] [ -SIGNAL ] NAME...
killall -l, --list
killall -V, --version
-e,--exact require exact match for very long names
-I,--ignore-case case insensitive process name match
-g,--process-group kill process group instead of process
-y,--younger-than kill processes younger than TIME
-o,--older-than kill processes older than TIME
-i,--interactive ask for confirmation before killing
-l,--list list all known signal names
-q,--quiet don't print complaints
-r,--regexp interpret NAME as an extended regular expression
-s,--signal SIGNAL send this signal instead of SIGTERM
-u,--user USER kill only process(es) running as USER
-v,--verbose report if the signal was successfully sent
-V,--version display version information
-w,--wait wait for processes to die
-Z,--context REGEXP kill only process(es) having context
(must precede other arguments)
我试过killall -u CPST2018301210701(CPST2018301210701是我的用户名),如果此时你运行了A命令,且除了A以外没有其他重要正在运行,可以采用这种方式杀掉程序,效果类似于你的电脑里开了游戏、视频、音乐,突然你按了电源键。
2.kill
显然在大多数时候,我们只需要杀掉某一类含有特定参数命令的进程,这个时候killall就不适用了。
我们可以通过kill命令来实现上述要求。通常是[kill + PID],但如果一个命令多线程运行,会有不同的PID号,当然可以通过脚本来依次kill,但我们采用更方便的命令完成上述操作。
红框里就是PID
ps -ef | grep wrapper | grep -v grep | awk '{print $2}' | xargs kill -9
# ps命令用来列出系统中正在运行的进程,类似于top和htop,-ef参数会显示所有的进程信息
# grep用于过滤特定的字符,grep warpper即显示包括wrapper的命令
# -v显示不包含匹配文本的行,grep -v grep即显示上一步筛选结果中不包括grep的命令
# awk在文件或字符串中基于指定规则浏览和抽取信息;awk '{print $2}'将上一步中过滤得到的进程进行打印,$2表示打印第二个域(PID,进程号) $0表示所有域,$1表示第一个域,$n表示第n个域。
# xargs是给命令传递参数的过滤器,把标准数据数据转换成命令行参数。在这里则是将获取前一个命令的标准输出然后转换成命令行参数传递给后面的kill命令。
# kill -9强制关闭进程
此外也可通过cut命令
ps -ef | grep test | grep -v grep | cut -c 9-15 | xargs kill -9 # cut -c 9-15仅显示第9-15个字符(即PID,进程号)
如何设置使用多少线程
对于使用集群的小伙伴来说,不同集群采用的提交作业的命令不一样,比如我们学校二综的集群采用LSF作业调度系统来负责计算资源的管理和批量处理作业的调度。因此其使用者可以通过bsub命令申请多个节点运行程序。
对于没有多个节点的服务器来说,只能通过程序自身的CPU设置。以序列比对为例。
通过hisat2 --help查看帮助文档
我们发现它有一个-p参数可以设置比对的线程数
以下是我的脚本
for ((i=62;i<=67;i++));
do
hisat2 -t -p 2 -x /home/Bioinfor/CPST2018301210701/ncbi/public/sra/reference/index/hg38/genome -1 /home/Bioinfor/CPST2018301210701/rna/data.fastq.double/data.fastq/SRR105029${i}_1.fastq -2 /home/Bioinfor/CPST2018301210701/rna/data.fastq.double/data.fastq/SRR105029${i}_2.fastq -S /home/Bioinfor/CPST2018301210701/ncbi/public/sra/aligned/SRR105029${i}.sam &
done
通过nohup bash aligned.sh运行并htop查看我的命令后
下方绿色的是正在运行的
我们发现最上方占用了13个线程,除去其他用户占用的1个线程,剩下的12个就是我们序列比对所占用的线程。
可我们明明设置的是-p 2即两个线程呀!
我又将-p依次改成了1 3 4发现hisat2 -p设置线程的时候本身存在着一个6倍的关系,即-p 1对应了6个线程,-p 2对应了12个线程,依次类推
我们再回头看看推文开头为什么会出现一片绿的情况,在查询了脚本以后,我发现-p参数为8,即我会占用48个线程,再加上其他用户使用的1个线程,共49个,49/56=87.5%,正好和下方CPU占用率吻合了!
人就用了1个,我用了48个还真挺不好意思
至于其他软件是否有其他的线程对应关系,就交给以后再去尝试吧~
参考资料:
https://blog.csdn.net/u012062455/article/details/78358113 https://mp.weixin.qq.com/s/vr__hseQcP3oAqjW217kSw https://blog.csdn.net/zhengyshan/article/details/80641770 https://blog.csdn.net/weiyichenlun/article/details/59108463
相关文章
- 本地文件传输至Linux服务器实现快速上传(本地文件上传到linux服务器)
- 执行Linux脚本:步骤指南(怎么执行linux脚本)
- Linux服务器实现文件快速传输(linux服务器传输文件)
- 排查Linux服务器连接问题的终极指南(linux服务器连接不上)
- Linux下使用PHP开发软件的简易指南(linux下php开发)
- 简易步骤:Linux系统搭建PXE服务器(linux搭建pxe服务器)
- 让Linux服务器成为轻松搭建的利器(linux服务器架设)
- Linux 无法完成“make”的困境(linux不能make)
- 操作 学习Linux节点操作,打开新世界大门(linux节点)
- 服务器深入Linux世界:拷贝文件到服务器(如何拷贝文件到linux)
- 指南:如何用U盘安装Linux系统(怎么用u盘装linux系统)
- Linux快速读取文件行数的技巧(linux读取文件行数)
- Linux中探索端口号和PID的奥秘(linux端口pid)
- Linux: 让文件增添多彩色彩(linux颜色文件)
- 探索Linux服务器的入口:如何访问(如何访问linux服务器)
- 邮件服务器架设Linux电子邮件服务器,让你自由畅快收发邮件(linux电子)
- Linux下打开终端的简单技巧(在linux怎么打开终端)
- 极速畅网:在Linux服务器上享受自由浏览(linux服务器上网)
- 学习Linux:一步一个脚印(怎么学习linux)
- 深入探索 Linux 网络服务器:提供可靠稳定的网络服务(linux网络服务器)
- Linux下编译EXE文件的步骤(linux编译exe)
- Linux系统中操作日志记录技巧(linux记录操作日志)
- 探秘深澜Linux:开源网络安全利器(深澜linux)
- Linux put 命令:把文件上传到服务器的神奇方法(linux put 命令)
- 海外旅程:探索Linux服务器的新可能(国外linux服务器)
- Linux下域名解析服务器配置实现(linux域名解析服务器)