解决常见 LSF 问题

大多数问题是由于安装或配置不正确所致。 在开始对 LSF 问题进行故障诊断之前,请始终先检查错误日志文件。 日志消息通常直接指向问题。

查找 LSF 错误日志

发生错误时, LSF 服务器守护程序会在 LSF 日志目录中记录错误消息 (由 lsf.conf 文件中的 LSF_LOGDIR 参数指定)。

过程

确保主 LSF 管理员拥有 LSF_LOGDIR,并且该 root 用户可以写入此目录。
如果 LSF 服务器无法写入 LSF_LOGDIR,那么将在 /tmp中创建错误日志。 LSF 将错误记录到以下文件中:
  • lim.log.host_name
  • res.log.host_name
  • pim.log.host_name
  • mbatchd.log.management_host
  • mbschd.log.management_host
  • sbatchd.log.management_host
  • vemkd.log.management_host

如果这些日志文件包含您不了解的任何错误消息,请联系 IBM 支持人员。

诊断和解决大多数 LSF 问题

大多数 LSF 问题的常规故障诊断步骤。

过程

  1. 运行 lsadmin ckconfig -v 命令并记录命令输出中显示的任何错误。
    请在本节中描述的其中一个问题中查找错误。 如果这些故障诊断步骤都不适用于您的情况,请联系 IBM 支持人员。
  2. 使用以下命令来重新启动 LSF 集群:
    # bctrld restart lim all
    # bctrld restart res all
    # bctrld restart sbd all
  3. 运行 ps -ef 命令以查看 LSF 守护程序是否正在运行。
    查找类似于以下命令输出的进程:
    root 17426     1  0   13:30:40 ?    0:00 /opt/lsf/cluster1/10.1.0/sparc-sol10/etc/lim
    root 17436     1  0   13:31:11 ?    0:00 /opt/lsf/cluster1/10.1.0/sparc-sol10/etc/sbatchd
    root 17429     1  0   13:30:56 ?    0:00 /opt/lsf/cluster1/10.1.0/sparc-sol10/etc/res
  4. 检查 LSF_CONFDIR/lsf.cluster.cluster_name 文件的 Host 部分中列出的前几个主机上的 LSF 错误日志。
    如果在 LSF_CONFDIR/lsf.conf 文件中定义了 LSF_MASTER_LIST 参数,请改为检查此参数中列出的主机上的错误日志。

无法打开 lsf.conf 文件

当您运行 lsid 文件时,可能会看到此消息。 此消息通常表示 LSF无法访问 LSF_CONFDIR/lsf.conf 文件。

关于本任务

缺省情况下, LSF 会检查 lsf.conf 文件的 LSF_ENVDIR 参数定义的目录。 如果 lsf.conf 文件不在 LSF_ENVDIR中,那么 LSF 会在 /etc 目录中查找该文件。

如需了解更多信息,请参阅使用 cshrc.lsf 和 profile.lsf 设置 LSF 环境

过程

  • 确保存在从 /etc/lsf.conflsf.conf的符号链接
  • 使用 csrhc.lsfprofile.lsf 脚本来设置 LSF 环境。
  • 确保 cshrc.lsfprofile.lsf 脚本可供用户设置 LSF 环境变量。

LIM 已悄然死亡

LSF LIM 守护程序意外退出时,请检查 LIM 配置文件中是否存在错误。

过程

运行 lsadmin ckconfig -v 命令。

此命令显示大多数配置错误。 如果该命令未报告任何错误,请检入 LIM 错误日志。

LIM 通信超时

有时 LIM 已启动,但运行 lsload 命令会显示Communication time out

关于本任务

如果 LIM 刚刚启动,那么 LIM 需要时间通过读取配置文件并与 LIM的其他实例联系来初始化。 如果 LIM 在一两分钟内不可用,请检查您正在处理的主机的 LIM 错误日志。

要在本地 LIM 启动或重新启动时防止通信超时,请在 lsf.conf 文件中定义参数 LSF_SERVER_HOSTS 。 客户机在其中一个 LSF_SERVER_HOSTS 上联系 LIM 并运行命令。 列表中定义的至少一个主机必须具有已启动并正在运行的 LIM

当本地 LIM 正在运行但集群没有 管理 主机时, LSF 应用程序将显示Cannot locate master LIM now, try later. 消息。

过程

检查 lsf.cluster.cluster_name 文件的 Host 部分中列出的前几个主机上的 LIM 错误日志。 如果在 lsf.conf 文件中定义了 LSF_MASTER_LIST 参数,请改为在此参数中列出的主机上检查 LIM 错误日志。

管理 主机 LIM 已关闭

有时 management host LIM 已启动,但运行 lsloadlshosts 命令会显示Master LIM is down; try later.消息。

关于本任务

如果正在运行 管理 主机 LIM 的主机上的 /etc/hosts 文件配置了分配给回送 IP 地址 (127.0.0.1) 的主机名,那么 LSF 客户机 LIM 无法联系 管理 主机 LIM。 当 管理 主机 LIM 启动时,它会将其官方主机名和 IP 地址设置为回送地址。 任何客户机请求都会以 127.0.0.1的形式获取 管理 主机 LIM 地址,并尝试连接到该地址,实际上会尝试访问自身。

过程

/etc/hosts中检查 管理 主机 LIM 的 IP 配置。
以下示例错误地将 管理 主机 LIM IP 地址设置为回送地址:
127.0.0.1   localhost   myhostname
以下示例正确设置 管理 主机 LIM IP 地址:
127.0.0.1    localhost
192.168.123.123   myhostname

对于在使用 IPv6 地址的主机上运行的 管理 主机 LIM ,回送地址为 ::1

以下示例使用 IPv6 地址正确设置 管理 主机 LIM IP 地址:
::1    localhost ipv6-localhost ipv6-loopback 
 
fe00::0     ipv6-localnet 
 
ff00::0     ipv6-mcastprefix
ff02::1     ipv6-allnodes
ff02::2     ipv6-allrouters
ff02::3     ipv6-allhosts

用户许可权被拒绝

如果远程主机无法安全地确定请求远程执行的用户的用户标识,那么远程执行将失败User permission denied

过程

  1. 请检查远程主机上的 RES 错误日志以获取更详细的错误消息。
  2. 如果不想配置标识守护程序 ( lsf.conf中的LSF_AUTH ) ,那么执行远程执行的所有应用程序都必须由具有 setuid 位集的 root 用户拥有。 运行 chmod 4755 filename 命令。
  3. 如果应用程序二进制文件位于 NFS安装的文件系统上,请确保未使用 nosuid 标志安装该文件系统。
  4. 如果您正在使用标识守护程序 ( lsf.conf 文件中的 LSF_AUTH 参数) ,那么必须配置 inetd 守护程序。 不能直接运行标识守护程序。
  5. 名称服务器中与 /etc/hosts/etc/hosts.equiv 不一致的主机名也可能导致此问题。 如果在 lsf.conf 文件中定义了 LSF_USE_HOSTEQUIV 参数,请检查目标主机上的 /etc/hosts.equiv 文件或 HOME/.rhosts 文件中是否包含客户机主机名。
  6. 对于 Windows 主机,用户必须使用 lspasswd 命令注册和更新其 Windows 密码。 密码必须为 3 个字符或更长, 31 个字符或更少。

    对于非共享文件系统环境中的 Windows 密码认证,必须在 lsf.conf 文件中定义参数 LSF_MASTER_LIST ,以便作业以正确的许可权运行。 如果未定义此参数,那么 LSF 假定集群使用共享文件系统环境。

由于非统一文件名空间,远程执行失败

非统一文件名空间可能导致命令失败,chdir(...) failed: no such file or directory消息。

关于本任务

您正在尝试远程运行命令,但远程主机上不存在当前工作目录,或者当前工作目录映射到远程主机上的其他名称。

如果远程主机上不存在当前工作目录,请不要在该主机上远程运行命令。

过程

  • 如果目录存在,但映射到远程主机上的其他名称,那么必须创建符号链接以使其一致。
  • LSF 可以使用 automount来解决大多数 (但并非所有) 问题。 必须通过 NIS 管理自动安装映射。

    如果您正在运行自动安装,并且 LSF 无法在远程主机上找到目录,请联系 IBM 支持人员。

批处理守护程序悄然死亡

LSF 批处理守护程序 sbatchdmbatchd 意外退出时,请检查配置文件中是否存在错误。

关于本任务

如果 mbatchd 守护程序正在运行,但 sbatchd 守护程序在某些主机上死亡,那么可能是因为 mbatchd 未配置为使用这些主机。

过程

  • 检查 sbatchdmbatchd 守护程序错误日志。
  • 运行 badmin ckconfig 命令以检查配置。
  • LSF 管理员邮箱中检查电子邮件。

sbatchd 已启动,但 mbatchd 未启动

sbatchd 守护程序启动但 mbatchd 守护程序未运行时, mbatchd 可能暂时不可用,因为 管理 主机 LIM 暂时未知。 该sbatchd: unknown service 将显示错误消息。

过程

  1. 运行 lsid 命令以检查 LIM 是否正在运行。
    如果 LIM 未正常运行,请遵循以下主题中的步骤来解决 LIM 问题:
  2. 检查是否正确注册了服务。

避免孤立作业进程

LSF 使用进程组来跟踪作业的所有进程。 但是,如果应用程序派生了子代,那么该子代将成为新的进程组。 父进程将立即终止,并且子进程组将与父进程孤立,并且无法跟踪。

关于本任务

有关使用 Linux cgroups 跟踪进程的更多信息,请参阅基于 Linux cgroup 内存子系统的内存和交换限制执行

过程

  1. 启动作业时,应用程序将在作业 RES 或根进程组下运行。
  2. 如果应用程序创建新的进程组,并且其父进程标识 (PPID) 仍属于该作业,那么 PIM 可以在该作业中跟踪此新进程组。

    不丢失进程跟踪的唯一可靠方法是防止它使用新的进程组。 当子进程与父进程组成为孤线程时,任何使其自身化的进程都将丢失,因为它会在拆离后立即更改其进程组。

我的主机不用于 LSF

mbatchd 守护程序允许 sbatchd 守护程序仅在 lsb.hosts 文件的 Host 部分中列出的主机上运行。 如果在以下配置中配置未知主机,那么 mbatchd 会记录错误消息: HostGrouplsb.hosts 文件的 HostPartition 部分,或者作为 lsb.queues 文件中队列的 HOSTS 定义。

关于本任务

如果尝试配置未在 lsb.hosts 文件的 Host 部分中列出的主机,那么 mbatchd 守护程序将记录以下消息。

mbatchd on host: LSB_CONFDIR/cluster1/configdir/file(line #): Host hostname is not used by lsbatch; ignored

如果在 mbatchd 守护程序未知的主机上启动 mbatchd 守护程序,那么 mbatchd 将拒绝 sbatchdsbatchd 守护程序记录This host is not used by lsbatch system.消息并退出。

过程

  • 将未知主机添加到 lsb.hosts 文件的 Host 部分中的主机列表。
  • 在新主机上启动 LSF 守护程序。
  • 运行以下命令以重新配置集群:
    lsadmin reconfig
    badmin reconfig

未知主机类型或型号

模型或类型 UNKNOWN 指示主机已关闭或主机上的 LIM 已关闭。 您需要立即执行操作以在 UNKNOWN 主机上重新启动 LIM

过程

  1. 启动主机。
  2. 运行 lshosts 命令以查看具有 UNKNOWN 主机类型或型号的主机。
    lshosts
    HOST_NAME  type       model   cpuf   ncpus  maxmem   maxswp  server   RESOURCES 
    hostA   UNKNOWN      Ultra2   20.2       2    256M    710M      Yes   ()
  3. 运行 bctrld start lim 命令以在主机上启动 LIM :
    bctrld start lim hostA
    Starting up LIM on <hostA> .... done
    
    如果在 LSF 集群中启用了 EGO ,那么可以改为运行以下命令:
    egosh ego start lim hostA
    Starting up LIM on <hostA> .... done

    可以指定多个主机名以在多个主机上启动 LIM 。 如果未指定主机名,那么将在提交命令的主机上启动 LIM

    要在 UNIX 或 Linux上远程启动 LIM ,您必须是 root 用户或列示在 lsf.sudoers 文件中 (如果在 LSF 集群中启用了 EGO ,那么必须是 ego.sudoers 文件)。 您必须能够在所有主机上运行 rsh 命令,而无需输入密码。

  4. 等待几秒钟,然后再次运行 lshosts 命令。

    lshosts 命令显示主机或 DEFAULT的特定模型或类型。 如果看到 DEFAULT,那么意味着自动检测主机类型或模型失败,并且找不到 lsf.shared 文件中配置的主机类型。 LSF 在主机上工作,但由于 CPU 因子不正确, DEFAULT 模型可能效率低下。 DEFAULT 类型还可能导致二进制不兼容,因为可以将来自 DEFAULT 主机类型的作业迁移到其他 DEFAULT 主机类型。

缺省主机类型或模型

如果在 lim -t中看到 DEFAULT ,那么意味着自动检测主机类型或模型失败,并且找不到 lsf.shared 文件中配置的主机类型。 LSF 在主机上工作,但由于 CPU 因子不正确, DEFAULT 模型可能效率低下。 DEFAULT 类型还可能导致二进制不兼容,因为可以将来自 DEFAULT 主机类型的作业迁移到其他 DEFAULT 主机类型。

过程

  1. 运行 lshosts 命令以查看哪个主机具有 DEFAULT 主机模型或类型。
    lshosts
    HOST_NAME     type    model     cpuf   ncpus  maxmem  maxswp   server  RESOURCES 
    hostA     DEFAULT  DEFAULT        1       2    256M   710M       Yes  ()

    如果在使用 lshosts 命令时 ModelType 显示为 DEFAULT ,并且启用了自动主机模型和类型检测,那么可以将其保留为现状或进行更改。

    如果主机型号为 DEFAULT,那么 LSF 正常工作,但主机的 CPU 系数为 1 ,这可能无法有效使用主机型号。

    如果主机类型为 DEFAULT,那么可能存在二进制不兼容性。 例如,如果一个主机是 Linux ,另一个主机是 AIX,但这两个主机都设置为类型 DEFAULT,那么可以将 Linux 主机上运行的作业迁移到 AIX 主机,或者可以将运行 AIX 主机的作业迁移到 Linux 主机,这可能会导致作业失败。

  2. 在类型为 DEFAULT的主机上运行 lim -t :
    lim -t
    Host Type             : NTX64
    Host Architecture     : EM64T_1596
    Total NUMA Nodes      : 1
    Total Processors      : 2
    Total Cores           : 4
    Total Threads         : 2
    Matched Type          : NTX64
    Matched Architecture  : EM64T_3000
    Matched Model         : Intel_EM64T
    CPU Factor            : 60.0
    注: HostTypeHost Architecture的值。
  3. 编辑 lsf.shared 文件以配置主机类型和主机模型。
    1. HostType 部分中,输入新的主机类型。 使用通过 lim -t 命令检测到的主机类型名称。
      Begin HostType
      TYPENAME 
      DEFAULT 
      CRAYJ
      NTX64
      ...
      End HostType
    2. HostModel 部分中,输入具有体系结构和 CPU 因子的新主机模型。 使用通过 lim -t 命令检测到的体系结构。 将主机模型添加到主机模型列表的末尾。 主机模型条目的限制为 127。 使用 # 注释掉的行不会计入 127 行限制中。
      Begin HostModel
      MODELNAME   CPUFACTOR     ARCHITECTURE # keyword
      Intel_EM64T      20             EM64T_1596
      End HostModel
  4. 保存对 lsf.shared 文件所作的更改。
  5. 运行 lsadmin reconfig 命令以重新配置 LIM
  6. 请等待几秒钟,然后再次运行 lim -t 命令以检查主机的类型和型号。

无法在某些主机上运行 b* 命令,因为这些主机上有User permission denied错误

如果您无法从某些主机运行 b* 命令(例如,您看到一个User permission denied消息),主机上的时钟或时区可能与管理主机不同步。 b* 命令需要身份验证,客户端(使用 eauth )会生成一个包含时间戳的用户令牌,并将该令牌与命令请求一起传递给管理主机。 如果令牌过期,命令将被拒绝。 确保群集中的所有主机同步。 您可以在群集中的所有主机上配置 NTP(网络时间协议),以确保所有主机上的所有时钟同步。