Rust 在 CentOS 上运行慢的排查与优化清单
一 编译与运行配置
- 使用发布构建:确保以release模式运行,避免 debug 模式下的检查与调试信息带来的开销。命令:cargo build --release。
- 提升优化级别与链接时优化:在 Cargo.toml 的 [profile.release] 中设置 opt-level = 3、lto = true,必要时将 codegen-units = 1 以获得更充分的跨模块优化。
- 针对本机 CPU 做优化:设置 RUSTFLAGS=“-C target-cpu=native”,让编译器生成更贴近当前硬件的指令集与调度。
- 替换默认内存分配器:在 Cargo.toml 添加 jemalloc 或 tcmalloc 依赖,通常可降低高并发/高分配场景下的分配开销。
- 基准测试与对比:使用 cargo bench 建立可复现的基准,验证每次优化的真实收益。
二 代码与算法优化
- 减少堆分配与拷贝:优先使用栈分配;对 Vec/String/HashMap 等容器用 Vec::with_capacity、复用缓冲区;用 Cow 避免不必要的克隆。
- 选择合适的数据结构与算法:按场景选用 Vec/HashMap/BTreeMap 等;对热点路径减少重复计算与临时对象创建。
- 并行化计算密集型任务:使用 Rayon 的并行迭代器(如 par_iter())充分利用多核。
- 异步 I/O 场景:对大量并发连接或 I/O 密集型任务,采用 tokio 等异步运行时提升吞吐。
- 减少系统调用与热点路径开销:合并 I/O、批处理、缓存计算结果;仅在确有把握且安全可控时,才在关键路径谨慎使用 unsafe。
三 性能分析与定位
- CPU 热点定位:使用 perf 采样并生成报告,命令示例:sudo perf record -g target/release/your_program && sudo perf report。
- 火焰图可视化:安装 flamegraph 后执行 cargo install flamegraph,并用 RUSTFLAGS=“-C target-cpu=native” cargo flamegraph --bin your_program 生成 SVG 火焰图,直观查看热点函数与调用栈。
- 基准回归:在优化前后运行 cargo bench,确保改动带来稳定的正向收益。
四 系统与内核参数调优
- 文件描述符限制:提升进程可打开的文件描述符上限,命令:ulimit -n 65535(或按需设置更高)。
- 内存映射区域:对依赖大量内存映射的程序,提高 vm.max_map_count,示例:sudo sysctl -w vm.max_map_count=262144。
- 其他内核参数:根据负载在 /etc/sysctl.conf 中调整如 vm.swappiness、net.core.somaxconn 等网络与内存相关参数。
- 资源与存储:用 top/htop 观察 CPU/内存 使用;涉及大量文件/数据库 I/O 时优先使用 SSD。
五 5 分钟快速操作清单
- 构建与运行:执行 cargo build --release && ./target/release/your_program。
- 一键性能分析:运行 RUSTFLAGS=“-C target-cpu=native” cargo flamegraph --bin your_program 查看火焰图。
- 系统快速检查:执行 ulimit -n 与 cat /proc/sys/vm/max_map_count,必要时按上文调优。
- 基准测试:添加基准并用 cargo bench 对比优化前后性能。