nginx性能优化

event段优化

  • 使用epoll事件驱动,比默认selec、poll更高效。
  • 加大worker_connection 65535,使得nginx并发能够执行更多的连接

    如果设定过小,在高并发的情况下,会在日志中有 work_connection is not enough while accepting new connection on

    同时也要修改操作系统的进程最大可处理的文件句柄值

    echo 131070 > /proc/sys/fs/file-max; sysctl –p

    否则有可能会出现worker_connection are more than open file resource limit

网络的优化

  • 设定合适的keepaliave_timeout

    keepalive_timeout 60 50;

    客户端在60秒内无活动的话,服务器关闭连接

????向客户端发送keepaliave_timeout时间是50秒

  • send_timeout 10

    设定如果客户端10s内没响应,nginx服务器则关闭连接

  • client_header_buffer_size 4k

    设定nginx服务器可缓冲客户端http头部的大小,一般设定为和内存分页(getconf PAGESIZE)的大小一样。默认为1k,如果设置过小,客户端的cookie的值设定的也比较大的话,可能会出现400的错误

  • multi_accept允许nginx尽可能多的接收网络连接

针对CPU的优化

  • worker_processess 4;设定和CPU的核心数一样就行(lscpu)
  • work_cpu_affinity 0001,0010,0100,1000;每个进程运行在相应的进程上

内核的优化

  • net.ipv4.tcp_max_tw_buckets = 6000

    timewait的数量,默认是180000,因此如果想把timewait降下了就要把tcp_max_tw_buckets值减小

  • 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.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秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。

  • net.ipv4.tcp_keepalive_time = 30

    当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时。

日志优化

其实也可说是降低IO负载

在高并发的情况下,且不考虑访问的日志access.log可以直接关闭;

error_log logs/error.log crit;????????????????提升错误日志级别

带宽优化

可以说是压缩数据,减少网络压力,但会消耗一定的CPU,不过CPU一般不会出现瓶颈

  • gzip on打开压缩功能
  • gzip_http_version 1.0|1.1;默认的是http1.1,对于老的浏览器可能不支持压缩,不过此项较少设定
  • gzip_min_length 1024; 一般较大的数据才会有压缩的效果,小的数据可能压缩后变大
  • gzip_comp_level 4;????1压缩比例小,9压缩比例大最耗时。
  • gzip_disable "MSIE [4-6]\."; IE6不启用压缩功能
  • gzip_types text/plain application/x-javascript text/css text/html application/xml; 定义使用压缩媒体的类型
  • gzip_vary on; 在http头部添加"Vary Accept-Encoding"用于通知浏览器数据已经被压缩过,这对于不具有解压数据包能力的浏览器有用。

    也可这样添加在首部add_head Vary Accept-Encoding gzip;

  • 一般在前端nginx上使用,但后端不使用数据压缩。否则的可能导致js加载不正常
时间: 2024-10-12 10:35:38

nginx性能优化的相关文章

Nginx性能优化配置(三)

Nginx性能优化配置(三)  本文主要介绍Nginx的性能优化配置,文章的层次架构如图所示. 1.Nginx的工作进程优化 1.worker_processes 作用:worker进程的数量:通常应该等于小于当前主机的cpu的物理核心数:auto表示根据CPU的物理核心数自动调整工作进程数.使用lscpu或或者cat /proc/cpuinfo | grep 'processor' | wc -l 可以查看CPU的物理核心数. 配置:worker_processes auto: 配置段:mai

Nginx 性能优化

1.安全优化:隐藏Nginx版本号,server_tokens off; 2.安全优化:更改掉默认的用户  user nginx; 3.性能优化:  根据硬件配置,调整nginx worker 进程数 ,一般为cpu的核数 4.性能优化:绑定不同的进程到不同的cpu上,硬件资源平均分配,比如4个worker进程数,即work_cpu_affinity 0001 0010 面试题:命令行如何通过调整命令来调整不同的进程或服务到不同的cpu上,资源平均分配 5.性能优化:nginx的事件处理模型优化

nginx性能优化技巧

前几天买了本高俊峰的<高性能Linux服务器构建实战I>,网上都说运维必备手册,昨天看了目录加小50页感觉还是比较扩充视野的,很多东西在学校是不可能学到的,就是感觉有的地方讲的仍然不是很清楚,毕竟79块的书其实可以写到800页的.... 个人对于nginx比较感兴趣,源码的编译安装是比较熟的了,配置文件本来以为挺熟的,但是看了书上配置文件的N多命令我感觉根本玩不起来.因为实在是太多了,要背根本不现实,就算背下来不去用也会很快就忘掉.十分蛋疼~~ 书上对于Nginx的性能优化写了4种方法,下面分

Tengine/Nginx性能优化及杂谈

谷歌.度娘搜索Nginx优化,能搜索出很多的文章,动不动就几万并发,十万并发,看着好像真是那么回事似的. 从使用Tengine的过程中,对Tengine/Nginx的优化,我个人认为Tengine的优化是脱离不开使用它的环境及部署结构的,单说优化 Tengine的意义并不大,况且每家公司的业务各不相同,所以优化不是简单的事情.即便如此,我总结了下,从以下几个方便入手浅谈下 Tengine/Nginx的性能优化.本文以Tengine为主,Nginx大部分都适用. 1.网络 带宽 一个需要支持1万并

nginx性能优化调优之google-perftools

什么是google-perftools?google-perftools是google公司开发的一款针对 C/C++ 程序的性能分析开源工具,使用该工具可以对 CPU 时间片.内存等系统资源的分配和使用进行分析google-perftools包含四个工具,分别是:TCMalloc.heap-checker.heap-profiler和cpu-profiler,其中我们本次需要的一个工具TCMalloc是google-perftools的其中一个工具,用于优化内存分配的效率和速度,帮助在高并发的情

Nginx性能优化技巧(6)

一.编译安装过程优化 1.减小Nginx编译后的文件大小 在编译Nginx时,默认以debug模式进行,而在debug模式下会插入很多跟踪和ASSERT之类的信息,编译完成后,一个Nginx要有好几兆字节.在编译前取消Nginx的debug模式,编译完成后Nginx只有几百千字节,因此可以在编译之前,修改相关源码,取消debug模式,具体方法如下: 在Nginx源码文件被解压后,找到源码目录下的auto/cc/gcc文件,在其中找到如下几行: # debug CFLAGS="$CFLAGS -g

nginx性能优化及内核参数调整

Nginx配置参数优化 Nginx作为高性能web服务器,即使不特意调整配置参数也可以处理大量的并发请求.以下的配置参数是借鉴网上的一些调优参数,仅作为参考,不见得适于你的线上业务. worker进程 worker_processes 该参数表示启动几个工作进程,建议和本机CPU核数保持一致,每一核CPU处理一个进程. worker_rlimit_nofile 它表示Nginx最大可用的文件描述符个数,需要配合系统的最大描述符,建议设置为102400. 还需要在系统里执行ulimit -n 10

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

1.Nginx运行工作进程数量 Nginx运行工作进程个数一般设置CPU的核心或者核心数x2.如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor /proc/cpuinfo | wc -l [[email protected]~]# vi/usr/local/nginx1.10/conf/nginx.conf worker_processes 4; [[email protected]~]# /usr/local/ngi

Nginx 性能优化(配置文件详解)

随着访问量的不断增加,需要对 Nginx 和内核做相应的优化来满足高并发用户的访问,那下面在单台 Nginx 服务器来优化相关参数. Nginx.conf 配置优化: worker_processes 8; nginx 进程数,建议按照 cpu 数目来指定,一般为它的倍数.worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; 为每个进程分配 cpu,上例中将 8 个