长期在服务器或开发环境中使用 Linux,随着时间积累,资源竞争和配置负载可能导致系统变卡。本文聚焦 Linux用久了变卡的场景,提供运维与开发必看的超实用性能优化技巧,覆盖从系统层面到应用层面的多维度优化。
1. 系统层面的清理与调优
1.1 关闭不必要的自启动服务
开机自启服务数量过多是常见的性能瓶颈,通过清理不需要的自启动项可以显著降低内存占用与磁盘 I/O。先查看当前启用的服务清单,再按需禁用或禁用并立即停止。
在多数发行版中,系统服务由 systemd 管理。以下命令可帮助你定位与处理自启服务,确保关键服务不被误删,同时避免影响系统稳定性。
# 查看启用的服务
systemctl list-unit-files --type=service --state=enabled# 禁用不需要的服务(示例)
sudo systemctl disable --now cups.service
sudo systemctl disable --now bluetooth.service
定期复核 这类清单,结合监控数据判断哪些服务属于长期空闲对性能影响较小的项;禁用后应留意系统日志是否出现异常。
1.2 调整开机并发与服务加载
开机阶段的并发与依赖关系会放大启动时的资源峰值,通过分析启动链路可以找出瓶颈所在。
利用 systemd 提供的分析工具,可以快速定位耗时单元和启动顺序问题:
# 统计启动时间分布
systemd-analyze blame# 查看关键启动链,找出最慢的阶段
systemd-analyze critical-chain
基于分析结果,可以对某些单元进行并行化优化或延迟启动,以降低整体启动时的资源抖动。
2. 内存与缓存管理优化
2.1 优化缓存与页面替换策略
内存管理策略直接决定系统在压力下的表现,通过调整虚拟内存参数可以降低页面置换带来的性能损耗。
两项核心参数通常影响较大:vm.swappiness(内核在多大程度上使用 swap)和 vm.vfs_cache_pressure(控制 VFS 缓存的回收速度)。
# 临时调整
sudo sysctl -w vm.swappiness=10
sudo sysctl -w vm.vfs_cache_pressure=50# 永久设置(编辑 /etc/sysctl.conf)
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
echo "vm.vfs_cache_pressure=50" | sudo tee -a /etc/sysctl.conf
定期触发缓存清理 有助于在极端场景快速恢复响应,命令需谨慎使用,避免频繁触发导致性能波动。
sudo sync
echo 3 | sudo tee /proc/sys/vm/drop_caches
2.2 调整 swap 使用与内存分配
在内存充足的情况下,降低 swap 的使用能显著提升响应速度,对于数据库和高并发应用尤为关键。
通过调整 swapiness 可以控制系统更积极地使用物理内存,减少对 swap 的依赖。
sudo sysctl -w vm.swappiness=10# 验证当前内存概况
grep -E "MemTotal|MemFree|Cached|SwapTotal|SwapFree" -m1 /proc/meminfo
若机器内存紧张,考虑增加物理内存或按需配置内存分配给高优先级进程(如数据库、缓存服务)的内存上限。
3. CPU与进程调度优化
3.1 调整 I/O 调度器与进程优先级
磁盘 I/O 瓶颈常常拖慢整体系统性能,通过选择合适的 I/O 调度器和对高并发进程设置优先级,可以缓解此类问题。
常见 I/O 调度器选择包括 deadline、cfq、bfq(不同内核版本与硬件平台支持不同,请以实际系统为准):
# 查看当前调度器
cat /sys/block/sda/queue/scheduler# 设置为 bfq(路径因设备不同而异,请替换为实际设备)
echo bfq | sudo tee /sys/block/sda/queue/scheduler
I/O 优先级通过 ionice 控制,帮助关键进程获得更快的磁盘访问。
# 为目标进程设定 I/O 优先级
sudo ionice -c2 -n0 -p $(pidof mysqld)# 查看某进程的 I/O 优先级
ionice -p
3.2 使用 CPU 调度策略与频率管理
合理的 CPU 调度策略和汇总的频率管理对持续高负载场景尤为重要,可以降低热阈值触发、提升吞吐量。
通过调整 CPU governor 与核频率分配来提高稳定性与性能:
# 安装工具以查询与设置 CPU 调度策略
sudo apt-get install linux-tools-common linux-tools-$(uname -r) -y# 将 CPU 调度策略设置为 performance
sudo cpupower frequency-set -g performance# 查看当前频率信息与 governor
sudo cpupower frequency-info
对已启动进程动态调整优先级也很有效,例如提升数据库进程的 niceness 值,以减少对前端应用的干扰:
sudo renice -n -5 -p
4. 存储与磁盘性能优化
4.1 文件系统挂载选项优化
合理的挂载参数能显著降低元数据和日志操作的耗时,尤其是在大规模日志与临时文件写入场景下。
通过 noatime/nodiratime 等选项可以减少访问时间写操作带来的额外开销:
# /etc/fstab 示例条目(Ext4)
UUID=xxxx-xxxx-xxxx-xxxx / ext4 defaults,noatime,nodiratime 0 1
同时关注日志分离与磁盘分区布局,将日志、数据、热数据放在不同磁盘上可以降低 I/O 冲突。
4.2 高性能文件系统与分区布局
不同工作负载适配不同文件系统特性,如大容量写入与并发读写场景可考虑合适的对齐和预写策略。
在可能的情况下,将高写入频率的目录(如 /var/log、/tmp)分离到独立的磁盘或分区,结合挂载选项优化 I/O。

# 示例:将日志目录分离到单独磁盘(具体设备名称按实际情况替换)
# 重新分区、格式化后在 /etc/fstab 配置挂载点
# mount /var/log 从新磁盘
5. 应用层优化与监控
5.1 监控体系与日志治理
完善的监控与日志策略是长期保持系统性能的关键,通过采集 CPU、内存、磁盘、网络等指标,及时发现瓶颈。
示例性监控与观测方案包括在节点上运行指标导出端,以及集中化的可视化平台:
# 安装示例:Prometheus 节点导出器(以 Debian/Ubuntu 为例)
sudo useradd -rs /bin/false node_exporter
sudo wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
tar -xzf node_exporter-1.0.1.linux-amd64.tar.gz
sudo cp node_exporter-1.0.1.linux-amd64/node_exporter /usr/local/bin/sudo tee /etc/systemd/system/node_exporter.service << 'EOF'
[Unit]
Description=Node Exporter
After=network.target[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter[Install]
WantedBy=multi-user.target
EOFsudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
日志轮转与归档策略 保障日志规模可控,避免磁盘占用极速增长:
/var/log/myapp/*.log {dailyrotate 7compressmissingoknotifemptycopytruncate
}
5.2 应用层缓存与连接池优化
应用层缓存与连接池是提升响应速度的重要环节,合理配置可以减轻数据库与后端服务压力。
示例性做法包括在数据库与应用层设置缓存策略、并使用连接池来控制并发连接数量:
# 使用 Redis 进行缓存(示例配置)
redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
数据库端的连接池与查询优化也不可忽视,如合理设置最大连接数、超时、以及慢查询日志,以便针对性优化。
# PostgreSQL 示例:调整连接与超时
# 修改 postgresql.conf
max_connections = 200
idle_in_transaction_session_timeout = 60000
# 重启数据库生效
sudo systemctl restart postgresql


