Post

Ubuntu Optimization

汇总 Ubuntu 的语言、内存、时间、显卡及常用系统优化配置

Ubuntu Optimization

ubuntu优化

谷歌浏览器汉化

在ubuntu内更改Chrome的语言时,并没有像是windows的以这种语言显示Google Chrome 的选项。最多也只能修改提示翻译的优先语言。没有严格意义上的更改显示语言的选项。
在linux系统上,Chrome的显示语言是根据系统语言变化,一种办法是将系统语言设置成想要显示的语言,但是更多的场景可能是系统语言是英文,应用语言是中文。这里需要通过添加命令行参数来修改 Chrome 的语言。

打开终端,在终端中输入

1
LANGUAGE=zh_cn google-chrome

此时启动Chrome则是以中文显示。若要修改Chrome的默认语言,需要额外添加脚本。

在Chrome的图标文件/usr/share/applications/google-chrome.desktop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[ Desktop Entry ]
  Version=1.0
  Name=Google Chrome
  # Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
  # From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
  GenericName=Web Browser
  ......
  Exec=/usr/bin/google-chrome-stable %U
  StartupNotify=true
  Terminal=false
  Icon=google-chrome
  Type=Application
  Categories=Network;WebBrowser;
  ......

Chrome通过Exec=/usr/bin/google-chrome-stable运行,但直接添加命令行参数LANGUAGE=zh_cn 的话不仅会无法使用,而且还会导致GNOME桌面找不到Chrome。解决方法如下

新建一个chrome_cn.sh脚本,在脚本中添加如下内容

1
2
#!/bin/bash
LANGUAGE=zh_cn /usr/bin/google-chrome-stable $@

随后将该脚本复制到/usr/bin/路径下,最后将/usr/share/applications/google-chrome.desktop 里的所有/usr/bin/google-chrome-stable换成/usr/bin/chrome_cn.sh,此时启动Chrome界面将是中文。

一键配置脚本

pip补全

pip提供了自动补全命令,但需要手动开启

1
pip completion --bash >> ~/.bashrc
1
pip completion --zsh >> ~/.zshrc

执行如上命令,重启终端后pip即可进行自动补全

swap分区扩容

在大内存机器(如 64GB)上,默认安装时通常只会分配较小的 swap(例如 2GB)。
虽然物理内存足够,但在以下场景中仍然可能触发 OOM(Out Of Memory):

  • 大型 C++ 工程编译(如 OpenCV / ROS 全编译)
  • 深度学习训练
  • 多进程程序
  • Docker 容器叠加
  • 数据集加载瞬时暴涨

因此建议配置 适量 swap 作为缓冲区,防止进程被系统直接杀死

查看当前 swap 状态

1
2
free -h
swapon --show
物理内存推荐 swap
16GB4–8GB
32GB8–16GB
64GB16GB
128GB+16–32GB

使用 swapfile 扩容

关闭旧 swap

1
sudo swapoff /swap.img

删除旧文件

1
sudo rm /swap.img

创建新的 swap(示例 16GB)

1
2
3
4
sudo fallocate -l 16G /swap.img
sudo chmod 600 /swap.img
sudo mkswap /swap.img
sudo swapon /swap.img

如果文件名不为swap.img,需要修改/etc/fstab,确保如下行正确

1
/swap.img none swap sw 0 0

启用 zswap

zSwap是Linux内核的一个功能,它为交换页提供了一个压缩的回写缓存,作为一种虚拟内存压缩形式

开启zswap

1
echo 1 | sudo tee /sys/module/zswap/parameters/enabled

永久生效

1
sudo sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20 /' /etc/default/grub

更新设置

1
sudo update-grub

sysctl 内核优化

内核优化

1
2
3
4
5
6
sudo tee /etc/sysctl.d/99-memory-opt.conf > /dev/null << 'EOF'
vm.swappiness=10
vm.overcommit_memory=1
vm.overcommit_ratio=90
vm.vfs_cache_pressure=50
EOF

更新设置

1
sudo sysctl --system

参数详解:

  • vm.swappiness
    控制系统使用 swap 的“积极程度”。默认为60,数值越小,越倾向使用物理内存。对于开发机器建议调低

    场景推荐值
    桌面开发10
    服务器10–20
    内存较小机器30
  • vm.overcommit_memory
    控制内存分配策略

    含义
    0默认(内核估算)
    1允许过度分配
    2严格限制
  • vm.overcommit_ratio
    overcommit_memory=2 时才严格生效,表示可分配内存比例(%)

  • vm.vfs_cache_pressure
    控制 inode/dentry 缓存回收速度

    行为
    100默认
    <100更保留缓存
    >100更快回收

时间相关

双系统时间错误

Windows 默认将硬件时钟(RTC)解释为本地时间,而 Ubuntu 通常按 UTC 解释。同一个硬件时钟使用不同约定,会导致切换系统后时间偏移,例如在中国标准时间(UTC+8)下相差 8 小时。建议将两个系统的硬件时钟统一为 UTC,桌面仍按各自设置的时区显示当地时间

Windows 使用 UTC 硬件时钟

以管理员身份打开命令提示符,执行以下命令(64 位 Windows 同样使用 REG_DWORD

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" ^
  /v RealTimeIsUniversal ^
  /t REG_DWORD ^
  /d 1 ^
  /f

重启 Windows,并在“设置 → 时间和语言 → 日期和时间”中确认时区正确,启用自动设置时间并同步。

Ubuntu 使用 UTC 硬件时钟

先检查时区与同步状态

1
timedatectl

如果时区不正确,按实际所在地修改,以下以中国标准时间为例

1
sudo timedatectl set-timezone Asia/Shanghai

使用系统已有的时间同步服务(如 systemd-timesyncdchrony)自动校时,无需额外安装 ntpdate。可通过以下命令启用可用的同步服务

1
sudo timedatectl set-ntp true

确认系统时间正确且已同步后,将硬件时钟设为 UTC;该命令也会用当前系统时间更新硬件时钟

1
2
sudo timedatectl set-local-rtc 0
timedatectl

修改启动等待时间为0

1
sudo vim /etc/grub.d/30_os-prober

修改

1
set timeout=0
1
sudo vim /etc/default/grub

修改

1
GRUB_TIMEOUT=0

最后更新grub.cfg文件,使改动生效

1
sudo update-grub

修改系统重启默认等待时间

1
sudo vim /etc/systemd/system.conf

#DefaultTimeoutStopSec=90s取消注释,并将DefaultTimeoutStopSec=90s改为DefaultTimeoutStopSec=3s

千万不要修改DefaultTimeoutStartSec,若修改时间太短,时间将不足以支持系统启动。如果不慎修改,在grub引导中选择recovery模式的root终端,用vim将其改回来

显卡相关

查询功率信息

查看 GPU 0 的功率信息,包括设备支持时报告的当前、默认及最小/最大功率上限。多显卡机器可先使用 nvidia-smi -L 查看设备编号,再替换 -i 0 中的编号;不支持的字段可能显示为 N/A

1
nvidia-smi -i 0 -q -d POWER

NVIDIA 显卡功率限制查询示例

持久模式(按需启用)

持久模式用于在没有应用程序使用 GPU 时保留其初始化状态,减少后续计算任务的初始化开销,主要适用于无图形界面的计算场景。如果桌面图形服务已持续使用该 GPU,通常无需额外开启。

NVIDIA 推荐使用 nvidia-persistenced 守护进程管理持久状态。先检查驱动包是否已经提供服务及其运行状态

1
2
systemctl cat nvidia-persistenced.service
systemctl status nvidia-persistenced.service

如果服务存在但未运行,并且确实需要持久模式,可启动已有服务

1
sudo systemctl start nvidia-persistenced.service

在设备支持时,为 GPU 0 启用持久模式并查看结果

1
2
sudo nvidia-smi -i 0 -pm 1
nvidia-smi -i 0 --query-gpu=persistence_mode --format=csv

nvidia-smi -pm 1 本身不会保存跨重启配置。开机行为应以驱动包提供的服务及启动参数为准;部分服务由依赖关系自动启动,不能直接用 systemctl enable 启用。如果服务不存在,应检查所安装驱动包的说明,不要创建同名的简化服务覆盖官方配置。

nvidia-powerd(受支持笔记本的 Dynamic Boost)

nvidia-powerd 为 Linux 提供 Dynamic Boost 支持,根据负载在 CPU 和 GPU 之间动态分配功率预算

硬件需要同时满足以下条件:

  • 笔记本平台
  • Ampere 或更新架构的 NVIDIA GPU
  • 受支持的 Intel 或 AMD 平台
  • 系统 BIOS 支持 Dynamic Boost

具体平台及软件要求应以所安装驱动版本的文档为准。可通过以下命令查询 BIOS 是否报告支持;其中 * 匹配各 GPU 的 PCI 地址目录

1
cat /proc/driver/nvidia/gpus/*/power

查看输出中的 Dynamic Boost 支持状态。确认平台支持后,检查驱动包提供的服务

1
systemctl cat nvidia-powerd.service

如果服务已安装,且驱动要求的 D-Bus 等配置已就绪,可启用并立即启动

1
2
sudo systemctl enable --now nvidia-powerd.service
systemctl status nvidia-powerd.service

若服务启动失败,可查看日志排查平台支持及配置问题

1
journalctl -u nvidia-powerd.service -b

不支持的平台无需启用该服务

This post is licensed under CC BY 4.0 by the author.