企业级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 系统内核优化配置均经在线业务系统测试,服务器运行状态良好,用了一些时间整理,现和大家分享一 ...
随机推荐
- 扩展中国剩余定理证明及例题 Strange Way to Express Integers
前置知识 中国剩余定理(CRT),逆元: EXCRT是什么 我们知道,对于 对于 \[\begin{equation} \begin{cases} x \equiv c_1 \ (mod \ m_1) ...
- Sarsa模型和Q_learning模型简记
1. Sarsa模型 1.1 Sarsa类代码: class SarsaAgent(object): def __init__(self,state_n,action_n,learning_rate= ...
- JavaScript中的事件模型如何理解?
一.事件与事件流 javascript中的事件,可以理解就是在HTML文档或者浏览器中发生的一种交互操作,使得网页具备互动性, 常见的有加载事件.鼠标事件.自定义事件等 由于DOM是一个树结构,如果在 ...
- APISIX 简单的自定义插件开发步骤
本文基于 APISIX 3.2 版本进行插件开发并运行通过. APISIX 目前开发插件比较简单,只需要编写 Lua 源代码并放到默认的插件目录下,然后通过配置文件开启插件即可,我们如果使用 Dock ...
- Java面试题:请谈谈对ThreadLocal的理解?
ThreadLocal是一种特殊的变量存储机制,它提供了一种方式,可以在每个线程中保存数据,而不会受到其他线程的影响.这种机制在多线程编程中非常有用,因为它允许每个线程拥有自己的数据副本,从而避免了数 ...
- 力扣73(java)-矩阵置零(中等)
题目: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 提示: m == matrix.length n == matrix[0].l ...
- 免费体验!阿里云智能LOGO帮你解决设计难题
简介:超实用!零基础搞定一个高大上的智能logo设计 新年过后,往往是大家一年中士气最足的时候,散去了年末的疲惫和emo,重燃对新一年的热情和希望. 想创业的朋友们同样意气风发,趁着新年的劲头想大干 ...
- 一文详解Redis中BigKey、HotKey的发现与处理
简介: 在Redis的使用过程中,我们经常会遇到BigKey(下文将其称为"大key")及HotKey(下文将其称为"热key").大Key与热Key如果未能及 ...
- [FE] Chrome Extension 五步曲
1. Create the manifest.jsonOnly three fields is needed. { "name": "Getting Started Ex ...
- dotnet OpenXml SDK 形状填充渐变色的主题色
在 Office 文档的一些有趣的设计,颜色和画刷是可以继承的,这个继承包括了属性的继承.在形状填充里面使用的渐变色是可以一部分属性放在主题里面,主要找到主题里面的画刷,替换掉形状自己定义的内容,才是 ...