我们曾经在LSF实践专题(4):如何限制作业的最大内存中探讨过:在LSF集群中运行作业的时候,存在某些作业使用的程序出现问题,或者没有规划好,导致其他进程无法分配到足够内存的情况。
这次我们继续延伸话题:这样的错误不仅会占用内存,还会浪费CPU资源。如果当前的计算节点并不是作业独占模式,这种情况甚至会影响别的作业正常运行,这时,管理员可以设置作业的“能够使用的内存大小和CPU时间”,来防止某些作业占用过多的内存和CPU资源。
通常,我们可以在queue和application,或者提交作业的时候来设置内存或CPU时间限制,即MEMLIMIT或CPULIMIT的参数值,来限制所有提交到该队列或者application中的作业可以使用的内存大小和CPU时间。
例如设置在queue中:
如图,队列queue1中设置了CPULIMIT=10,表示队列queue1中的作业所使用的CPU时间不能超过10分钟。队列queue2中设置了MEMLIMIT=200,表示队列queue2中的作业使用的内存不能超过200MB。
提示:CPULIMIT的默认单位是分钟,MEMLIMIT的默认单位是MB。
使用badmin mbdrestart命令重启LSF管理节点上的mbatchd服务后,我们通过bqueues -l命令查看两个队列,可以看到生效的LIMIT中写明了对应的单位。
在CPULIMIT中显示了节点名称,是因为在以前不同的CPU架构的效能差异比较大,在比较快的CPU上运行10分钟的工作,可能需要在较差的CPU上运行15到20分钟,所以LSF具有根据不同节点上不同的CPU架构来动态修改CPULIMIT的功能。
但是现在的CPU基本已经没有这个问题,LSF在安装时就自动设置了ABS_RUNLIMIT=Y来去掉这个功能,只是在界面上仍然保留了节点名称的显示,作为兼容老版本的考虑。
接下来我们在application中设置,这次我们尝试一下不同的格式:
我们在app3中设置了CPULIMIT=1:30,这表示设置CPU时间的LIMIT为1小时30分钟,如果写成CPULIMIT=90其实也是一样的效果。同时我们也设置了MEMLIMIT=1G,这里我们带了单位,表示设置内存LIMIT为1GB。
用badmin mbdres