一 、nginx 服务配置优化:

1.nginx进程数,建议按照cpu数目来指定,一般为它的倍数。worker_processes 定义了nginx对外提供web服务时的worker进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据的硬盘数量及负载模式。不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(可以设置为“auto”将尝试自动检测它)。

worker_processes ;

2.为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。

worker_cpu_affinity        ;

3. 指定worker 进程能够打开的最大句柄数,默认选择与 ulimit -n 的值一致。通过ulimit 修改配置文件。


worker_rlimit_nofile 102400;

[root@localhost ~]# ulimit -n
102400

cat /etc/security/limits.conf 

4.nginx 使用epoll 模型。

use epoll;

5.单个worker 进程连接数限制,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。

worker_connections ;

6.keepalive超时时间设置,建议为60s 不要设置太大。

keepalive_timeout ;

7.客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。

client_header_buffer_size 4k;

[root@localhost ~]# getconf PAGESIZE

[root@localhost ~]# 

8. 这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。

open_file_cache max= inactive=20s;

9. 指定多长时间检查一次缓存的有效性。

open_file_cache_valid 30s;

10. open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。

open_file_cache_min_uses ;

二、内核参数的优化:

1. 表示系统同时保持TIME_WAIT状态的socket数量, 如果超过这个值, TIME_WAIT状态的socket会被清除, 同时打印警告日志,默认18000 ,减少这个值可以加快无效连接的回收

net.ipv4.tcp_max_tw_buckets = 

2. 允许打开的端口范围

net.ipv4.ip_local_port_range =  

3. timewait 快速回收,tcp_tw_recycle参数使处于TIME_WAIT状态的的socket被快速回收(默认是2msl时间).

tcp_tw_recycle参数想要正常工作, 还依赖于tcp_timestamp选项, 它要求数据包的时间戳严格顺序. 所以在公网环境下, 如果多client在同一NAT中, 上行包的timestamp无法保证顺序, 会出现严重问题. 所以tcp_tw_recycle参数一般不建议打开, 保持默认为0.

net.ipv4.tcp_tw_recycle = 

4.开启处于TIME_WAIT状态下的socket快速重用, 用于新的tcp连接

net.ipv4.tcp_tw_reuse = 

5.开启SYN Cookies ,当出现SYN等待队列溢出时,启用cookies来处理

net.ipv4.tcp_syncookies = 

6.web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值。

net.core.somaxconn = 262144

7.当网卡接受数据包的速率, 比kernel处理来的快时, 即kernel处理跟不上包率时, cache这些数据包的队列长度.

默认值是1k, 可以适当调大到2k或者4k, 再大的意义不是很大, kernel都忙不过来了, cache再多也只能治标不治本.

net.core.netdev_max_backlog = 

8. 表示没有任何handle的socket的最大数量, 通俗一点说, 即不属于任何进程的tcp socket最大数量. 超过这个数量的socket会被reset, 并同时告警.

这个参数是为了防御简单的DDOS攻击, 一般系统给的默认大多是8k或者16k, 某些防火墙会把它改成2k.

在网络特别繁忙时, 为了避免大量的告警信息, 也有将这个参数调大的, 例如256k.

建议这个参数保持默认就好.

net.ipv4.tcp_max_orphans = 

9.记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128。

net.ipv4.tcp_max_syn_backlog = 

10. 时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。

net.ipv4.tcp_timestamps = 

11. tcp_syn_retries, 顾名思义, 即握手时syn的最大重发次数, 默认是6. 这是一个客户端行为, 默认值是5, 在网络情况良好的情况下可以调小到 2.

tcp_synack_retries, 是指握手时server重发ack的最大次数, 默认是5. 这个值也可以设置到 2, 来提高server的效率.

net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

12. tcp连接保持在FIN_WAIT_2的时间, 默认值是60, 这个参数可以适当调低: 30乃至更低都可以, 从而减少内存的消耗.

net.ipv4.tcp_fin_timeout = 

13. 当keepalive选项开启时, tcp连接的超时时间, 默认是7200. 为了提高效率及更高的安全性, 可以调整这个参数到 1800.

但是业务不应该只依赖于tcp的超时机制, 特别是长连接的业务, 应该保证自己的心跳超时机制, 来防止恶意空连接.

net.ipv4.tcp_keepalive_time = 

14. 一个完整的内核优化配置

net.ipv4.ip_forward =
net.ipv4.conf.default.rp_filter =
net.ipv4.conf.default.accept_source_route =
kernel.sysrq =
kernel.core_uses_pid =
net.ipv4.tcp_syncookies =
kernel.msgmnb =
kernel.msgmax =
kernel.shmmax =
kernel.shmall =
net.ipv4.tcp_max_tw_buckets =
net.ipv4.tcp_sack =
net.ipv4.tcp_window_scaling =
net.ipv4.tcp_rmem =
net.ipv4.tcp_wmem =
net.core.wmem_default =
net.core.rmem_default =
net.core.rmem_max =
net.core.wmem_max =
net.core.netdev_max_backlog =
net.core.somaxconn =
net.ipv4.tcp_max_orphans =
net.ipv4.tcp_max_syn_backlog =
net.ipv4.tcp_timestamps =
net.ipv4.tcp_synack_retries =
net.ipv4.tcp_syn_retries =
net.ipv4.tcp_tw_recycle =
net.ipv4.tcp_tw_reuse =
net.ipv4.tcp_mem =
net.ipv4.tcp_fin_timeout =
net.ipv4.tcp_keepalive_time =
net.ipv4.ip_local_port_range =

15 .配置修改 /etc/sysctl.conf 配置文件添加如上内容

[root@nginx sbin]# sysctl -p   #配置生效
sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下。sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发、IP碎片去除以及源路由检查等。用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能。
命令格式: sysctl [-n] [-e] -w variable=value sysctl [-n] [-e] -p <filename> (default /etc/sysctl.conf) sysctl [-n] [-e] -a 常用参数的意义: -w 临时改变某个指定参数的值,如 sysctl -w net.ipv4.ip_forward= -a 显示所有的系统参数 -p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载 如果仅仅是想临时改变某个系统参数的值,可以用两种方法来实现,例如想启用IP路由转发功能: ) #echo > /proc/sys/net/ipv4/ip_forward ) #sysctl -w net.ipv4.ip_forward= 以上两种方法都可能立即开启路由功能,但如果系统重启,或执行了 # service network restart 命令,所设置的值即会丢失,如果想永久保留配置,可以修改/etc/sysctl.conf文件 将 net.ipv4.ip_forward=0改为net.ipv4.ip_forward= , sysctl命令的作用
在运行时配置内核参数
,用法举例:
-w 用此选项来改变一个sysctl设置
例:sysctl -w net.ipv4.ip_forward=
-p 载入sysctl配置文件
如-p后未指定路径,则载入 /etc/sysctl.conf
例: sysctl -p /etc/sysctl.conf

nginx-高并发配置 第七章的更多相关文章

  1. nginx 高并发配置参数(转载)

    声明:原文章来自http://blog.csdn.net/oonets334/article/details/7528558.如需知道更详细内容请访问. 一.一般来说nginx 配置文件中对优化比较有 ...

  2. NGINX高并发配置

    1.  worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8). 2.  worker_cpu_affinity 000 ...

  3. nginx 高并发配置参数

    一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1.  worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu ...

  4. nginx高并发配置详解

    https://www.cnblogs.com/liqiu/p/3152206.html 1.  worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 ...

  5. Nginx高并发配置思路(轻松应对1万并发量)

    测试机器为腾讯云服务器1核1G内存,swap分区2G,停用除SSH外的所有服务,仅保留nginx,优化思路主要包括两个层面:系统层面+nginx层面. 一.系统层面 1.调整同时打开文件数量 ulim ...

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

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

  7. SpringCloud、Nginx高并发核心编程 【2020年11月新书 】

    文章太长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典极品 : 三大本< Java 高并发 三部曲 > 面试 + 大厂 + 涨薪必备 疯狂创客圈 经 ...

  8. tengine编译安装及nginx高并发内核参数优化

    Tengine Tengine介绍 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性. Tengine的性能和稳定性已经在大型的 ...

  9. Keepalived保证Nginx高可用配置

    Keepalived保证Nginx高可用配置部署环境 keepalived-1.2.18 nginx-1.6.2 VM虚拟机redhat6.5-x64:192.168.1.201.192.168.1. ...

随机推荐

  1. Golang 笔记 5 go语句

     Go语句和通道类型是Go语言的并发编程理念的最终体现.与defer语句相同,go语句也可以携带一个表达式语句.Go语句的执行会很快结束,并不会对当前流程的进行造成阻塞或明显的延迟.一个简单的示例: ...

  2. 【Py-Github】根据条件筛选Github repo的例子

    条件: language:python commits:>100 contributors:>2 stars:>5 fork:0 实现: from github import Git ...

  3. mysql中的事物处理

    首先,事物的概念,保证一组sql语句操作的完整性,在这个过程中要充分考虑到多用户同时访问数据库数据的情况. 关键词有COMMIT,ROLLBACK,,START TRANSACTION

  4. Codeforces Round #531 (Div. 3)

    A:瞎猜. #include <bits/stdc++.h> using namespace std; int main(){ ios::sync_with_stdio(false); i ...

  5. Oracle tablespace 创建表空间

    定义: 表空间是一个逻辑概念,它的所有数据和结构信息都存储在一个或多个数据文件中,表空间属于数据库的一部分.数据库自带有几个表空间,如system,temp.一般系统将创建几个私用或业务的表空间. 模 ...

  6. java应用,直接请求没问题,通过nginx跳转状态吗400

    今天配置金融的测试环境,直接调用java应用返回状态200,通通过nginx跳转,会返回400,真是一头雾水..... 参考文档: https://www.cnblogs.com/yanghj010/ ...

  7. allegro画元件封装

    LP Wizard 10.5 根据标准,输入datasheet的尺寸,可以计算出推荐的焊盘和封装. 封装必须画的层: 1.引脚 2.pakage-> 2.1.assembly_top,add线( ...

  8. 手写AVL 树(上)

    平衡二叉树 左旋,右旋,左右旋,右左旋 具体原理就不说了,网上教程很多.这里只实现了建树的过程,没有实现删除节点的操作. 下一篇会实现删除节点的操作. // // main.cpp // AVL // ...

  9. 洛谷试炼场 - 关卡1-5 - 简单字符串 - (Done)

    P1055 ISBN号码 #include<bits/stdc++.h> using namespace std; string s; ]={','X'}; int main() { ci ...

  10. Torchvision 源码安装[Ubuntu]

    git clone https://github.com/pytorch/vision.git pip install pillow cd vision python setup.py install