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 将收到两次相同的时间戳。