Nginx优化之服务性能优化

优化Nginx服务的worker进程个数

修改nginx主配置文件

worker_processes 1;  #指定了Nginx要开启的进程数,结尾数字就是进程个数

Nginx有Master进程和worker进程之分,Master为管理进程,真正接待“顾客”的是worker进程。

优化Nginx进程个数的策略

(1)worker_processes参数大小的设置最好和网站的用户数量相关联,

(2)新搭建服务器时,worker进程数最开始的设置可以等于CPU的核数,高流量高并发场合也可以考虑将进程数提高至CPU核数*2

查看Web服务器CPU硬件资源信息

通过/proc/cpuinfo可查看CPU个数及总核数。查看CPU总核数的示例如下:

grep processor /proc/cpuinfo
processor   : 0
processor   : 1
processor   : 2
processor   : 3

grep processor /proc/cpuinfo | wc -l
4               #表示为1颗CPU四核
#查看CPU总颗数示例如下:
grep "physical id" /proc/cpuinfo
physical id : 0     #物理ID一致,同一颗CPU
physical id : 0     #物理ID一致,同一颗CPU
physical id : 0     #物理ID一致,同一颗CPU
physical id : 0     #物理ID一致,同一颗CPU
grep "physical id" /proc/cpuinfo | sort | uniq | wc -l
1               #去重复,表示1颗CPU

修改重启后的worker进程数量,如下:

ps -ef | grep "nginx" | grep -v grep
root       1110      1  0 11:12 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      1429   1110  0 11:33 ?        00:00:00 nginx: worker process
nginx      1430   1110  0 11:33 ?        00:00:00 nginx: worker process
nginx      1431   1110  0 11:33 ?        00:00:00 nginx: worker process
nginx      1432   1110  0 11:33 ?        00:00:00 nginx: worker process     

从“worker_processes 4”可知,worker进程数为4个。Nginx Master主进程不包含在这个参数内,Nginx Master的主进程为管理进程,负责调度和管理worker进程。

Nginx事件处理模型优化

在Linux下,Nginx使用epoll的I/O多路复用模型,在Freebsd中使用kqueue的I/O多路复用模型,在Solaris中使用/dev/poll方式的I/O多路复用模型,在Windows中使用的是icop,等等。

也可以不指定事件处理模型,Nginx会自动选择最佳的事件处理模型服务。

#具体的配置参数如下:
events      #events指令是设定Nginx的工作模式及连接数上限
{
    use epoll;     #use是一个事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select,poll,kqueue,epoll,rtsig和/dev/poll。  其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。  对于Linux系统Linux2.6+内核,推荐选择epoll工作模式,这是高性能高并发的设置
}

调整Nginx单个进程允许的客户端最大连接数

调整Nginx单个进程允许的客户端最大连接数,控制参数为work_connections。 (worker_connections的值要根据具体服务器性能和程序的内存使用量来指定)

events  #events指令是设定Nginx的工作模式和连接数上线
{
    worker_connections 20480;
    #worker_connections也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024.最大客户端连接数由worker_processes和worker_connections决定,  即Max_client=  worker_processes*worker_connections。进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令  “ulimit   -HSn    65535”或配置相应文件后,worker_connections的设置才能生效。
}

实际的并发连接数除了受worker_connections参数控制外,还和最大打开文件数worker_rlimit_nofile有关,Nginx总并发连接=worker数量*worker_connections。

配置Nginx worker进程最大打开文件数

worker_rlimit_nofile 65535;
#最大打开文件数,可设置为系统优化后的ulimit     -HSn的结果

放置位置:主标签段  此参数的作用是改变worker processes能打开的最大文件数

开启高效文件传输模式

http模块

设置参数1:sendfile on;   #激活或禁用sendfile()功能功能。 

#sendfile参数用于开启文件的高效传输模式。同时将tcp_nopush和tcp_nodelay两个指令设置为on,可防止网络及磁盘I/O阻塞,提升Nginx工作效率。

设置参数2:tcp_nopush on;  #激活或禁用Linux上的TCP_CORK socket选项,此选项仅仅当开启sendfile时才生效,允许把http response header和文件的开始部分放在一个文件里发布,作用是减少网络报文段的数量。

优化Nginx连接参数,调整连接超时时间

连接超时的作用

(1)将无用的连接设置为尽快超时,可以保护服务器的系统资源

(2)当连接很多时,及时断掉那些已经建立好的但又长时间不做事的连接,以减少其占用的服务器资源

(3)黑客攻击网站,就会不断地和服务器建立多个连接,消耗连接数,大量消耗服务器的资源.

(4)LNMP环境中,如果用户请求了动态服务,则Nginx就会建立连接,请求FastCGI服务以及后端MySQL服务,,后端的FastCGI服务及MySQL服务也有对连接的超时控制。

不同程序连接设定知识

服务器建立新连接也是要消耗资源的,因此,超时设置得太短而并发很大,就会导致服务器瞬间无法响应用户的请求,导致用户体验下降。

PHP程序站点设置成短连接,PHP程序建立连接消耗的资源和时间相对要少些。对于Java程序站点来说,一般建议设置长连接,因为Java程序建立连接消耗的资源和时间更多.

Nginx连接超时的参数设置

在http模块

设置参数(1):keepalive_timeout 60;      #保持会话的超时时间为60秒

设置参数(2):tcp_nodelay on;        #用于激活tcp_ondelay功能,提高I/O性能。

  默认情况下当数据发送时,内核并不会马上发送,可能会等待更多的字节组成一个数据包,这样可以提高I/O性能。使用tcp_nodelay功能,等待时间会比较长。

设置参数(3):client_header_timeout 15;      #设置读取客户端请求头数据的超时时间

  设置读取客户端请求头数据的超时时间。服务器端将返回“Request time out (408)”错误,可指定一个超时时间,防止客户端利用http协议进行攻击。

设置参数(4):client_body_timeout 15;      #用于设置读取客户端请求主体的超时时间,默认值60

设置参数(5):send_timeout 25;         #用于指定响应客户端的超时时间。

上传文件大小的限制

调整上传文件的大小

在Nginx主配置文件里加入如下参数:

client_max_body_size 8m;            #具体大小根据公司的业务做调整,如果不清楚就先设置为8m.

设置最大的允许的客户端请求主体大小,在请求头域有“Content-Length”,如果超过了此配置值,客户端会受到413错误,设置为0表示禁止检查客户端请求主体大小。

FastCGI相关参数调优

Nginx FastCGI客户端向后请求PHP动态引擎服务(php-fpm(FastCGI服务器端)

fastcgi_connect_timeout ;      #表示Nginx服务器和后端FastCGl服务器连接的超时时间,默认值为60fastcgi_ connect. timeout 秒,这个参数值通常不要超过75秒,因为建立的连接越多,消耗的资源就越多

fastcgi_send_timeout ;        #设置Nginx允许FastCG1服务器端返回数据的超时时间,即在规定时间之fastcgi_ send. timeout 内后端服务器必须传完所有的数据,否则,Nginx将断开这个连接。其默认值为60秒

fastcgi_read_timeout ;       #设置Nginx从FastCGl服务器端读取响应信息的超时时间,表示连接建立fastcgi_ read_ timeout 成功后,Nginx等待后嶺服务器的响应时间,是Nginx已经进人后端的排队之中等候处理的时间

fastcgi_buffer_size 64k;      #这是Nginx FastCGl的缓冲区大小参数,设定用来读取以FastCGl服务器端收到的第-一部分响应信息的缓冲区大小,这里的第-部分通常会包含-一个fastcgi_ buffer. size小的响应头部。默认情况下,这个参数的大小是由fastegi buffers 指定的一个缓冲区的大小

fastcgi_buffers 4 64k;        #设定用来读取从FastCGl服务器端收到的响应信息的缓冲区大小和缓冲区数量,默认值为fastcgi buffers 8 4k{8k;。指定本地需要用多少和多大的缓冲区来缓冲FastCGl的应答请求。如果一个PHP脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓fastcgi_ buffers 冲区来缓存;如果页面大小大于256KB.那么大于256KB的部分会缓存到fastcgi temp 指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。一般这个值应该为站点中PHP脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“1616k”, "464k”等

proxy_busy_buffers_size ;      #用于设置系统很忙时可以使用的proxy_ buffers大小,官方推荐的大小为proxy_ buffers*2

fastcgi_busy_buffers_size ;      #用于设置系统很忙时可以使用的fastcgibuffers大小,官方推荐的大小为fastcgi_ buffers*2

fastcgi_temp_file_write_size ;     #FastCGI临时文件的大小,可设为128~256KB

fastcgi_cache_valid ;      #示例: fastcgi cache_ valid 200 302 1h;用来指定应答代码的缓存时间,实例中的值表示将200和302应答缓存一个小时。示例: fastcgi_ cache_ valid 301 ld;将301应答缓存1天。示例: fastcgi_ cache_ valid any 1m,将其他应答缓存设置为1分钟

fastcgi_ cache_ min_ uses;    #示例: fastcgi_ cache_ min_ uses 1;设置请求几次之后响应将被缓存,1表示一次即被缓存

fastcgi_ cache_ use_ stale;     # 示例: fastcgi_ cache_ use_ stale error timeout invalid_ header http_ 500;定义在哪些情况下使用过期缓存

fastcgi_ cache_ key;     #示例: fastcgi_ cache_ key $request_ method://$host$request_ uri;fastcgi_ cache_ key http://$host$request uri;定义fastcgi cache的key,示例中以请求的URI作为缓存的key, Nginxfastcgi_ cache_ key 会取这个key的md5作为缓存文件,如果设置了缓存散列目录,Nginx会从后往前取相应的位数做为目录。注意一定要加上$request_ method 作为cache key, 否则如果先请求的为head类型,后面的GET请求返回为空

Nginx gzip压缩实现性能优化

Nginx gzip压缩功能介绍

Nginx gzip压缩模块提供了压缩文件内容的功能,Nginx服务器会根据一些具体的策略实施压缩,以节约网站出口带宽,同时加快数据传输效率,来提升用户访问体验。

Nginx gzip压缩的优点

(1)提升网站用户体验;发送给用户的内容小了,用户访问单位大小的页面就加快了,用户体验提升了

(2)节约网站带宽成本:数据是压缩传输的,因此节省了网站的带宽流量成本,不过压缩时会稍微消耗一些CPU资源,这个一般可以忽略。

#此功能既能提升用户体验,又能使公司少花钱,一举多得。对于几乎所有的Web服务来说,这是一个非常重要的功能,Apache服务也有此功能。

需要和不需要压缩的对象

纯文本内容压缩比很高,纯文本的内容最好进行压缩,例如:html,js,css,xml,shtml等格式的文件。

被压缩的纯文本文件必须要大于1KB.

图片,视频(流媒体)等文件尽量不要压缩,因为这些文件大多都是经过压缩的,

原文地址:https://www.cnblogs.com/ywrj/p/9388925.html

时间: 2024-10-11 17:31:33

Nginx优化之服务性能优化的相关文章

性能优化——Web前端性能优化

核心知识点: 1.排查网站性能瓶颈的手法:分析各个环节的日志,找出异常部分 2.Web前端:网站业务逻辑之前的部分(浏览器.图片服务.CDN) 3.优化手段 1)浏览器优化 (1)减少http请求 a.http请求的开销:建立通信链路.进行数据传输.,同时要启动独立的线程去处理. b.减少http的手段:合并CSS.合并JavaScript,合并图片,这样浏览器就只有一次请求. (2)使用浏览器缓存 a.将静态资源缓存到客户浏览器上, b.更新时是生成新的JavaScript文件,并更改html

Android App性能优化笔记之一:性能优化是什么及为什么?

By Long Luo 周星驰的电影<功夫>里面借火云邪神之口说出了一句至理名言:“天下武功,唯快不破”. 在移动互联网时代,同样如此,留给一个公司的窗口往往只有很短的时间,如何把握住这个时机,迅速开发出产品,成为至关重要的一环.相对传统互联网时代的PC产品,用户对移动端产品的容忍度更低.而一款移动应用在推出的时候可能只是接近完成的状态,这就需要通过快速的迭代开发来更新产品,不断完善产品来留住用户.同时,通过更新产品也能唤醒一些沉默用户,让一些原本下载了应用但使用次数非常少的用户给该应用多一次

Nginx详解二十六:Nginx架构篇之性能优化

一.性能优化考虑点 1.当前系统结构瓶颈 通过压力测试观察指标.日志检测.性能分析 2.了解业务模式 接口业务类型.系统层次化结构 3.性能与安全 二.ab接口压力测试工具 1.安装:yum -y install httpd-tools 2.使用: ad -n 2000 -c 2 http://127.0.0.1-n:总的请求数-c:并发数-k:是否开始长连接 准备环境 检查语法,并重载nginx -tc /etc/nginx/nginx.conf nginx -s reload -c /etc

nginx全局配置和性能优化

nginx目录结构和命令 1.ls /apps/nginx/:         html是测试页,sbin是主程序 2.ls /apps/nginx/sbin/:  nginx 只有一个程序文件 3.ls /apps/nginx/html/:  50x.html index.html 测试网页 ?nginx:默认为启动nginx -h 查看帮助选项 -V 查看版本和配置选项 -t 测试nginx语法错误 -c filename 指定配置文件(default: /etc/nginx/nginx.c

后端服务性能优化实战篇

本文简单介绍下后端服务开发中常用的一些性能优化策略. 1.代码 优化代码实现是第一位的,特别是一些不合理的复杂实现.如果结合需求能从代码实现的角度,使用更高效的算法或方案实现,进而解决问题,那是最简单有效的. 2.数据库 数据库的优化,总体上有3个方面: 1)  SQL调优:除了掌握SQL基本的优化手段,使用慢日志定位到具体问题SQL,使用explain.profile等工具来逐步调优. 2)  连接池调优:选择高效适用的连接池,结合当前使用连接池的原理.具体的连接池监控数据和当前的业务量作一个

性能优化指南:性能优化的一般性原则与方法

作为一个程序员,性能优化是常有的事情,不管是桌面应用还是web应用,不管是前端还是后端,不管是单点应用还是分布式系统.本文从以下几个方面来思考这个问题:性能优化的一般性原则,性能优化的层次,性能优化的通用方法.本文不限于任何语言.框架,不过可能会用Python语言来举例. 不过囿于个人经验,可能更多的是从Linux服务端的角度来思考这些问题. 本文地址:http://www.cnblogs.com/xybaby/p/9055734.html 一般性原则 依据数据而不是凭空猜测 这是性能优化的第一

前端性能优化:jquery性能优化

jQuery是前端最常用的一个js框架,其实有部分操作也是可以改进的.大部分情况下,封装的后性能是会降低的,如果发现很影响,就可以改为原生的. 另外使用jQuery需要注意一下几点来提高性能: 1不使用each, jQuery 的each循环比原生的for循环性能相差几十倍. 前端性能优化:循环优化 2尽量使用ID,类型,类选择器,避免使用属性选择器 尽量使用ID,类,类型选择器,避免属性选择器.ID,类,类型都有原生的方法,属性选择器需要遍历整个DOM,还需要读取每个节点的属性进行判断,性能很

蚂蚁金服架构师带你深入性能优化一MySql性能优化实战

概要: Mysql的优化,大体可以分为三部分:索引的优化,sql语句的优化,表的优化.本文主要帮助自己整理思路,也可作为一个学习MySQL优化的提纲. 索引的优化 只要列中含有NULL值,就最好不要在此例设置索引,复合索引如果有NULL值,此列在使用时也不会使用索引 尽量使用短索引,如果可以,应该制定一个前缀长度 对于经常在where子句使用的列,最好设置索引,这样会加快查找速度 对于有多个列where或者order by子句的,应该建立复合索引 对于like语句,以%或者'-'开头的不会使用索

Nginx基本配置、性能优化指南

本文引用http://www.chinaz.com/web/2015/0424/401323.shtml. 大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了!而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能很好地工作了.然而,如果你真的想挤压出nginx的性能,你必须更深入一些.在本指南中,我将解释Nginx的那些设置可以微调,以优化处理大量客户端时的性能.需要注意一点,这不是一个全面的微调指南