| |||
lsfMonitor是一款发布于2017年的开源工具,因为最近咨询用法和使用问题的比较多,所以在安装包中增补了用户文档docs/lsfMonitor_user_manual.pdf,用于帮助用户更快上手,主要内容如下。
lsfMonitor就是为如上需求提供一站式解决方案。
建议在centos7.9操作系统下使用。
不同版本的python可能会有python库版本问题,按照系统要求安装对应版本的python库即可解决。
LSF 9.*/10.*的版本支持较好,Openlava几个版本间output message有一定差异,并不是所有版本都能够很好支持。
可以采用“git clone https://github.com/liyanqing1987/lsfMonitor.git”的方式拉取源代码。
[liyanqing@cmp1 test]$ git clone https://github.com/liyanqing1987/lsfMonitor.git
Cloning into 'lsfMonitor'...
remote: Enumerating objects: 709, done.
remote: Counting objects: 100% (281/281), done.
remote: Compressing objects: 100% (171/171), done.
remote: Total 709 (delta 177), reused 208 (delta 109), pack-reused 428
Receiving objects: 100% (709/709), 908.67 KiB | 594.00 KiB/s, done.
Resolving deltas: 100% (442/442), done.
也可以在lsfMonitor的github页面上,Code -> Download ZIP的方式拉取代码包。
如果国内的用户不方便访问github,也可以通过如下gitee https://gitee.com/liyanqing1987/ic_flow_platform获取lsfMonitor的源代码。
[liyanqing.1987@n212-206-207 tools]$ cd lsfMonitor/
[liyanqing.1987@n212-206-194 lsfMonitor]$ ls
db docs install.py lib LICENSE monitor README requirements.txt
确认python版本正确,并基于安装包中的requirements.txt安装python依赖库。
[root@ic-admin1 licenseMonitor]# pip3 install -r requirements.txt
Looking in indexes: https://bytedpypi.byted.org/simple/
Requirement already satisfied: pexpect==4.8.0 in /ic/software/tools/python3/3.8.8/lib/python3.8/site-packages (from -r requirements.txt (line 1)) (4.8.0)
Requirement already satisfied: ptyprocess>=0.5 in /ic/software/tools/python3/3.8.8/lib/python3.8/site-packages (from pexpect==4.8.0->-r requirements.txt (line 1)) (0.7.0)
在安装目录下,使用命令“python3 install.py”安装lsfMonitor。
[root@ic-admin1 lsfMonitor]# python3 install.py
>>> Check python version.
Required python version : (3, 5)
Current python version : (3, 8)
>>> Generate script "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/bin/bmonitor".
>>> Generate script "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/bin/bsample".
>>> Generate script "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/tools/check_issue_reason".
>>> Generate script "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/tools/seedb".
>>> Generate script "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/tools/process_tracer".
>>> Generate script "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/tools/show_license_feature_usage".
>>> Generate config file "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/conf/config.py".
Done, Please enjoy it.
# Specify the database directory.
db_path = "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/db"
# Specify lmstat path, example "/*/*/bin".
lmstat_path = ""
# Specify lmstat bsub command, example "bsub -q normal -Is".
lmstat_bsub_command = ""
一个使用的demo配置如下。
# Specify the database directory.
db_path = "/ic/software/cad_data/it/lsfMonitor/db"
# Specify lmstat path.
lmstat_path = "/ic/software/synopsys/scl/2021.03/linux64/bin"
# Specify lmstat bsub command.
lmstat_bsub_command = "bsub -q normal -Is"
[liyanqing.1987@n212-206-207 lsfMonitor]$ monitor/bin/bsample -h
usage: bsample.py [-h] [-j] [-q] [-H] [-l] [-u] [-i INTERVAL]
optional arguments:
-h, --help show this help message and exit
-j, --job Sample running job info with command "bjobs -u all -r -UF".
-q, --queue Sample queue info with command "bqueues".
-H, --host Sample host info with command "bhosts".
-l, --load Sample host load info with command "lsload".
-u, --user Sample user info with command "busers".
-i INTERVAL, --interval INTERVAL
Specify the sampling interval, unit is second. Sampling only once by default".
我们推荐用crontab来定时采样(Jenkins类似),采样时间为5分钟,只采集job/queue/load信息,下面是一个示例。
# For lsfMonitor
*/5 * * * * /ic/software/cad_tools/it/lsfMonitor/monitor/bin/bsample -j
*/5 * * * * /ic/software/cad_tools/it/lsfMonitor/monitor/bin/bsample -q
*/5 * * * * /ic/software/cad_tools/it/lsfMonitor/monitor/bin/bsample -l
直接引用bmonitor绝对路径。
采用modules管理和加载环境,引用bmonitor脚本名即可。
将bmonitor连接到LSF的bsub脚本路径中,引用bmonitor脚本名即可。
推荐第三种方式,下面是具体效果。
[liyanqing.1987@n212-206-207 ~]$ which bmonitor
/ic/software/tools/lsf/10.1/linux2.6-glibc2.3-x86_64/bin/bmonitor
[liyanqing.1987@n212-206-207 lsfMonitor]$ monitor/bin/monitor -h
usage: bmonitor.py [-h] [-j JOBID] [-u USER] [-f FEATURE] [-t {JOB,JOBS,HOSTS,QUEUES,LOAD,LICENSE}] [-dl]
optional arguments:
-h, --help show this help message and exit
-j JOBID, --jobid JOBID
Specify the jobid which show it's information on "JOB" tab.
-u USER, --user USER
Specify the user show how's job information on "JOBS" tab.
-f FEATURE, --feature FEATURE
Specify license feature which you want to see on "LICENSE" tab.
-t {JOB,JOBS,HOSTS,QUEUES,LOAD,LICENSE}, --tab {JOB,JOBS,HOSTS,QUEUES,LOAD,LICENSE}
Specify current tab, default is "JOB" tab.
-dl, --disable_license
Disable license check function.
lsfMonitor的JOB页,主要用于查看指定job的详细信息,以及job内存用量的历史曲线。
获取job详细信息和内存用量曲线
通过job的详细信息,可以帮助用户debug如下常见问题。
内存超量问题 :如果job是EXIT状态,且Mem值大于Rusage值,说明有潜在可能是因为内存(不足)问题导致了job被kill。
追踪job进程(trace job slow issue)
此时是以进程树的方式展现job相关的所有进程,其中核心进程是下面EDA工具的进程。
进程的系统交互情况可以帮助用户判断job运行缓慢的原因,绝大多数情况下,EDA工具运行极端缓慢都是由于工具本身问题导致的。
jobs基本信息
Host | Started | Processer | Slot | Rusage | Mem |
job执行的机器 | job开始RUN的时间 | job申请的cpu核数 | job申请的slots | job申请的memory | job实际使用的memory |
jobs特殊操作/显示
如果Status列为PEND,点击PEND,可以通过工具“check_issue_reason”来查看job PEND的原因。
hosts基本信息
Queue | Ncpus | MAX | Njobs | Ut | Maxmem | Mem | Tmp |
host所属的队列 | host的cpu物理核数 | host接收job的最大数目 | host上job的数目 | host的cpu使用率 | host的内存大小 | host的内存可用量 | host的/tmp空间可用量 |
hosts特殊操作/显示
如果host的tmp可用量变为0,Tmp值会显示为红色,标识/tmp过载。
如果queue中PEND的job数目不为0,数字会被红标。
其中queue的PEND/RUN的历史数据默认展示15天,每天的值都是一个统计均值。
可以通过“Host”下拉菜单选择机器,可以通过“Date”下拉菜单选择时间段(默认是一天)。
其中ut和mem的曲线均可以通过放大镜按钮放大指定部位,也可以通过HOME按钮恢复原状。
license过滤
点击“In_use”列的数字(如果数字非零),可以查看具体谁使用了这些license。
如果某个license feature的START_TIME早于3天前,会标红。
license信息
Server | Vendor | Feature | Issued | In_use |
license server名 | Vendor daemon名 | license feature名 | 一般认为是license file中license的总数,包括过期的部分。 | 在使用的liense feature数目。 |
License Server | Feature | Num | Expires |
license server名 | license feature名。 因为license file可以追加内容,所以同一feature可能在同一license server中出现多次。 | License feature数目 | 过期日期 过期会标灰 两周内过期会标红 |
信息刷新功能
异常job问题检查
在弹出的Check Issue Reason工具中,输入jobid,点击“Check”按钮,如果显示相关问题的检测结果。
[liyanqing.1987@n212-206-207 lsfMonitor]$ ls monitor/tools/
check_issue_reason check_issue_reason.py message.py process_tracer process_tracer.py seedb seedb.py show_license_feature_usage show_license_feature_usage.py
show_license_feature_usage: 组件,图形界面工具,查看license feature的使用情况。
[liyanqing.1987@n212-206-207 lsfMonitor]$ monitor/tools/seedb -h
usage: seedb.py [-h] -d DATABASE [-t TABLES [TABLES ...]] [-k KEYS [KEYS ...]] [-n NUMBER]
optional arguments:
-h, --help show this help message and exit
-d DATABASE, --database DATABASE
Required argument, specify the datebase file.
-t TABLES [TABLES ...], --tables TABLES [TABLES ...]
Specify the tables you want to review, make sure the tables exist.
-k KEYS [KEYS ...], --keys KEYS [KEYS ...]
Specify the table keys you want to review, make sure the table keys exist.
-n NUMBER, --number NUMBER
How many lines you want to see.
下面是一个使用示例,查看load.db数据库中,查看load_n212-206-211表中mem列的前五行数据。
[liyanqing.1987@n212-206-207 lsfMonitor]$ monitor/tools/seedb -d /ic/software/cad_data/it/lsfMonitor/db/monitor/load.db -t load_n212-206-211 -k mem -n 5
DB FILE : /ic/software/cad_data/it/lsfMonitor/db/monitor/load.db
TABLE : load_n212-206-211
========
mem
----
911.9G
910G
908.1G
906G
904.6G
========
日期 | 版本 | 变更描述 | 源代码变更 |
2017 | 1.0 | 发布第一个版本openlavaMonitor,仅支持openlava。 | |
2020 | 1.1 | 更名lsfMonitor,增加对LSF的支持。 | |
2022 | 1.2 | 增加对LICENSE信息获取的支持。 |