概述
频繁的 LSF 查询活动可能给管理主机带来沉重负载,导致 CPU、内存和网络带宽的竞争。LSF 提供了性能监控和诊断工具来帮助识别和解决查询性能问题。
性能监控工具
| 工具 | 说明 |
|---|---|
badmin perfmon |
采样三种主要查询操作(bjobs、bhosts、bqueues) |
badmin diagnose -c query |
跟踪查询来源进行故障排除 |
步骤一:检查查询负载
启用性能监控
1
badmin perfmon start
查看性能数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
% badmin perfmon view
Performance monitor start time: Thu Sep 26 07:00:08
End time of last sample period: Thu Sep 26 12:56:48
Sample period: 60 Second(s)
------------------------------------------------------------------------------
Metrics Last Max Min Avg Total
------------------------------------------------------------------------------
Processed requests: mbatchd 13568 20085 8627 14244 5080543
Job information queries 2311 4969 1938 2989 1066407
Host information queries 6 73 1 12 4611
Queue information queries 9 42 4 10 3885
Job submission requests 1703 2518 554 1525 544160
...
默认启用性能监控
在 lsb.params 中配置:
1
2
SCHED_METRIC_ENABLE=Y
SCHED_METRIC_SAMPLE_PERIOD=60
步骤二:启用查询诊断
如果当前查询负载高于历史平均值,启用查询诊断获取详细查询记录。
方法一:动态查询诊断
1
2
% badmin diagnose -c query -f /tmp/queryload -d 60
Dynamic query diagnosis started and will last 60 minutes.
方法二:默认启用查询诊断
在 lsb.params 中配置:
1
2
ENABLE_DIAGNOSE=query
DIAGNOSE_LOGDIR=/tmp
关闭查询诊断
1
badmin diagnose -c query -o
步骤三:分析查询数据
查询日志格式
LSF 为每个查询请求记录以下字段:
| 字段 | 说明 |
|---|---|
| Time stamp | LSF 处理请求的时间 |
| Command | LSF 命令(API 映射到命令) |
| User | 发起请求的用户 |
| Host | 发起请求的主机 |
| Data Size | 返回给客户端的数据字节数 |
| Command options | 查询命令选项 |
查询日志示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
% bjobs 2 > /dev/null
% bjobs -uall -l |wc
% bhosts |wc
% bhosts -l |wc
% bqueues |wc
% bqueues -lr |wc
% cat /tmp/queryload.querylog.hostA
Sep 26 17:33:37 2022 bjobs,lsfadmin,hostA,124,0x1A
Sep 26 17:34:37 2022 bjobs,lsfadmin,hostA,755635420,0xC00010
Sep 26 17:34:52 2022 bhosts,lsfadmin,hostA,2975544,-
Sep 26 17:34:58 2022 bhosts,lsfadmin,hostA,2975524,-
Sep 26 17:34:58 2022 bhosts,lsfadmin,hostA,6482088,0x0
Sep 26 17:35:13 2022 bqueues,lsfadmin,hostA,29040,0x401
Sep 26 17:35:23 2022 bqueues,lsfadmin,hostA,32598264,0x1
解读:第二条记录显示
bjobs -uall -l发送了 720MB 作业数据(集群中超过50万个作业)
分析技巧
- 按主机排序:识别执行频繁查询的客户端脚本
- 按用户排序:检查谁产生了最多查询
- 按数据大小排序:大数据传输会占用管理主机的网络带宽
优化措施
1. 启用多线程查询
对于大型集群(千台主机以上)和大作业量(数十万作业),建议启用多线程 mbatchd 查询:
1
2
3
# lsf.conf
LSB_QUERY_PORT=<free_port_number>
LSB_QUERY_ENH=y
2. 设置最大并发查询阈值
限制 mbatchd 可以处理的作业查询数量:
1
2
# lsb.params
MAX_CONCURRENT_QUERY=50
3. 避免使用重量级查询
使用 bjobs -o 替代 bjobs -l
1
2
3
4
5
6
7
# 推荐:仅获取需要的字段
% bjobs -o "jobid stat queue job_group delimiter='|'" 3
JOBID|STAT|QUEUE|JOB_GROUP
3|RUN|low_normal|/myproj/user1
# 避免:获取所有作业信息
% bjobs -l
使用 badmin showstatus 获取集群状态
1
2
3
4
5
6
7
# 推荐:使用单个命令获取摘要
% badmin showstatus
LSF runtime mbatchd information
...
# 避免:运行多个命令获取相同数据
% bjobs -u all && bqueues && bhosts
使用 bjobs -sum 获取作业摘要
1
2
3
% bjobs -u user1 -q regression -sum
RUN SSUSP USUSP UNKNOWN PEND FWD_PEND
0 0 0 0 640369 0
配置参数汇总
| 参数 | 配置文件 | 说明 |
|---|---|---|
SCHED_METRIC_ENABLE |
lsb.params | 启用性能指标收集 |
SCHED_METRIC_SAMPLE_PERIOD |
lsb.params | 采样周期(秒) |
ENABLE_DIAGNOSE |
lsb.params | 启用诊断功能 |
DIAGNOSE_LOGDIR |
lsb.params | 诊断日志目录 |
LSB_QUERY_PORT |
lsf.conf | 多线程查询端口 |
LSB_QUERY_ENH |
lsf.conf | 启用增强查询 |
MAX_CONCURRENT_QUERY |
lsb.params | 最大并发查询数 |