企业级nginx内核优化篇
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内核优化篇的更多相关文章
- Nginx 内核优化
内核参数的优化示例: /etc/sysctl.conf net.ipv4.tcp_max_tw_buckets = // timewait的数量,默认是180000. net.ipv4.ip_loca ...
- 企业级Web Nginx 服务优化
企业级Web Nginx 服务优化 http://blog.51cto.com/search/result?q=%E4%BC%81%E4%B8%9A%E7%BA%A7Web+Nginx+%E6%9C% ...
- Nginx 性能优化有这篇就够了!
目录: 1.Nginx运行工作进程数量 Nginx运行工作进程个数一般设置CPU的核心或者核心数x2.如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 g ...
- 突破10万高并发的nginx性能优化经验(含内核参数优化)
写的很好,推荐阅读. 转载:http://www.cnblogs.com/kevingrace/p/6094007.html 在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并 ...
- 企业级web nginx服务优化
1.1)隐藏nginx header 内版本号信息 [root@aliyun ~]# vi /application/nginx/conf/nginx.conf http{ …… server_tok ...
- (转)Nginx配置和内核优化 实现突破十万并发
nginx指令中的优化(配置文件) worker_processes 8; nginx进程数,建议按照cpu数目来指定,一般为它的倍数. worker_cpu_affinity 00000001 00 ...
- [效果不错] nginx 高并发参数配置及linux内核参数优化,完整的内核优化设置。PHP-FPM高负载解决办法。
背景:对vps小资源的实践中对,https://justwinit.cn/post/7536/ 的再优化,再实践,再优化,特别是Nginx,PHP,内核: 零)Nginx: error_log /da ...
- Nginx优化指南+LINUX内核优化+linux连接数优化+nginx连接数优化
Most setup guides for Nginx tell you the basics - apt-get a package, modify a few lines here and the ...
- 转:Nginx 性能优化有这篇就够了!
目录: https://mp.weixin.qq.com/s/YoZDzY4Tmj8HpQkSgnZLvA 1.Nginx运行工作进程数量 Nginx运行工作进程个数一般设置CPU的核心或者核心数x2 ...
- 【转】Nginx服务并发过10万的Linux内核优化配置
http://www.linuxidc.com/Linux/2012-11/75151.htm以下Linux 系统内核优化配置均经在线业务系统测试,服务器运行状态良好,用了一些时间整理,现和大家分享一 ...
随机推荐
- mysql 必知必会整理—sql 简单语句[二]
前言 简单整理一下sql 排序与过滤. 正文 在这里需要创建一下一个数据库实例. 为了方便直接用docker 创建一下啊,方便简洁. https://hub.docker.com/_/mysql 按照 ...
- MMDeploy部署实战系列【第六章】:将编译好的MMdeploy导入到自己的项目中 (C++)
MMDeploy部署实战系列[第六章]:将编译好的MMdeploy导入到自己的项目中 (C++) 这个系列是一个随笔,是我走过的一些路,有些地方可能不太完善.如果有那个地方没看懂,评论区问就可以,我给 ...
- LLM开源小工具(基于代码库快速学习/纯shell调用LLM灵活管理系统)
随着AI的各种信息的发展,LLM各种模型不断涌现,作为一名IT人员不得不向前走,不断探索学习发现新知识. 随着学习,也了解到一些对于模型的调用,从而解决一些问题,或者对已有工具或应用的重写.如下是两个 ...
- 牛客网-SQL专项训练14
①通过子查询的方式从衬衫表SHIRTABLE中选取出销售单价shirt_price高于全部衬衫的平均价格的衬衫名字:B 解析: 题目要求需要用到子查询,故排除AC选项,而D选项在where子句中使用了 ...
- What's new in dubbo-go v1.5.6
简介: dubbogo 社区近期发布了 dubbogo v1.5.6.该版本和 dubbo 2.7.8 对齐,提供了命令行工具,并提供了多种加载配置的方式. 作者 | 铁城 dubbo-go 社区 ...
- 基于 Flutter 的 Web 渲染引擎「北海」正式开源!
简介: 阿里巴巴历时 3 年自研开发的 Web 渲染引擎北海(英文名:Kraken)正式开源,致力打造易扩展,跨平台,高性能的渲染引擎,并已在优酷.大麦.天猫等业务场景中使用. 作者 | 染陌来源 | ...
- [FAQ] Python的虚拟环境和包管理
1. 创建虚拟环境 $ python -m venv test-env 2. 激活虚拟环境 windows:tutorial-env\Scripts\activate (powershell: . ...
- [FAQ] VsCode 同时多行编辑
[多光标自定义编辑] 按住 alt 键,鼠标左键点击,出现多个光标. [批量选中匹配编辑] 鼠标选中字符,按快捷键 ctrl + shift + L,字符的右侧都出现光标,可同时编辑. Tool: ...
- [FAQ] Win10 找到打开 hosts 文件
1. Win+R 打开运行窗口. 2. 输入命令 C:\Windows\System32\drivers\etc 回车. Refer:windows hosts Link:https://www.cn ...
- [FE] Quasar BEX 热加载区别: Chrome vs Firefox
Chrome 浏览器加载扩展程序时指定的是 src-bex 目录.Firefox 指定的是 manifest.json. Quasar 提供的热加载特性是 修改 src/ 目录里的文件,src-bex ...