ubuntu如何管理启动项以提升性能
小樊
41
2025-12-17 08:27:51
Ubuntu 启动项管理与性能提升
一、定位瓶颈与总体思路
- 使用 systemd-analyze 定位耗时:
- 总耗时与关键阶段:systemd-analyze time
- 各服务耗时排序:systemd-analyze blame
- 启动依赖链:systemd-analyze critical-chain
- 生成可视化时间图:systemd-analyze plot > startup.svg
- 原则:优先处理“耗时最长”的服务与“非必需”的自启项,避免盲目关闭关键系统服务。
二、管理 systemd 服务与内核启动项
- 查看与筛选自启服务:
- 列出所有单元:systemctl list-unit-files --type=service
- 只看已启用:systemctl list-unit-files --type=service | grep enabled
- 安全禁用与强禁:
- 取消开机自启:sudo systemctl disable .service
- 临时停止:sudo systemctl stop .service
- 彻底屏蔽(防被其他服务唤起):sudo systemctl mask .service
- 恢复:sudo systemctl enable .service 或 sudo systemctl unmask .service
- 谨慎处理的常见服务(按需禁用,先确认用途):
- 桌面网络图标与联网:NetworkManager.service(禁用后右上角无网络图标)
- 等待网络就绪:NetworkManager-wait-online.service(可缩短等待,但依赖网络的程序可能延后可用)
- 账户守护进程:accounts-daemon.service
- 日志刷新:systemd-journal-flush.service(不要禁用,见下一节日志优化)
- 开机动画等待:plymouth-quit-wait.service(可 mask 以缩短到图形界面时间)
- 旧式 SysV 脚本(如仍在使用):
- 移除开机启动:sudo update-rc.d -f remove
- 添加开机启动:sudo update-rc.d defaults
- 内核与 GRUB 启动优化:
- 缩短菜单等待:编辑 /etc/default/grub,将 GRUB_TIMEOUT=2(或更小),然后执行 sudo update-grub
- 无图形需求可切到多用户目标(服务器/无头环境):sudo systemctl set-default multi-user.target;恢复图形:sudo systemctl set-default graphical.target。
三、图形会话与用户级自启动
- 管理“启动应用程序”(会话级自启,非 systemd 服务):
- 图形界面:设置 → 启动应用程序
- 终端列出隐藏项:sudo sed -i “s/NoDisplay=true/NoDisplay=false/g” /etc/xdg/autostart/*.desktop
- 原则:仅保留必要项(如输入法、网络管理托盘),移除即时通信、云盘、下载器等非必要常驻程序。
四、常见拖慢启动的因素与处理
- Snap 包导致的 snapd.service 与大量 dev-loop.device* 耗时:
- 查看与取舍:
- 已安装 snap:snap list
- 占用空间:df -h
- 优化路径(二选一或混合):
- 精简/替换:尽量用 apt/deb 版本替代常用软件(如 code、typora 等),减少 snap 数量
- 彻底移除(谨慎):sudo apt purge snapd(会一并移除通过 snap 安装的应用,后续用 deb 重装)
- 日志占用过大导致 systemd-journal-flush.service 耗时:
- 查看占用:journalctl --disk-usage
- 限制大小(编辑 /etc/systemd/journald.conf):
- 示例:SystemMaxUse=50M 或 SystemMaxFileSize=1G,SystemMaxFiles=5
- 应用配置并重启日志服务或系统:sudo systemctl restart systemd-journald
- 其他通用优化(与启动体验间接相关):
- 更新系统与驱动:sudo apt update && sudo apt upgrade
- 使用 SSD、增大 内存、减少 swappiness(如 sudo sysctl vm.swappiness=10)。
五、操作建议与风险提示
- 先备份与可回退:
- 变更前记录命令;关键服务先 stop 验证,再 disable;必要时 enable/reenable 恢复
- 对 mask 操作要特别谨慎,确认不会被其他单元拉起
- 变更后复核:
- 复核耗时:systemd-analyze blame
- 复核是否生效:systemctl is-enabled .service
- 服务器与桌面策略不同:服务器优先保障稳定性与可用性;桌面用户优先保障登录后体验与必要常驻功能。