轻量级HTTP服务器Nginx(Nginx性能优化技巧)


一、编译安装过程优化
1. 减小 Nginx 编译后的文件大小
在编译 Nginx 时,默认以 debug 模式进行,而在 debug 模式下
会插入很多跟踪和 ASSERT 之类的信息,编译完成后,一个 Nginx
要有好几兆字节。在编译前取消 Nginx 的 debug 模式,编译完成后
Nginx 只有几百千字节,因此可以在编译之前,修改相关源码,取消
debug 模式,具体方法如下 :
在 Nginx 源码文件被解压后,找到源码目录下的 auto/cc/gcc 文
件,在其中找到如下几行 :
# debug
CFLAGS=”$CFLAGS -g”
注释掉或删掉这两行,即可取消 debug 模式。
2. 为特定的 CPU 指定 CPU 类型编译优化
在编译 Nginx 时,默认的 GCC 编译参数是“-O”,要优化 GCC 编
译,可以使用以下两个参数 :
--with-cc-opt='-O3'
--with-cpu-opt=CPU # 为特定的 CPU 编译,有效的值包括 :
pentium, pentiumpro, pentium3, pentium4, athlon,
opteron, amd64, sparc32, sparc64, ppc64
要确定 CPU 类型,可以通过如下命令 :
#cat /proc/cpuinfo | grep "model name"
二、利用 TCMalloc 优化 Nginx 的性能
参考:
https://blog.csdn.net/ChenVast/article/details/72866435
三、Nginx 内核参数优化
内核参数的优化,主要是在 Linux 系统中针对 Nginx 应用而进行
的系统内核参数优化,常见的优化参数值如下。
下面给出一个优化实例以供参考 :
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
net.core.somaxconn = 262144
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
将上面的内核参数值加入 /etc/sysctl.conf 文件中,然后执行如
下命令使之生效 :
[home]#/sbin/sysctl -p
下面是对实例中选项的含义进行介绍 :
net.ipv4.tcp_max_tw_buckets 参数用来设定 timewait 的数
量,默认是 180000,这里设为 6000。
net.ipv4.ip_local_port_range 选项用来设定允许系统打开的端
口范围。
net.ipv4.tcp_tw_recycle 选项用于设置启用 timewait 快速回
收。
net.ipv4.tcp_tw_reuse 选项用于设置开启重用,允许将 TIME-
WAIT sockets 重新用于新的 TCP 连接。
net.ipv4.tcp_syncookies 选项用于设置开启 SYN Cookies,当
出现 SYN 等待队列溢出时,启用 cookies 进行处理。
net.core.somaxconn 选项默认值是 128, 这个参数用于调节系
统同时发起的 tcp 连接数,在高并发的请求中,默认的值可能会导致
链接超时或者重传,因此,需要结合并发请求数来调节此值。
net.core.netdev_max_backlog 选项表示当每个网络接口接收
数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据
包的最大数目。
net.ipv4.tcp_max_orphans 选项用于设定系统中最多有多少个
TCP 套接字不被关联到任何一个用户文件句柄上。如果超过这个数
字,孤立连接将立即被复位并打印出警告信息。这个限制只是为了防
止简单的 DoS 攻击。不能过分依靠这个限制甚至人为减小这个值,
更多的情况是增加这个值。
net.ipv4.tcp_max_syn_backlog 选项用于记录那些尚未收到客
户端确认信息的连接请求的最大值。对于有 128MB 内存的系统而
言,此参数的默认值是 1024,对小内存的系统则是 128。
net.ipv4.tcp_synack_retries 参数的值决定了内核放弃连接之
前发送 SYN+ACK 包的数量。
net.ipv4.tcp_syn_retries 选项表示在内核放弃建立连接之前发
送 SYN 包的数量。
net.ipv4.tcp_fin_timeout 选 项 决 定 了 套 接 字 保 持 在 FIN-
WAIT-2 状态的时间。默认值是 60 秒。正确设置这个值非常重要,
有时候即使一个负载很小的 Web 服务器,也会出现因为大量的死套
接字而产生内存溢出的风险。
net.ipv4.tcp_keepalive_time 选项表示当 keepalive 启用的时
候,TCP 发送 keepalive 消息的频度。默认值是 2(单位是小时)。 
原文地址:https://www.cnblogs.com/steven9898/p/11309512.html