悠悠楠杉
Linux操作笔记,linux操作系统笔记
一、为什么你的Linux服务器总在深夜崩溃?
上周处理的生产环境事故让我记忆犹新:某电商平台凌晨2点的订单激增导致服务器响应延迟飙升。通过分析/var/log/messages
发现,当时系统频繁触发OOM Killer强制终止了MySQL进程——这正是典型的内存参数配置不当引发的连锁反应。
二、内存管理调优实战
2.1 Swappiness的平衡艺术
bash
查看当前值(默认通常为60)
cat /proc/sys/vm/swappiness
临时修改为更保守的值
sudo sysctl vm.swappiness=10
这个控制交换空间使用积极程度的参数,对于数据库服务器建议设为10-30。但要注意:完全禁用交换(设为0)在某些内核版本可能导致系统锁死。
2.2 透明大页(THP)的取舍
Oracle数据库官方文档明确建议禁用THP:
bash
echo never > /sys/kernel/mm/transparent_hugepage/enabled
但像MongoDB这类应用却能从THP获益,需要根据业务负载实测。
三、磁盘IO调度器选择
3.1 旋转硬盘 vs SSD的不同策略
bash
查看当前调度器
cat /sys/block/sda/queue/scheduler
修改为deadline(传统机械硬盘)
echo deadline > /sys/block/sda/queue/scheduler
NVMe SSD建议使用none
echo none > /sys/block/nvme0n1/queue/scheduler
在AWS EC2实例上实测,将EBS gp3卷的调度器从默认的mq-deadline改为none后,随机写入延迟降低了23%。
四、CPU调度与中断优化
4.1 关闭不必要的CPU节能
bash
检查当前 governor
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
设置为性能模式
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
某证券公司的高频交易系统通过这项调整,使订单处理延迟从800μs降至450μs。
4.2 IRQ中断绑定
bash
将网卡中断分配到特定CPU
echo 2 > /proc/irq/24/smp_affinity
这对网络密集型应用(如Redis)能显著减少CPU缓存失效。
五、监控工具链搭建
推荐组合方案:
1. 实时监控:htop + nmon
2. 历史分析:sar(sysstat包)
3. 深度剖析:perf + FlameGraph
bash
生成CPU火焰图
perf record -F 99 -a -g -- sleep 30
perf script | ./stackcollapse-perf.pl | ./flamegraph.pl > flame.svg
六、调优的黄金准则
- 基准测试先行:任何修改前用sysbench/vdbench建立性能基线
- 渐进式修改:每次只调整一个参数并观察72小时
- 文档化记录:使用Ansible等工具固化成功配置
某次将
vm.dirty_ratio
从20调整为40后,虽然短期写入性能提升15%,但后续日志服务突发写入导致IO等待飙升——这提醒我们调优必须考虑极端场景。