nginx 高并发优化参数

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

转载于:https://www.cnblogs.com/zy09/p/10361461.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络(十九)-IEEE802.11无线局域网

IEEE802.11是无线局域网的通用的标准,它是由IEEE所定义的无线网络通信的标准。 802.11的MAC帧头格式 3.无线局域网分类 有固定基础设施无线局域网 wifi名称其实就是服务集标识符。无固定基础设施无线局域网的自组织网络

谷歌用量子计算机造出「时间晶体」,挑战热力学第二定律

来源:新智元近日,谷歌联合几十位物理学家,用量子计算机造出了「时间晶体」。你能想象得到,有这样一个物体,竟然跳出了经典的热力学第二定律?没错,这就是「时间晶体」。然而,时间晶体…

7、JPA-映射-双向一对多

一个用户对应多个订单,多个订单对应一个用户,不管查哪一边都可以得到另一边的信息 实体类 Customer package com.jpa.yingshe;import javax.persistence.*; import java.util.HashSet; import java.util.Set;Table(name "JPA_CUTOMERS") Enti…

计算机网络(二十)-广域网-PPP协议和HDLC协议

一.广域网 广域网,通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个城市或国家,远距离通信,形成国际性的远程网络。 广域网的通信子网主要使用分组交换技术。广域网的通信子网可以利用分组交换…

设计模式(九)——适配器模式

将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。Adapter&#xf…

导弹防御系统,如何跟蜻蜓的大脑学习计算?

来源:大数据文摘作者:Frances Chance多雨的夏季,蜻蜓最为常见,这些美丽的生物的飞行速度极快,狩猎能力也极为出色:蜻蜓狩猎的成功率捕获了高达95% ,它们一天可以吃掉数百只蚊子。这种狩猎能力吸…

分布式文件系统HDFS

1.HDFS简介 1.1 Hadoop Distributed File System,简称HDFS。解决海量数据的分布式存储。 1.2 分布式文件系统 计算机集群中内部机器通过光纤高速交换机进行连接,机架之间通过宽带更高的光纤交换机连接。 有一个主节点机器其他的为从节点机器&#xff…

小程序开发初体验,从静态demo到接入Bmob数据库完全实现

之前我胖汾公司年会、问我能不能帮忙搞个小程序方便他们进行游戏后的惩罚/抽奖使用、出了个简单的设计图、大概三天左右做了个简单的小程序、目前提交审核了。对于写过一小段时间vue来说小程序很容易上手、写法和结构差不多。 ----------------- 这里整理的内容大致划分四个部分…

演讲实录丨徐宗本院士:如何突破机器学习的先验假设?

来源:中国人工智能学会2021年6月5日至6日,由中国科学技术协会、中国科学院、中国工程院、浙江省人民政府指导,中国人工智能学会、杭州市人民政府主办,杭州市余杭区人民政府筹备组承办,浙江杭州未来科技城管理委员会具体…

hbase单机模式配置

1.软件 https://pan.baidu.com/s/1mgPA8s02FFyPqcc9DmR-FA 提取码: 337t 2.在安装hbase之前,确保你的电脑已经安装Hadoop3.1.3,hbase对Hadoop具有版本依赖。 3.将hbase压缩文件解压到/usr/local目录下,先切换到压缩文件所在目录&#xff0…

QT QTransform与QMatrix 有啥区别?

刚开始学习QT,我使用的是QT5.12进行开发,要不时地查阅QT的官方帮助文档~ 仔细阅读QT官方帮助QTransform类以及QMatrix类,发现两个类的作用描述一模一样(“The QTransform class specifies 2D transformations of a coordinate sys…

hbase伪分布式配置

1.在单机模式的基础上进行配置,打开hbase-env.sh。 vim /usr/local/hbase/conf/hbase-env.sh2.配置HBASE_CLASSPATH为hadoop安装目录下的conf目录,即 /usr/local/hadoop/conf。JAVA_HOME、HBASE_MANAGES_ZK之前已经配置好了。 export HBASE_CLASSPATH/…

机器学习是科学还是“炼金术”?

作者:Samuel Flender译者:王强策划: 刘燕在实证领域,科学的严谨性是从假设开始塑造的。业界对机器学习研究的科学严谨性的质疑声越来越多了。在 2017 年 NIPS 会议上的一场 演讲 中,当时就职于谷歌 AI 的 Ali Rahimi 和 Ben Recht 认为 ML 已经成为了一种…

创建新DB和新用户DBeaver连接

1.创建一个新的DB和用户ruozecreate database ruozedata;grant all privileges on ruozedata.* to ruoze% identified by 123456; *.* 用户% 用户127.0.0.1 密码% MySQL代表ruoze该用户允许在任意ip地址来访问当前数据库127.0.0.1 当前机器 flush privileges; window当前电脑 1…

谷歌发布史上最强人类大脑「地图」,在线可视3D神经元「森林」!

来源:机器学习研究组订阅突触,是神经网络的「桥梁」。我们知道,人类大脑有860亿个神经元,因为有了突触,才可以把神经元上的电信号传递到下一个神经元。长久以来,科学家们一直梦想通过绘制完整的大脑神经网络…

javaweb c3p0连接oracle12c

最近在搞javaweb,在连接池上碰到了一系列的问题,在Junit测试时,oracle12c报错: ORA-28040: 没有匹配的验证协议 百度解决:修改 $ORACLE_HOME/network/admin/sqlnet.ora 加入如下:   SQLNET.ALLOWED_LOGON_VERSION8 之…

数学的意义——席南华院士科普讲座实录

来源:中国数学会编辑:nhyilin谢谢主持人的介绍,谢谢大家在周末星期六的下午听这个报告。我今天要说的是“数学的意义”。数学,要说爱你不容易,不管你是天才还是庸人,都是它虐待的对象,差别在于有…

C#穿透session隔离———Windows服务启动UI交互程序

在Windows服务里面启动其他具有界面的应用程序,需要穿透session隔离,尝试了很多种方法,都可行,现在一一列举下来,并写下几个需要注意的地方。 需要注意的地方 首先要将服务的Account属性设置为LocalSystem,…

谈谈相控阵雷达为何如此先进

作者:寒木钓萌来源:电子万花筒对于很多人来说,相控阵雷达非常耳熟,但它的原理又是什么呢?传统雷达与相控阵雷达之区别要说相控阵雷达的原理,就不得不提一下传统雷达的工作方式。影视中,如果非要…

Shell命令-磁盘与文件系统之dumpe2fs、dump

内容更新中 转载于:https://www.cnblogs.com/wjcLinux/p/11123080.html