1. cpu核心配置

   方法1: worker_processes auto;  自动调用[推荐]
方法2: worker_processes 4; 手工配置 检查CPU核心:yum install numactl
命令: numactl --hardware
[root@leilei ~]# numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1
node 0 size: 4095 MB
node 0 free: 194 MB
node distances:
node 0
0: 10

2. cpu绑定减少进程切换:

   #如  双核CPU配置:  worker_cpu_affinity 01  10;
四核cpu配置: worker_cpu_affinity 0001 0010 0100 1000;
八核cpu配置: worker_cpu_affinity 0001 0010 0100 1000 1001 1010 1100 1101;
自动切换: worker_cpu_affinity auto;

3. 进程优先级:

   方法1: worker_priority 0; 默认配置
方法2: worker_priority -20; 优先级最高

4. 并发连接:

	worker_connections  100000;
nginx默认为1024,当访问量过大时1024就不够用了
需要修改worker_rlimit_nofile文件打开数,这个不能被worker_connections超出,否则会出现wern,所以基本配置:
worker_rlimit_nofile 65535; #不应该超过ulimit -a中的数值.
worker_connections 100000; #单个work进程的最大并发数 worker_rlimit_nofile 65535;
worker_connections 100000;

5. 事件处理模型:

events {
use epoll;
worker_rlimit_nofile 65535;
worker_connections 100000; #上下游连接加起来 都是使用这个句柄数.
multi_accept on; #允许尽可能接受多的连接 默认值off 建议改为 on
accept_mutex on; # 防止被唤醒,从而加重服务器压力,默认值 off 建议改为on
accept_mutex_delay 10ms; # 设置获得互斥锁的最少延迟时间。 默认值 500ms
}

6. 开启同时接受多连接

    events {
multi_accept on;
}

7. 避免频繁唤醒

    events {
accept_mutex on;
}

8. sendfile 高效传输:

	配置区块: http server location
sendfile on;

9. 内核优化:

   cat /etc/sysctl.cnf
net.core.netdev_max_backlog = 1000 #默认值1000 在高并发情况下该值可以改为 102400
net.core.somaxconn = 128 #默认值1000 在高并发情况下可以设置更高 102400
net.ipv4.tcp_max_orphans = 32768 #默认值32768 这是TCP连接套戒指缓存,用于防止DDOS攻击,在内存较大时可以修改的大一些 如: 102400
net.ipv4.tcp_max_syn_backlog = 256 #默认值256 这是用于记录未被确认的连接,一般需要加大 如: 102400
net.ipv4.tcp_timestamps = 1 #默认值1 这是用于数据包时间戳的支持设置,避免网络异常,默认值 1 建议修改为 0 禁用此设置
net.ipv4.tcp_synack_retries = 5 #默认值5 这是设置内核放弃TCP连接之前向客户端发送SYN+ACK包的数量,用于三次握手,如果值设置过多会影响性能 建议改为 2
net.ipv4.tcp_syn_retries = 5 #默认值5 与上面功能类似,建议修改为 2

10. 多核负载均衡:

  listen  80 reuseport;
listen 443 ssl http2 default_server reuseport;
连接请求的速度是很高的,但是请求不需要大量的处理,reuseport 也能大幅提高性能,此优化项需要继续centos7以上或Linux内核3.9以上的版本才可以使用. 因为它是基于内核层面负载均衡
引用reuseport参数后,对引用的socket,accept_mutex参数将会无效

11. TCP连接握手优化[内核调优]:

        net.ipv4.tcp_syn_retries = 6                   #主动建立连接,发送SYN报文的重试次数.
net.ipv4.ip_local_port_range = 32768 60999 #建立连接后本地端口的可用范围
net.ipv4.tcp_fastopen = 3 #fast open 配置: 0 关闭 1 作为客户端使用 2 作为服务器使用 3 无论客户端和服务器都可以使用
net.ipv4.tcp_retries1 = 3 #丢包重传上限,到达上限,更新缓存
net.ipv4.tcp_retries2 = 15 #丢包重传上限,到达上限,更新缓存
net.ipv4.ip_local_port_range = 20000 65535 #可用端口范围
net.ipv4.tcp_sack = 1 #错误状态快速恢复
#net.ipv4.tcp_fack = 1 #拥塞避免和 快速重传功能 当tcp_sack设置为0的时候,这个值即使设置为1也无效
net.ipv4.tcp_max_syn_backlog = 128 #syn_rcvd状态连接最大个数# 防止TCP半连接报文攻击
net.ipv4.tcp_synack_retries = 1 #三次握手中的第二次握手,该配置决定Linux内核放弃连接之前发送syn+ack确认包的数量
net.ipv4.tcp_tw_recycle = 1 #TCP连接中的time_wait sockets的快速回收
net.ipv4.tcp_tw_reuse = 1 #开启连接复用,将time_wait sockets重新用于新的tcp连接.
net.ipv4.ip_local_port_range = 20000 65535 #对外处理连接的端口反围
fs.file-max = 204800 #文件句柄数 这些调优参数加入到 /etc/sysctl.conf 后 使用 sysctl -p 让他生效

12. TCP连接建立优化

    net.core.netdev_max_backlog = 25000     #默认128 [防止syn攻击backlog] 这是接受来自网卡,但是未被内核协议栈处理的报文队列长度.
net.ipv4.tcp_max_syn_backlog = 25000 #默认128 syn_rcvd状态连接最大个数# 防止TCP半连接报文攻击

13. TCP设置时间戳,避免复用

    net.ipv4.tcp_timestamps = 0

14. 主动建立连接应用层超时时间[反向代理相关]

	proxy_connect_timeout  60s;

15. 超出处理能力,对新来的SYN直接丢弃连接 [别配置]

	net.ipv4.tcp_abort_on_overflow = 0

16. SYN队列满后,新的SYN不进入列队 1代表启用 0 关闭

    net.ipv4.tcp_syncookies = 1

企业级nginx内核优化篇的更多相关文章

  1. Nginx 内核优化

    内核参数的优化示例: /etc/sysctl.conf net.ipv4.tcp_max_tw_buckets = // timewait的数量,默认是180000. net.ipv4.ip_loca ...

  2. 企业级Web Nginx 服务优化

    企业级Web Nginx 服务优化 http://blog.51cto.com/search/result?q=%E4%BC%81%E4%B8%9A%E7%BA%A7Web+Nginx+%E6%9C% ...

  3. Nginx 性能优化有这篇就够了!

    目录: 1.Nginx运行工作进程数量 Nginx运行工作进程个数一般设置CPU的核心或者核心数x2.如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 g ...

  4. 突破10万高并发的nginx性能优化经验(含内核参数优化)

    写的很好,推荐阅读. 转载:http://www.cnblogs.com/kevingrace/p/6094007.html 在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并 ...

  5. 企业级web nginx服务优化

    1.1)隐藏nginx header 内版本号信息 [root@aliyun ~]# vi /application/nginx/conf/nginx.conf http{ …… server_tok ...

  6. (转)Nginx配置和内核优化 实现突破十万并发

    nginx指令中的优化(配置文件) worker_processes 8; nginx进程数,建议按照cpu数目来指定,一般为它的倍数. worker_cpu_affinity 00000001 00 ...

  7. [效果不错] nginx 高并发参数配置及linux内核参数优化,完整的内核优化设置。PHP-FPM高负载解决办法。

    背景:对vps小资源的实践中对,https://justwinit.cn/post/7536/ 的再优化,再实践,再优化,特别是Nginx,PHP,内核: 零)Nginx: error_log /da ...

  8. Nginx优化指南+LINUX内核优化+linux连接数优化+nginx连接数优化

    Most setup guides for Nginx tell you the basics - apt-get a package, modify a few lines here and the ...

  9. 转:Nginx 性能优化有这篇就够了!

    目录: https://mp.weixin.qq.com/s/YoZDzY4Tmj8HpQkSgnZLvA 1.Nginx运行工作进程数量 Nginx运行工作进程个数一般设置CPU的核心或者核心数x2 ...

  10. 【转】Nginx服务并发过10万的Linux内核优化配置

    http://www.linuxidc.com/Linux/2012-11/75151.htm以下Linux 系统内核优化配置均经在线业务系统测试,服务器运行状态良好,用了一些时间整理,现和大家分享一 ...

随机推荐

  1. 新手的登录qsnctfwp

    打开登录界面 按要求以普通用户 user 的身份,通过密码 password 登录 使用 BurpSuite 拦截登录情况 在获取(GET)登录结果页面时,修改 Cookie 中的 username ...

  2. redis 简单整理——CEO[十五]

    前文 简单介绍一下CEO. 正文 Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信 息用来实现诸如附近位置.摇一摇这类依赖于地理位置信息的功能,对于需 要实现这些功能的开发者来 ...

  3. 《Effective C#》系列之(零)——概要

    把全书的内容讲述完整可能需要很长时间,我可以先回答主要目录和核心的内容.如果您有任何特定问题或需要更详细的解释,请告诉我. <Effective C#>一书共包含50条C#编程建议,以下是 ...

  4. 力扣686(java)-重复叠加字符串匹配(中等)

    题目: 给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1. 注意:字符串 "abc" 重复叠加 ...

  5. 第 10 章 使用pyecharts 进行数据展示

    第 10 章 使用pyecharts 进行数据展示 10.1 安装 pyecharts pyecharts 是一个用于生成 Echarts 图表的类库, Echarts 是百度开源的一个数据可视化JS ...

  6. 几种常见的MySQL/PolarDB-MySQL回收表空间方法对比

    简介: 当我们频繁的删除表中的数据后,碎片就会变多,有经验的DBA就会回收表空间,回收表空间有好几种方式,我们要选择哪一种呢? 背景 为什么需要回收表空间?任何一个存储或您购买的实例规格都有容量限制, ...

  7. 阿里云AHAS Chaos:应用及业务高可用提升工具平台之故障演练

    简介: 阿里云AHAS Chaos:应用及业务高可用提升工具平台之故障演练 应用高可用服务AHAS及故障演练AHAS Chaos 应用高可用服务(Application High Availabili ...

  8. 【详谈 Delta Lake 】系列技术专题 之 湖仓一体( Lakehouse )

    简介: 本文翻译自大数据技术公司 Databricks 针对数据湖 Delta Lake 的系列技术文章.众所周知,Databricks 主导着开源大数据社区 Apache Spark.Delta L ...

  9. 剪贴板被占用导致应用使用剪贴板拷贝内容失败抛出 COMException 0x800401D0 错误

    本文记录某些软件,例如 向日葵远程控制 软件占用剪贴板,导致 WPF 应用使用剪贴板拷贝内容和设置剪贴板时,抛出 System.Runtime.InteropServices.COMException ...

  10. dotnet 6 HttpClientHandler 和 SocketsHttpHandler 有什么差别

    本文来告诉大家在 dotnet 6 的 HttpClientHandler 和 SocketsHttpHandler 两个类型有什么不同 在创建 HttpClient 时,可以在 HttpClient ...