Ubuntu 16.10 启动时 networking.service 缓慢问题

一、问题概述

  • 现象 :Ubuntu 16.10 系统启动时,networking.service 耗时超 5 分钟,导致整体开机流程严重延迟。
  • 定位工具 :通过 systemd-analyze blame 命令确认,networking.service 是启动过程中的主要耗时服务。

二、核心原因

  1. 接口配置模式冲突 :/etc/network/interfaces 中接口配置为 auto(开机强制启动该接口),若接口未物理连接(如网线未插)或无法就绪,系统会等待超时(默认5分钟)。
  2. 默认超时时间过长 :networking.service 默认 TimeoutStartSec=5min,即使无实际网络需求,也会等待超时后才继续启动流程。
  3. 特定接口阻塞 :未配置或非关键的网络接口(如未设置的无线接口)导致 systemd-networkd-wait-online.service 等待所有接口就绪,引发阻塞。

三、解决方案(按有效性优先级排序)

方案1:修改接口配置(推荐,最高用户验证率)

  • 操作步骤 :
    1. 编辑网络配置文件:sudo nano /etc/network/interfaces
    2. 将接口配置中的 auto 改为 allow-hotplug(例:auto eth0 → allow-hotplug eth0)
    3. 保存退出,无需重启即可生效(下次启动自动应用)。
  • 原理 :allow-hotplug 仅在接口物理连接时启动,避免无连接时的超时等待。
  • 效果 :多个用户反馈,networking.service 耗时从 5 分钟降至 1~41 秒,适用于 Ubuntu 16.10/18.04/20.04/22.04 等版本。

方案2:缩短服务超时时间(快速 workaround)

  • 操作步骤 :
    1. 编辑 networking.service 配置:sudo systemctl edit networking.service

    2. 在打开的文件中添加以下内容(确保在 [Service] 段下):

      ini 复制代码
      [Service]
      TimeoutStartSec=10sec
    3. 保存退出,执行 sudo systemctl daemon-reload 生效。

  • 原理:将默认 5 分钟超时缩短为 10 秒,强制终止无响应的等待流程。
  • 注意 :避免直接编辑 /lib/systemd/system/networking.service,否则系统更新会覆盖修改。

方案3:优化 systemd-networkd-wait-online.service(针对特定接口阻塞)

  • 适用场景:因未配置的无线接口等非关键接口导致阻塞。
  • 操作步骤 :
    1. 编辑服务配置文件:sudo nano /lib/systemd/system/systemd-networkd-wait-online.service
    2. 修改 ExecStart 行,添加以下参数之一:
      • 缩短超时:ExecStart=/lib/systemd/systemd-networkd-wait-online --timeout=10(超时设为10秒)
      • 忽略特定接口:ExecStart=/lib/systemd/systemd-networkd-wait-online --ignore=接口名(例:--ignore=int_wlan0)
    3. 保存退出,执行 sudo systemctl daemon-reload 生效。
  • 原理:要么缩短等待超时,要么忽略非关键接口,避免阻塞启动流程。

四、验证方法

  1. 查看启动总耗时:systemd-analyze time
  2. 定位耗时服务:systemd-analyze blame(确认 networking.service 耗时是否降低)
  3. 观察启动流程:重启系统,验证是否无明显延迟。

五、关键结论

  • 最优解为 方案1 (auto 改 allow-hotplug),从根源解决接口等待问题,兼容性强。
  • 方案2 适合快速临时解决,方案3 针对特定接口阻塞场景。
  • 该问题在 Ubuntu 16.10 及后续多个版本中存在,解决方案可跨版本复用。
相关推荐
HideF8 小时前
Linux sudo
linux
FlightYe9 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
蹊黎9 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
牛马鸡niumasi11 小时前
【Linux】C语言文件操作
linux
say_fall11 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
wacsii12 小时前
【Linux进程(一)】Linux 进程初探:操作系统如何管理进程?fork() 为什么返回两次?
linux·运维·服务器
AI+程序员在路上12 小时前
RV1126B 上支持的模型及全流程应用--从CNN及语音到 LLMVLM 与跨平台选型
linux·c语言·人工智能
默|笙12 小时前
【Linux网络】传输层协议TCP(1)---TCP报文介绍
linux·网络·tcp/ip
相思难忘成疾12 小时前
从零搭建 Kubernetes 1.30 集群:kubeadm 部署一主多从实战(RHEL 9.3 + Docker + flannel)
linux·运维·kubernetes
用户41071920132512 小时前
用 systemd 从零做一个系统健康巡检服务:脚本、沙箱与磁盘满排查实战
linux·ubuntu