Nginx 性能调优「译」

这是一篇译文,原文链接:Tuning NGINX for Performance Nginx 为人熟知的是在负载均衡、静态缓存和 WEB 服务器等方面的高性能,目前世界上最繁忙的站点中大约有 40% 在使用 Nginx。绝大多数情况下,大多数默认的 Nginx 和 Linux 配置都可以工作得非常好,但也需要做一些优化以获得最好的性能。本文将讨论在优化系统时需要考虑的 Nginx 和 Linux 的部分配置。可配置的选项有很多,但是本文只涵盖推荐大多数用户调整的配置选项。本文没有涵盖的配置选项,只有那些对 Nginx 和 Linux 有了深入的理解的人或者获得了 Nginx 技术支持和专业的服务团队的推荐建议后,才可以考虑调整。Nginx 专业服务器团队已经为世界上一些最繁忙的站点通过优化 Nginx 获得了最高水平的性能,并且可以为任何需要获得自己系统最大产出的客户服务。 简介 本文假设读者对 Nginx 架构和配置的概念已有了基本的了解。Nginx 的文档内容将不会在本文中重复,但本文会提供各项配置简要的介绍和相关文档的链接。 在性能调优时,要遵循一个好的规则:一次只修改一个配置选项,如果这个修改没有在性能方面带来优化,那么要再改回默认值。 我们从 Linux 性能优化的讨论开始,因为 Linux 性能优化的一些值会影响到 Nginx 的一些配置。 Linux 配置 尽管现代 Linux 内核(2.6+)在各种配置情况下都工作得很好,但也有一些配置是想要修改的。如果操作系统的配置设置的太低,那内核日志将会有错误信息,从而得知哪些配置需要调整。Linux 性能优化可能涉及的配置有很多,这里我们只讨论那些优化达到正常工作负载最有可能涉及到的那些配置。调整这些配置请参考详细的 Linux 文档。 Backlog 队列 下面的配置选项与网络连接和其排队方法直接相关。如果连入率很高(译者注:客户端发起的连接很多)且系统性能配置不匹配,例如一些连接表现得有所停顿,那么修改下面得配置将可能有用。 net.core.somaxconn: 设置等待 Nginx 接受的连接队列的大小。由于 Nginx 接受连接非常的快,这个值通常情况下不用设置得很大,但系统默认值可能比较小,所以对于流量比较大的站点,增大这个值是个不错的想法。如果这个值太小,在内核日志中应该会看到错误消息,那么就需要增大这个值,直到错误消失。注意:若将这个值设置为大于 512 的话,那么需要在 Nginx 配置中修改 listen 指令的 backlog 参数来匹配这个数字。 net.core.netdev_max_backlog: 设置数据包在被发送到 CPU 前可被网卡缓存的速率。对于带宽很大的机器来说,这个值需要增大。可以查阅网卡关于这项设置的建议文档或者查看内核日志中此项设置相关的错误。...

October 16, 2014 · 2 min