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更快回收

时间相关

双系统时间错误

安装ntpdate

1
sudo apt-get install ntpdate

更新本地时间

1
sudo ntpdate time.windows.com

更新硬件

1
sudo timedatectl set-local-rtc 1

一键配置脚本

修改启动等待时间为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将其改回来

显卡相关

查询功率限制

1
nvidia-smi -q | grep 'Power Limit'

Alt text

设置持久模式

持久模式是一种让GPU驱动程序在系统启动时就加载并一直保持运行的模式,可以避免在每次运行GPU应用程序时重新初始化GPU的开销

1
sudo nvidia-smi -pm 1

开机自启

1
sudo vim /etc/systemd/system/nvidia-persistenced.service

添加如下内容

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=NVIDIA Persistence Mode

[Service]
Type=oneshot
ExecStart=/usr/bin/nvidia-smi -pm 1
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

重新加载 systemd 配置

1
sudo systemctl daemon-reload

开机自启

1
2
sudo systemctl enable nvidia-persistenced.service
sudo systemctl start nvidia-persistenced.service

设置功耗

1
sudo nvidia-smi -pl 140

开机自启

1
sudo vim /etc/systemd/system/nvidia-power.service
1
2
3
4
5
6
7
8
9
10
[Unit]
Description=NVIDIA Power Restrict

[Service]
Type=oneshot
ExecStart=/usr/bin/nvidia-smi -pl 140
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

重新加载 systemd 配置

1
sudo systemctl daemon-reload

开机自启

1
2
sudo systemctl enable nvidia-power.service
sudo systemctl start nvidia-power.service

使用.run安装的显卡驱动可能不支持此方法修改功耗

nvidia-powerd

在30系及以后的显卡中,使用了一种新类型的服务nvidia-powerd对显卡功耗进行控制操作

1
sudo nvidia-powerd

开机自启

1
sudo vim /etc/systemd/system/nvidia-powerd.service

添加如下内容

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=NVIDIA Power Daemon
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/nvidia-powerd

[Install]
WantedBy=multi-user.target

重新加载systemd配置

1
sudo systemctl daemon-reload

启用服务

1
sudo systemctl enable nvidia-powerd
This post is licensed under CC BY 4.0 by the author.