Nginx的10万并非内存优化

关于内核参数的优化:

net.ipv4.tcp_max_tw_buckets = 6000
timewait的数量,默认是180000。
net.ipv4.ip_local_port_range = 1024 65000
允许系统打开的端口范围。
net.ipv4.tcp_tw_recycle = 1
启用timewait快速回收。
net.ipv4.tcp_tw_reuse = 1
开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。
net.ipv4.tcp_syncookies = 1
开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies来处理。
net.core.somaxconn = 262144
web 应用中 listen 函数的 backlog 默认会给我们内核参数的 net.core.somaxconn 限制到
128,而nginx定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值。
net.core.netdev_max_backlog = 262144
每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包
的最大数目。
net.ipv4.tcp_max_orphans = 262144
系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数
字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击,
不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。
net.ipv4.tcp_max_syn_backlog = 262144
记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而
言,缺省值是1024,小内存的系统则是128。
net.ipv4.tcp_timestamps = 0
时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间
戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。
net.ipv4.tcp_synack_retries = 1
为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也
就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送 SYN+ACK 包的
数量。
net.ipv4.tcp_syn_retries = 1
在内核放弃建立连接之前发送SYN 包的数量。
net.ipv4.tcp_fin_timeout = 1
如果套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT-2 状态的时间。对端
可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180 秒,
2 你可以按这个设置,但要记住的是,即使你的机器是一个轻载的 WEB 服务器,也有因为大
量的死套接字而内存溢出的风险,FIN- WAIT-2 的危险性比FIN-WAIT-1 要小,因为它最多只
能吃掉1.5K内存,但是它们的生存期长些。 

net.ipv4.tcp_keepalive_time = 30
当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2 小时。

 

 

 

  1. net.ipv4.ip_forward = 0
  2. net.ipv4.conf.default.rp_filter =1
  3. net.ipv4.conf.default.accept_source_route = 0
  4. kernel.sysrq = 0
  5. kernel.core_uses_pid = 1
  6. net.ipv4.tcp_syncookies = 1
  7. kernel.msgmnb = 65536
  8. kernel.msgmax = 65536
  9. kernel.shmmax = 68719476736
  10. kernel.shmall = 4294967296
  11. net.ipv4.tcp_max_tw_buckets = 6000           #timewait的数量
  12. net.ipv4.tcp_sack = 1                                 #有选择的应答
  13. net.ipv4.tcp_window_scaling = 1                 #设置tcp/ip会话滑动窗口是否可变,1可变,0不可变。开启使滑动窗口大小增加数个数量级,提高数据传输能力
  14. net.ipv4.tcp_rmem = 4096        87380    4194304  #tcp接收缓冲区
  15. net.ipv4.tcp_wmem = 4096        16384    4194304  #tcp发送缓冲区
  16. net.core.wmem_default = 8388608                        #发送套接字缓冲区大小的缺省值(字节单位)
  17. net.core.rmem_default = 8388608                         #接收套接字缓冲区大小的缺省值
  18. net.core.rmem_max = 16777216                           #接收套接字缓冲区大小的最大值
  19. net.core.wmem_max = 16777216                          #发送套接字缓冲区大小的最大值
  20. net.core.netdev_max_backlog = 262144           #允许送到队列的数据包最大数目
  21. net.core.somaxconn = 262144                        #web应用中listen函数的backlog(积压)
  22. net.ipv4.tcp_max_orphans = 3276800              #最多有多少个TCP套接字不被关联到任何一个用户的句柄上
  23. net.ipv4.tcp_max_syn_backlog = 262144          #记录那些尚未收到客户端确认信息的连接请求最大值,表示SYN队列的长度,可以容纳更多等待连接的网络连接数
  24. net.ipv4.tcp_timestamps = 0                  #时间戳关闭
  25. net.ipv4.tcp_synack_retries = 1               #这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
  26. net.ipv4.tcp_syn_retries = 1                    #内核放弃连接之前发送SYN包的数量
  27. net.ipv4.tcp_tw_recycle = 1                     #timewait快速回收
  28. net.ipv4.tcp_tw_reuse = 1                       #timewait 用于新的连接
  29. net.ipv4.tcp_mem =    1835008 2752512 3670016     #out of socket memory
  30. net.ipv4.tcp_fin_timeout = 15                     #保持在FIN-WAIT-2状态的时间,对端出错永不关闭甚至当机缺省值是60s
  31. net.ipv4.tcp_keepalive_time = 30                                #keepalived 发送消息的频度
  32. net.ipv4.ip_local_port_range = 1024    65000              #端口范围

#以下可能需要加载ip_conntrack模块 modprobe ip_conntrack ,有文档说防火墙开启情况下此模块失效

#缩短established的超時時間

net.netfilter.nf_conntrack_tcp_timeout_established = 180

#CONNTRACK_MAX 允许的最大跟踪连接条目,是在内核内存中netfilter可以同时处理的“任务”(连接跟踪条目)

net.netfilter.nf_conntrack_max = 1048576

net.nf_conntrack_max = 1048576

执行生效:/sbin/sysctl -p

一般来说nginx配置文件中对优化比较有作用的为以下几项:
worker_processes 8;
3 nginx进程数,建议按照cpu数目来指定,一般为它的倍数。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000
01000000 10000000;
为每个进程分配 cpu,上例中将 8 个进程分配到 8 个 cpu,当然可以写多个,或者将一
个进程分配到多个cpu。
worker_rlimit_nofile 102400;
这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文
件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit
-n的值保持一致。
use epoll;
使用epoll的I/O模型,这个不用说了吧。
worker_connections 102400;
每个进程允许的最多连接数,理论上每台 nginx 服务器的最大连接数为
worker_processes*worker_connections。
keepalive_timeout 60;
keepalive超时时间。
client_header_buffer_size 4k;
客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求
头的大小不会超过 1k,不过由于一般系统分页都要大于 1k,所以这里设置为分页大小。分
页大小可以用命令getconf PAGESIZE取得。
open_file_cache max=102400 inactive=20s;
这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件
数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
open_file_cache_valid 30s;
这个是指多长时间检查一次缓存的有效信息。
open_file_cache_min_uses 1;
open_file_cache指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文
件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,
它将被移除。

时间: 2024-10-08 14:41:23

Nginx的10万并非内存优化的相关文章

基于Nginx实现10万+并发,你应该做的Linux内核优化

由于默认的linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,是的Nginx可以拥有更高的性能: 在优化内核时,可以做的事情很多,不过,我们通常会根据业务特点来进行调整,当Nginx作为静态web内容服务器.反向代理或者提供压缩服务器的服务器时,期内核参数的调整都是不同的,这里针对最通用的.使Nginx支持更多并发请求的TCP网络参数做简单的配置: 首先,你需要修改/etc/sysctl.conf来更改内核参数. fs.fil

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点.本 文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP长连接,然后查看NGINX和系统的资源利用率. 二 测试环境 1.服务端 硬件:双核2.3GHz,2GB内存 软

nginx优化 实现10万并发访问量

一般来说nginx配置文件中对优化比较有作用的为以下几项:worker_processes 8;1 nginx进程数,建议按照cpu数目来指定,一般为它的倍数.worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 0010000001000000 10000000;为每个进程分配 cpu,上例中将 8 个进程分配到 8 个 cpu,当然可以写多个,或者将一个进程分配到多个cpu.worker_rlimit_nofile

NGINX轻松管理10万长连接

一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点.本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP长连接,然后查看NGINX和系统的资源利用率. 二 测试环境 1.服务端 硬件:双核2.3GHz,2GB内存 软件:CentOS 6.5, kernel 2.6.32,  gcc 4.4.7, nginx 1.4.7 IP:10.211.55.8 内核参数调整: $ /sb

Nginx 1.10.1 版本nginx.conf优化配置及详细注释

Nginx 1.10.1 的nginx.conf文件,是调优后的,可以拿来用,有一些设置无效,我备注上了,不知道是不是版本的问题,回头查一下再更正. #普通配置 #==性能配置#!异常配置 #运行用户 user nobody; #pid文件 pid logs/nginx.pid; #==worker进程数,通常设置等同于CPU数量,auto为自动检测 worker_processes auto; #==worker进程打开最大文件数,可CPU*10000设置 worker_rlimit_nofi

优化IIS7.5支持10万个同时请求的配置方法_win服务器

优化IIS7.5支持10万个同时请求的配置方法_win服务器 请求iis7.5iis7.5优化 摘要: 本文讲的是优化IIS7.5支持10万个同时请求的配置方法_win服务器, 通过对IIS7的配置进行优化,调整IIS7应用池的队列长度,请求数限制,TCPIP连接数等方面,从而使WEB服务器的性能得以提升,保证WEB访问的访问流畅. IIS7.5是微软推出的最新平台IIS,性能也较以前有很大的提升,但是默认的设置 云计算 云服务器ECS 大数据 建站 备案 文档 域名 whois查询 文集 通过

Unity3D 游戏开发之内存优化

项目的性能优化主要围绕CPU.GPU和内存三大方面进行. 无论是游戏还是VR应用,内存管理都是其研发阶段的重中之重. 然而,在我们测评过的大量项目中,90%以上的项目都存在不同程度的内存使用问题.就目前基于Unity引擎开发的移动游戏和移动VR游戏而言,内存的开销无外乎以下三大部分:1.资源内存占用:2.引擎模块自身内存占用:3.托管堆内存占用. 如果您的项目存在内存问题,一定逃不出以上三种情况.今天,我们就这三种情况逐一进行解释. 资源内存占用 在一个较为复杂的大中型项目中,资源的内存占用往往

ANDROID内存优化(大汇总——中)

本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在ANDROID开发中遇到关于内存问题,或者马上要参加面试,或者就是单纯的学习或复习一下内存相关知识,都欢迎阅读.(本文最后我会尽量列出所参考的文章). OOM: 内存泄露可以引发很多的问题: 1.程序卡顿,响应速度慢(内存占用高时JVM虚拟机会频繁触发GC) 2.莫名消失(当你的程序所占内存越大,它在后台的时候就

每秒处理10万订单乐视集团支付架构

随着乐视硬件抢购的不断升级,乐视集团支付面临的请求压力百倍乃至千倍的暴增.作为商品购买的最后一环,保证用户快速稳定的完成支付尤为重要.所以在15年11月,我们对整个支付系统进行了全面的架构升级,使之具备了每秒稳定处理10万订单的能力.为乐视生态各种形式的抢购秒杀活动提供了强有力的支撑.   一. 分库分表 在redis,memcached等缓存系统盛行的互联网时代,构建一个支撑每秒十万只读的系统并不复杂,无非是通过一致性哈希扩展缓存节点,水平扩展web服务器等.支付系统要处理每秒十万笔订单,需要