项目

通用

个人资料

操作

server.max-worker 选项

server.max-worker = 0 - 要生成的 worker 进程数量(默认值:0)

在采用 sendfile() 的现代系统上,**强烈建议**使用 server.max-worker = 0
server.max-worker = 0 通常使用最少的资源,并且往往是性能最佳的设置,除非在特定用例中。

概述

lighttpd 是一个单线程、单进程、基于事件、非阻塞 I/O 的 Web 服务器。在许多使用场景中,单个 lighttpd 进程足以处理请求。瓶颈通常是 lighttpd 通过 mod_fastcgi 等模块连接的(外部)重量级后端。尽管如此,在某些情况下运行多个 lighttpd worker 进程可能是有意义的,但请注意使用 server.max-worker 时的一些限制

**强烈建议**使用 server.max-worker = 0,除非更改 server.max-worker 对您的特定使用场景带来了**可衡量的**性能差异。请在您自己的系统上进行测试和衡量。

重复此强烈建议,因为更改 server.max-worker 通常不是必要或有帮助的,但更改 server.max-worker 会引入一些使用 server.max-worker 时的限制。本着“最小意外原则”的精神,请不要盲目更改 server.max-worker。如果您认为更改 server.max-worker 可能有助于解决某个问题,那么明智的做法是测试和衡量更改 server.max-worker 的影响。

CPU 密集型

如果 lighttpd 受到 CPU 限制,可能是由于套接字连接和 TLS 协商的激增,请尝试将 server.max-worker 设置为 4 或系统中的核心数。

I/O 密集型

当在高并发下提供许多大型文件,并且系统使用的是慢速旋转磁盘(非 SSD)且没有足够的内存用于文件系统缓存时,系统性能可能会受到硬盘 I/O 等待的限制。在这种情况下,lighttpd 可能大部分时间都在等待磁盘寻址到正确的扇区以读取和发送文件。当 lighttpd 等待磁盘时,进程中的所有连接都必须等待。为了并发处理更多请求,您可以创建 4 到 16 个 lighttpd worker 进程。

NFS

使用 NFS 与 I/O 密集型基本相同:大部分时间都花在等待远程系统交付内容或 stat()/open() 文件上。
在这些情况下,您可能希望增加 worker 数量,以便将等待分散到多个进程中:server.max-worker = 8
8 到 16 之间的值应该能处理大多数设置。

限制

lighttpd worker 进程是独立的,除了共享监听套接字外。无法选择要连接到哪个 lighttpd worker 进程来发出请求。大多数 lighttpd 模块在多个 lighttpd worker 进程下运行良好。但是,由于每个 lighttpd worker 进程都是独立的,不与其他 lighttpd worker 共享信息,因此某些模块可能无法按预期运行。
  • mod_status 将有 <n> 个独立的计数器,每个进程一组。
    检索统计信息对于处理状态请求的单个 lighttpd worker 进程是有效的,但所有进程之间的统计信息不会汇总。
  • mod_rrdtool 将会失败,因为 rrdtool 将收到两次相同的时间戳。

gstrauss 2 年多前更新 · 16 次修订