手把手带你配置与优化:linux 实战指南

在服务器运维与开发部署领域,Linux 始终是无可争议的基石。无论你是刚接触命令行的新手,还是希望系统化提升性能的老手,本文都将以实战为导向,从基础环境配置、内核参数调优到常见故障排查,手把手带你完成一次从“能用”到“好用”的 Linux 系统蜕变。全文基于 Ubuntu 22.04 LTS / CentOS Stream 9 双环境演示,所有命令均经过生产环境验证,建议在测试机先行演练。

一、系统初始化:最小化安装后的必备加固

拿到一台全新的 Linux 服务器,第一步绝不是直接部署业务,而是完成安全基线设置与基础软件源优化。

1.1 更新软件源与内核

# Debian/Ubuntu 系
sudo apt update && sudo apt upgrade -y
sudo apt install -y vim curl wget git net-tools htop

# RHEL/CentOS 系
sudo dnf update -y
sudo dnf install -y vim curl wget git net-tools htop

注意:生产环境建议锁定内核版本,避免自动升级引发驱动不兼容。使用 apt-mark hold linux-image-genericdnf versionlock 实现。

1.2 SSH 安全加固

编辑 /etc/ssh/sshd_config,启用以下关键项:

# 禁止 root 直接登录
PermitRootLogin no
# 仅允许密钥认证
PasswordAuthentication no
# 修改默认端口(建议 2222)
Port 2222
# 限制登录尝试次数
MaxAuthTries 3

修改后重启服务并验证:

sudo systemctl restart sshd
# 务必先开新终端测试,确认能登录后再关闭旧连接

二、磁盘与文件系统:LVM 动态扩容实战

业务增长往往导致磁盘空间告急,LVM(逻辑卷管理)是解决此问题的利器。以下演示如何在不重启的情况下动态扩展根分区。

2.1 查看当前 LVM 状态

sudo pvs          # 查看物理卷
sudo vgs          # 查看卷组
sudo lvs          # 查看逻辑卷
df -h             # 查看实际挂载使用率

2.2 新增物理磁盘并加入卷组

# 假设新磁盘为 /dev/sdb
sudo pvcreate /dev/sdb
sudo vgextend ubuntu-vg /dev/sdb   # 卷组名以 vgs 输出为准
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
# 关键一步:同步文件系统容量
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv   # ext4
# 如果是 xfs 则使用:
# sudo xfs_growfs /

执行后再次 df -h 即可看到容量已更新,全程无需重启服务。

2.3 磁盘 IO 排错:定位高延迟进程

sudo iostat -x 1 5   # 查看 %util 和 await 指标
sudo pidstat -d 1    # 查看每个进程的读写速率
# 若发现某进程 IO 异常,可用 strace 跟踪:
sudo strace -p PID -e trace=read,write -o /tmp/io_trace.log

三、内存与交换分区:性能调优的黄金法则

内存不足时系统会频繁使用 swap,导致性能雪崩。合理配置 swap 与内核参数可显著提升吞吐量。

3.1 调整 swappiness 参数

# 查看当前值(默认 60)
cat /proc/sys/vm/swappiness
# 临时调整(立即生效)
sudo sysctl vm.swappiness=10
# 永久生效
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

建议:对于数据库服务器设为 10 以下,对于桌面环境可保留 60。

3.2 创建标准 swap 文件

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久挂载
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

3.3 内存泄漏快速定位

# 使用 top 按内存排序
top -o %MEM
# 使用 smem 统计真实物理内存(需安装)
sudo smem -k -s rss | tail -20
# 查看进程内存映射详情
sudo pmap -x PID | grep total

四、网络栈优化:降低延迟与丢包

高并发场景下,默认网络参数往往成为瓶颈。以下配置适用于 Web 服务器或网关。

4.1 修改内核网络队列与缓冲区

# 临时生效
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216'
sudo sysctl -w net.ipv4.tcp_wmem='4096 65536 16777216'
sudo sysctl -w net.core.netdev_max_backlog=5000
sudo sysctl -w net.ipv4.tcp_fastopen=3

# 永久生效:编辑 /etc/sysctl.conf 添加以上内容,然后 sysctl -p

4.2 排查网络丢包与连接数

# 查看网卡丢包统计
ip -s link show eth0
# 查看当前 TCP 连接状态分布
ss -ant | awk '{print $1}' | sort | uniq -c
# 找出 TIME_WAIT 过多的原因
sudo netstat -antlp | grep TIME_WAIT | head -20
# 优化 TIME_WAIT 复用(谨慎使用)
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
sudo sysctl -w net.ipv4.tcp_fin_timeout=15

五、日志管理与排错实战

系统故障时,日志是唯一可靠的线索。掌握高效的日志检索方法能大幅缩短故障恢复时间。

5.1 统一日志平台配置(rsyslog)

# 将 kernel 和 auth 日志转发到远程服务器
sudo cat >> /etc/rsyslog.d/50-remote.conf << 'EOF'
*.* @192.168.1.100:514
EOF
sudo systemctl restart rsyslog

5.2 实战排错:定位 CPU 飙升问题

# 步骤1:找到高 CPU 进程
top -H -p PID   # 查看线程级别
# 步骤2:抓取线程栈
sudo gdb -p PID -batch -ex "thread apply all bt" > /tmp/stack.log
# 步骤3:使用 perf 采样(生产环境慎用)
sudo perf record -F 99 -p PID -g -- sleep 30
sudo perf report --stdio | head -50

若为 Java 应用,可使用 jstack PID 直接导出线程快照。

5.3 启动故障恢复:进入救援模式

# 在 GRUB 启动菜单按 'e',在 linux 行末尾添加:
rw single init=/bin/bash
# 然后按 Ctrl+X 启动,挂载根分区:
mount -o remount,rw /
# 修复后执行 reboot 恢复

六、自动化运维:定时任务与性能监控

手动优化无法持续,必须借助 crontab 与监控脚本形成闭环。

6.1 编写每日健康检查脚本

#!/bin/bash
# /usr/local/bin/health_check.sh
echo "=== 磁盘使用率 ==="
df -h | grep -E '^/dev|Filesystem'
echo "=== 内存占用 TOP5 ==="
ps aux --sort=-%mem | head -6
echo "=== 最近 5 条内核错误 ==="
journalctl -p err -n 5 --no-pager
# 若发现异常,可调用企业微信/钉钉 webhook 推送告警

添加定时任务:

crontab -e
# 每天 8 点执行,输出追加到日志
0 8 * * * /usr/local/bin/health_check.sh >> /var/log/health.log 2>&1

6.2 使用 systemd 服务守护关键进程

# 创建服务文件
sudo vim /etc/systemd/system/myapp.service
[Unit]
Description=My App
After=network.target

[Service]
ExecStart=/opt/myapp/start.sh
Restart=always
RestartSec=5
User=appuser

[Install]
WantedBy=multi-user.target

# 启用并启动
sudo systemctl daemon-reload
sudo systemctl enable --now myapp

七、总结与最佳实践清单

通过上述六大模块的实战,你已经掌握了 Linux 系统从初始化、存储、内存、网络到日志与自动化的核心调优手段。最后送上一份自查清单:

  • 是否关闭了不需要的守护进程(systemctl list-unit-files | grep enabled)?
  • 是否设置了合理的文件描述符上限(ulimit -n)?建议调至 65535。
  • 是否启用 TCP BBR 拥塞控制(sysctl net.ipv4.tcp_congestion_control=bbr)?
  • 是否定期执行 apt autoremove / dnf autoremove 清理无用包?
  • 是否配置了集中式日志备份?至少保留 90 天以上。

Linux 优化永无止境,但遵循“先监控、后调优、再验证”的原则,能让你在复杂的生产环境中始终保持主动权。建议每项修改前备份原配置文件,并记录变更时间与原因,方便回滚。希望这篇指南能成为你运维工具箱中的得力助手。

发表评论