主机健康诊断

物联网边缘计算的主机管理页面为您提供了主机健康诊断功能,可以对主机的系统配置、系统运行状态、系统软件运行状态、主机网络状态、主机历史运行状态进行全方位的诊断,帮助您了解主机的健康状态,及时发现并解决常见的问题。

使用限制

仅主机节点为EDGEBOX节点或融合节点,且带k8s底座的主机支持主机健康诊断功能。

操作步骤

  1. 登录边缘计算控制台

  2. 从左侧导航栏中的下拉框,选择您的实例。

  3. 在左侧导航栏选择节点管理 > 主机管理

  4. 在目标主机右侧操作列中单击主机详情。

  5. 在主机详情页中,单击健康诊断页签,并单击开始诊断

    对主机的系统配置、系统运行状态、系统软件运行状态、主机网络状态、主机历史运行状态五个方面进行检查,大约耗时2分钟。

    说明

    如果您的主机底座k8s-launcher版本不存在,则界面显示立即升级,请按照界面指引进行升级后再进行健康诊断。

    image

  6. 诊断完成后,单击查看报告查看诊断结果,并根据提示诊断结果和建议进行问题修复。

系统配置诊断

诊断项

说明

内核参数检测

内核参数推荐值如下:

  • net.bridge.bridge-nf-call-ip6tables=1

  • net.bridge.bridge-nf-call-iptables=1

  • net.ipv4.ip_forward=1

  • net.ipv4.conf.all.forwarding=1

  • net.ipv6.conf.all.forwarding=1

  • fs.inotify.max_user_watches=524288

  • net.ipv4.conf.all.arp_ignore=1

  • net.ipv4.conf.all.arp_announce=2

可根据需要使用命令对参数进行调整。

命令示例:将net.ipv4.conf.all.arp_announce设置为2。

touch /etc/sysctl.conf && sed -i '/net.ipv4.conf.all.arp_announce/d' /etc/sysctl.conf && echo 'net.ipv4.conf.all.arp_announce=2' >> /etc/sysctl.conf && sysctl -p /etc/sysctl.conf

SELinux检测

检查SELinux是否已禁用。

如果SELinux没有禁用,可执行如下命令进行禁用。

sudo setenforce 0 > /dev/null ; sudo sed -i '/SELINUX=/d' /etc/selinux/config ; sudo echo -e "SELINUX=disabled" >> /etc/selinux/config

Swap分区关闭检测

检查Swap分区是否已关闭。

如果Swap分区没有关闭,可执行如下命令进行关闭。

swapoff -a; sed -i '/\bswap\b/d' /etc/fstab

CPU工作模式检测

CPU是否已设置为高性能模式(interactive)。

IPv6 DNS检测

检查/etc/resolv.conf文件是否存在IPv6地址。

如果存在,可手动编辑此文件进行修复。

系统运行状态诊断

诊断项

诊断结果

修复方案

CPU Load检查

系统负载过高

Load值越高,说明任务队列越长,处于等待执行的任务越多。可通过top命令查看系统负载,load average: 3.47, 2.17, 1.91 表示1分钟、5分钟、15分钟内的平均Load值。

您可通过如下方法进行排查:

  • 若CPU使用率高导致系统负载高,排查CPU使用率过高的原因。

  • 若CPU使用率低,但负载高,可能系统存在大量磁盘、网络IO等待的情况,也有可能存在僵尸进程。

CPU温度检查

CPU温度过高

请确认如下问题:

  • 一体机运行环境温度是否过高。

  • CPU使用率是否过高。

若不存在上述问题,可能是风扇转速过慢或者其他硬件问题导致。

内存使用率诊断

内存或CPU使用率过高

如果主机的内存或CPU持续保持高使用率,会对系统稳定性和业务运行造成影响。以Linux系统为例,您可以按如下方法进行处理。

在Linux系统中,可以使用vmstattopps -auxps -ef等常用命令查看系统进程,下面介绍使用top命令找到导致内存或CPU使用率过高的进程。

  1. 执行命令top

  2. 关注回显的第一行和第三行信息。

    • 第一行:top - 13:26:13 up 2:07, 1 user, load average: 3.47, 2.17, 1.91,依次为系统当前时间、系统到目前为止已运行的时间、当前登录系统的用户数量、系统负载。

    • 第三行:显示当前CPU资源的总体使用情况,下方显示各个进程的资源占用情况。

  3. 通过P键,可以对CPU使用率进行排列,帮助定位系统中CPU使用率较高的进程。

  4. 通过M键,可以对系统内存使用情况进行排序。如果有多核CPU,数字键1可以显示每核CPU的负载状况。

  5. 执行命令ll /proc/PID/exe,可以查看每个进程ID对应的程序文件。image

  6. 若确定CPU、内存消耗过大的进程存在问题,可以使用kill命令终止进程。从长远的角度需分析进程消耗过多CPU或内存的原因,并进行优化。

CPU使用率诊断

磁盘使用率检测

磁盘空间使用率过高

使用命令sudo du -h --max-depth=1从根目录逐步查找对应的大目录或文件,结合业务情况对相关文件或目录进行删除。

从长远的角度需分析大文件产生的原因并进行优化,或者对磁盘进行扩容。导致磁盘使用率过高常见的原因有:没有设置日志回滚策略或者设置不合理,历史文件没有及时进行清理等,这些问题都会导致磁盘使用率持续上涨,当上涨到某个阈值时,会导致系统或应用程序运行异常。

磁盘Inode使用率检测

磁盘Inode使用率过高

系统存在过多小文件导致,需要及时对小文件进行清理,否则会有无法正常创建文件的风险。

  1. 执行df -i命令,可以查询inode的使用情况。

    如果inode使用率达到或接近100%,需清理inode占用量高的文件或目录。

  2. 登录服务器,执行命令:for i in /*; do echo $i; find $i | wc -l; done,展示根目录下二级目录中的文件数量。

  3. 进入文件数量最大的目录,继续执行上述指令,逐层定位占用过大空间的文件或目录,最后进行清理。

Pid和Threads使用率情况检测

Pid和Threads达到上限

系统当前的进程数达到系统允许创建的最大限制。若出现此问题,会导致系统进程无法正常创建。

文件系统读写检测

文件无法正常读写

您可以尝试在主机上创建文件,如果出现No space left on device …的报错信息,一般是如下问题导致:

  • 磁盘分区空间使用率过高。

  • 磁盘分区inode使用率过高。

  • 存在僵尸文件(已删除文件因句柄被占用未释放,导致相应空间未释放文件)。

如果不存在上述问题,可能是磁盘或文件系统损坏导致。

僵尸进程检测

出现僵尸进程

如下命令可以查看当前系统存在的僵尸进程:

ps -A -ostat,ppid,pid,cmd | grep -v color | grep -e '^[Zz]'

僵尸进程无法终止,也无法自行退出,只能通过恢复其依赖的资源或重启系统来解决。如果选择重启系统来解决僵尸进程,请先确保重启系统对业务无影响。

主机网络状态诊断

诊断结果

修复方案

网络不通

排查思路如下:

  1. ping本机的IP以及局域网网关的IP,如果ping不通,说明局域网配置有问题。

  2. ping外网IP,例如:223.5.5.5(阿里云DNS的IP)。

    • 可以ping通,说明IP层的配置正确。

    • 如果ping不通,说明无法连通外网,一般是默认路由没有设置,或者设置了多条默认路由,使用命令ip route可查看路由表,带有default字样的为默认路由。

  3. ping外网域名,例如www.baidu.com。

    • 可以ping通,说明DNS配置正确。

    • 如果ping不通,说明DNS配置有问题,需检查DNS配置文件/etc/resolv.conf的内容。

图示如下:image

    IP冲突

    在检测出IP地址冲突的主机上,使用arping -D -I ethN x.x.x.x命令(其中x.x.x.x为本机的IP地址),执行命令后,如果没有任何输出,则表示本IP地址无冲突。 如果IP冲突,执行命令后会显示冲突的IP地址使用的MAC地址,您需重新配置网络。

    arping -D -I 网卡名 IP

    image

    存在DHCP搜索域注入

    查看宿主机文件/etc/resolv.conf文件,发现存在search DHCP HOST,可能会导致域名无法正常解析。image

    您可以尝试如下步骤解决:

    1. 执行命令ip route | grep default,找到默认网卡。image

    2. 执行命令 nmtui进行网络配置。

    3. 网络编辑器中单击编辑连接,按照下图所示进行配置。image

    4. 执行如下命令检查配置是否生效。

      cat /etc/sysconfig/network-scripts/ifcfg-enp2s0

      说明

      关掉搜索域注入后,PEERDNS会变为no,该配置需重启机器才能生效。重启机器前需检查其他配置是否正确,以免重启后因连不上网而直接离线。

      x86和arm的网卡配置文件目录分别如下:

      • x86:/etc/sysconfig/network-scripts

      • arm:/etc/NetworkManager/system-connections

      需关注如下参数:

      • BOOTPROTO:获得IP地址的方式,dhcp(动态IP)static(静态IP),此处需为dhcp。

      • ONBOOT:系统启动时是否激活网卡,此处需为yes。

      • DNS:DNS服务配置,推荐 223.5.5.5,223.6.6.6,也可根据实际情况配置。

      • PERRDNS:是否允许自动注入搜索域,此处需为no。

        • x86:/etc/sysconfig/network-scripts

        • arm:/etc/NetworkManager/system-connections

    5. 执行reboot重启系统。

        重要

        如果是远程操作,不要直接重启网卡,重启网卡可能会失败,失败后无法连接网络,请直接重启系统。

    主机软件运行状态诊断

    诊断结果

    修复方案

    系统服务未运行

    为了确保一体机能够正常提供服务,需要以下几个系统服务正常运行:

    kubelet、docker、containerd、LinkIoTEdge、NetworkManager、sshd、dbus

    您可以通过如下命令查询系统服务的运行状态,若未正常运行,可手动将服务启动。

    # 查看系统服务运行状态
    systemctl status docker
    # 启动系统服务
    systemctl start docker

    防火墙被打开

    可使用以下命令将防火墙关闭并禁用。

    systemctl stop firewalld
    systemctl disable firewalld

    docker hang

    若发现docker无响应,可尝试通过执行systemctl restart docker命令重启docker服务,或通过 sync && reboot重启系统。

    容器存在存储泄露

    开源软件已知问题。可执行如下脚本进行对无用的容器存储层进行清理。

    说明

    如果不清理会占用额外的磁盘空间,在磁盘使用率不高时不会影响系统运行,您可根据实际情况决定是否进行清理。

    curl -s 'http://edge-box-production-management.oss-cn-shanghai.aliyuncs.com/utils/cleanup_docker_storage.sh' | bash -s