如何修复Linux系统中已知的系统软件缺陷?

本文介绍如何升级Linux ECS实例的操作系统软件包,来修复因Linux操作系统本身已知的系统软件缺陷,导致的ECS实例使用或业务运行异常问题。

操作场景

Linux操作系统的ECS实例某些业务运行异常问题,是由Linux操作系统本身已知的系统软件缺陷导致,若您的ECS实例的操作系统不是最新版本,可以尝试通过手动升级ECS实例的操作系统软件包来修复。

当前已知的Linux系统软件缺陷如下:

通过升级操作系统中软件解决的Linux ECS实例问题

在CentOS或RHEL 7实例上,启动某个服务或进程时提示端口冲突错误

问题现象

在一些CentOS或RHEL 7实例上,启动某个服务或进程时提示端口冲突错误,出现进程启动失败或服务不可用情况。通过netstat命令查看端口使用情况,发现该服务或进程使用的端口已被dhclient进程占用,如下图所示。

查看进程被占用

问题原因

在正常情况下,ISC DHCP client(简称dhclient)服务会占用67/68(DHCPv4)或546/547(DHCPv6)端口。CentOS、RHEL 7的某些系统的ECS实例上自带的dhclient版本低于4.2.5-60,低于该版本的dhclient存在软件缺陷,会占用除标准端口67/68或546/547以外的其他端口。如果实例内的其他服务或进程也使用了该端口,可能出现端口冲突问题,从而导致您的业务或者服务进程启动失败或不可用。

解决方案

您可以参考升级指定软件包到最新版本升级所有软件包到最新版本,在CentOS/RHEL 7系统上更新dhclient软件包到最新版本。

CentOS/RHEL 7系统的ECS实例长期运行一段时间后,SSH远程连接登录缓慢

问题现象

CentOS/RHEL 7系统的ECS实例长期运行一段时间后,可能出现SSH远程连接登录缓慢,查看系统进程 CPU使用率发现systemd-logind进程占用100% CPU的现象,同时查看系统日志发现类似如下的日志信息:

# journalctl -u dbus
Mar 30 17:23:19 localhost dbus[21]: [system] Activating via systemd: service name='org.freedesktop.login1' unit='dbus-org.freedesk...
Mar 30 17:23:42 localhost dbus[21]: [system] Failed to activate service 'org.freedesktop.login1': timed out...

问题原因

这是由于已知的systemd-logind和D-Bus组件的缺陷导致,通过更新systemd和D-Bus组件版本可以解决,尤其是更新D-Bus组件版本。

解决方案

您可以参考升级指定软件包到最新版本升级所有软件包到最新版本,在CentOS/RHEL 7系统上更新dbus软件包到最新版本。

说明

建议在所有Linux系统上更新D-Bus组件到最新版本。

  • OpenSUSE和SUSE Linux Enterprise Server系统:软件包为dbus-1

  • 其他Linux系统:软件包名为dbus

升级Linux ECS实例的操作系统软件包

当Linux系统本身已知的系统软件缺陷导致ECS实例使用或业务运行异常时,可以通过升级操作系统的组件升级指定软件包到最新版本升级所有软件包到最新版本以解决此问题。以下以更新dhclient为例进行说明,更新其他软件包步骤类似。

升级指定软件包到最新版本

  1. 远程连接Linux实例,具体操作,请参见连接方式概述

  2. 执行以下命令,更新指定名称的软件包到最新版本。

    不同操作系统中使用的命令不同,具体说明如下:

    • Alibaba Cloud Linux 2.1903、AnolisOS 7、CentOS 7及以下版本、Red Hat Enterprise Linux 7及以下版本:

      sudo yum update <软件包名称>

      例如,升级dhclient软件包命令为:

      sudo yum update dhclient
    • AlmaLinux、AnolisOS 8及以上版本、CentOS 8及以上版本、CentOS Stream 8及以上版本、Fedora 33及以上版本、Red Hat Enterprise Linux 8及以上版本、Rocky Linux:

      sudo dnf update <软件包名称>

      例如,升级dhclient软件包命令为:

      sudo dnf update dhclient
    • Debian、Ubuntu系统:

      # 首先更新存在本地的软件源信息,获取最新的软件包版本信息
      sudo apt update
      # 然后更新指定名称的软件包到最新版本
      sudo apt upgrade <软件包名称>

      例如,升级dhclient软件包命令为:

      sudo apt update
      sudo apt upgrade dhclient
    • OpenSUSE、SUSE Linux Enterprise Server系统:

      # 首先更新存在本地的软件源信息,获取最新的软件包版本信息
      sudo zypper refresh
      # 然后更新指定名称的软件包到最新版本
      sudo zypper update <软件包名称>

      例如,升级dhclient软件包命令为:

      sudo zypper refresh
      sudo zypper update dhclient

当回显如下时,说明dhclient已升级。

升级dhclient

升级所有软件包到最新版本

  1. 远程连接Linux实例,具体操作,请参见连接方式概述

  2. 执行以下命令,更新指定名称的软件包到最新版本。

    • Alibaba Cloud Linux 2.1903、AnolisOS 7、CentOS 7及以下版本、Red Hat Enterprise Linux 7及以下版本

      sudo yum update
    • AlmaLinux、AnolisOS 8及以上版本、CentOS 8及以上版本、CentOS Stream 8及以上版本、Fedora 33及以上版本、Red Hat Enterprise Linux 8及以上版本、Rocky Linux:

      sudo dnf update
    • Debian、Ubuntu系统:

      # 首先更新存在本地的软件源信息,获取最新的软件包版本信息
      sudo apt update
      # 然后更新所有已安装的软件包到最新版本
      sudo apt upgrade
    • OpenSUSE、SUSE Linux Enterprise Server系统:

      # 首先更新存在本地的软件源信息,获取最新的软件包版本信息
      sudo zypper refresh
      # 然后更新所有已安装的软件包到最新版本
      sudo zypper update