百万并发下Nginx的优化之道!

实现百万并发不仅靠 Nginx 本身性能,还要操作系统、网络、配置的全面协同@mikechen

连接配置优化

理论最大并发连接数 = worker_processes × worker_connections

百万并发下Nginx的优化之道!-mikechen

worker_connections 65535;

每个 worker 进程可以独立处理多个连接,增加 worker 进程数可以提高并行处理能力。

除此之外,增加单个 worker 进程可以打开的最大文件描述符数,以支持更多的并发连接。

worker_rlimit_nofile 65535;

每个连接都需要一个文件描述符,增加限制可以支持更多连接。

 

连接处理优化

epoll 是 Linux 下性能最好的事件处理机制,适合高并发。

events {
    use epoll;
    multi_accept on;
}

events 块中,使用 use epoll; 等高效的事件驱动模块,Nginx 通常会自动选择最佳的可用模块。

百万并发下Nginx的优化之道!-mikechen

select 通常有文件描述符数量的硬性限制(通常是 1024),poll 虽然没有这个限制。

但在实现上仍然可能受限,这使得它们难以处理大规模并发连接,epoll 的出现彻底改变了 Linux 下高并发网络编程的方式。

epoll 不是每次都轮询所有的文件描述符,而是采用事件通知的方式。

当某个文件描述符上的事件(如可读、可写)发生时,内核才会主动通知应用程序。这避免了无谓的遍历和检查,效率大大提高。

 

缓存与压缩优化

启用 Gzip 压缩(减少带宽占用),如下所示:

百万并发下Nginx的优化之道!-mikechen

gzip on;
gzip_min_length 1k;
gzip_types text/plain text/css application/json;
gzip_comp_level 5;

Gzip 减小响应体大小,提高传输效率。

gzip_min_length 控制多小的文件值得压缩(避免浪费 CPU)。

 

文件传输优化

使用内核零拷贝机制直接将文件内容从磁盘发送到网络套接字,减少数据在用户空间和内核空间之间的拷贝次数,提高文件传输效率。

百万并发下Nginx的优化之道!-mikechen

sendfile on;

使用内核零拷贝机制,直接将文件内容从磁盘发送到网络套接字。

减少数据在用户空间、和内核空间之间的拷贝次数,提高文件传输效率。

总之,避免用户态↔内核态拷贝,加快静态文件传输速度。

通过以上这些优化策略的组合应用,可以显著提升 Nginx 在高并发场景下的性能。

评论交流
    说说你的看法