在 Go 语言的 Fiber 框架中,Prefork
是一个用于提升服务端性能的重要配置选项。以下是关键要点说明:
1. 工作原理
- 多进程模型:当启用
Prefork
时,Fiber 会创建多个子进程(数量 = CPU 核心数) - 负载均衡:操作系统内核会在这些子进程之间自动分配传入的连接请求
- 共享端口:所有子进程监听同一个 TCP 端口(通过
SO_REUSEPORT
实现)
2. 启用方式
app := fiber.New(fiber.Config{
Prefork: true, // 开启 prefork 模式
})
3. 适用场景
✅ 优势场景:
- 高并发请求处理
- 多核 CPU 服务器环境
- 生产环境部署
- 需要最大化利用 CPU 资源时
❌ 不推荐场景:
- 开发调试环境(会创建多个进程影响调试)
- 单核 CPU 环境
- 短连接密集型场景(频繁创建连接开销可能抵消收益)
4. 注意事项
- 全局状态:各子进程内存空间独立,需避免依赖内存状态(推荐使用 Redis 等外部存储)
- 文件描述符:需要适当调整系统的
ulimit
设置 - 启动输出:开启后会打印
Worker PIDs
信息 - Graceful 重启:需配合信号处理实现平滑重启
5. 性能对比
典型测试结果(4 核 CPU):
模式 | QPS | CPU 利用率 |
---|---|---|
普通模式 | ~35k | 25% |
Prefork 模式 | ~120k | 95% |
6. 进阶配置
app := fiber.New(fiber.Config{
Prefork: true,
ServerHeader: "Fiber (Prefork)", // 自定义响应头
DisableStartupMessage: true, // 关闭启动信息
})
建议在生产环境部署时配合反向代理(如 Nginx)使用,并通过压力测试确定最佳 worker 数量配置。