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 :
processor :
processor :
processor : grep processor /proc/cpuinfo | wc -l
#表示为1颗CPU四核
#查看CPU总颗数示例如下:
grep "physical id" /proc/cpuinfo
physical id : #物理ID一致,同一颗CPU
physical id : #物理ID一致,同一颗CPU
physical id : #物理ID一致,同一颗CPU
physical id : #物理ID一致,同一颗CPU
grep "physical id" /proc/cpuinfo | sort | uniq | wc -l
#去重复,表示1颗CPU
修改重启后的worker进程数量,如下:
ps -ef | grep "nginx" | grep -v grep
root : ? :: nginx: master process /usr/local/nginx/sbin/nginx
nginx : ? :: nginx: worker process
nginx : ? :: nginx: worker process
nginx : ? :: nginx: worker process
nginx : ? :: 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 ;
#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 ;
#最大打开文件数,可设置为系统优化后的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.
图片,视频(流媒体)等文件尽量不要压缩,因为这些文件大多都是经过压缩的.
参数介绍及配置说明
Nginx的gzip压缩功能依赖于ngx_http_gzip_module模块,默认已安装。
对应的压缩参数说明如下:
#######压缩的配置介绍######
gzip on; #开启gzip压缩功能
gzip_min_length 1k; #设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值0,表示不管页面多大都进行压缩。
建议设置成大于1K,如果小于1K可能会越压越大。
gzip_buffers 16K; #压缩缓冲区大小。表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
gzip_http_version 1.1; #压缩版本(默认1.1,前端为squid2.5时使用1.0),用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,
使用默认即可。
gzip_comp_level ; #压缩比率。用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢,也比较消耗CPU资源。
gzip_types text/plain application/x-javascript text/css application/xml;
#用来指定压缩的类型,“text/html”类型总是会被压缩,这个就是HTTP原理部分讲的媒体类型。
gzip_vary on; #vary header支持。该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用Squid缓存经过Nginx压缩的数据。
配置Nginx expires缓存实现性能优化
Nginx expires功能介绍
简单说,Nginx expires的功能就是为用户访问的网站内容设定一个过期时间,当用户第一次访问这些内容时,会把这些内容存储在用户浏览器本地,这样用户第二次及以后继续访问该网站时,浏览器会检查加载已经缓存在用户浏览器本地的内容,就不会去服务器下载了,直到缓存的内容过期或被清除为止。
Nginx expires功能优点
- expires可以降低网站的带宽,节约成本。
- 加快用户访问网站的速度,提升用户访问体验。
- 服务器访问量降低了,服务器压力就减轻了,服务器成本也会降低,甚至可以节约人力成本。
- 对于几乎所有的Web服务来说,这是非常重要的功能之一,Apache服务也有此功能。
Nginx expires配置详解
根据文件扩展名进行判断,添加expires功能范例:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 3650d; #缓存时间3650天
}
location ~ .*\.(js|css)$
{
expires 30d;
}
}
根据URL中的路径(目录)进行判断,添加expires功能范例:
location ~ ^/(images|javascript|js|css|flash|media|static)/
{
expires 360d;
}
当网站被缓存的页面或数据更新了,此时用户端看到的可能还是旧的已经缓存的内容,这样就会影响用户体验,那么如何解决这个问题呢?
对于经常需要变动的图片等文件,可以缩短对象缓存时间
当网站改版或更新时,可以在服务器将缓存的对象改名
企业网站缓存日期曾经的案例参考
- 新浪:15天
- 京东:25年
- 淘宝:10年
企业网站有可能不希望被缓存的内容
- 广告图片,用于广告服务,都缓存了就不好控制展示了。
- 网站流量统计工具(JS代码),都缓存了流量统计就不准了。
- 更新很频繁的文件(google的logo),这个如果按天,缓存效果还是显著的。
Nginx优化之服务性能优化的更多相关文章
- 安全开发运维必备,如何进行Nginx代理Web服务器性能优化与安全加固配置,看这篇指南就够了
本章目录 1.引言 1.1 目的 1.2 目标范围 1.3 读者对象 2.参考说明 2.1 帮助参考 2.2 参数说明 3.3 模块说明 3.服务优化 3.1 系统内核 3.2 编译优化 3.3 性能 ...
- 微擎开启性能优化里面的性能优化memcache内存优化及数据库读写分离
http://www.mitusky.com/forum.php?mod=viewthread&tid=3135 [微擎 安装使用] 微擎开启性能优化里面的性能优化memcache内存优化及数 ...
- 性能优化——Web前端性能优化
核心知识点: 1.排查网站性能瓶颈的手法:分析各个环节的日志,找出异常部分 2.Web前端:网站业务逻辑之前的部分(浏览器.图片服务.CDN) 3.优化手段 1)浏览器优化 (1)减少http请求 a ...
- web性能优化-网络传输性能优化
浏览器工作原理:https://www.cnblogs.com/thonrt/p/10008220.html 浏览器渲染原理: https://www.cnblogs.com/thonrt/p/100 ...
- Android App性能优化笔记之一:性能优化是什么及为什么?
By Long Luo 周星驰的电影<功夫>里面借火云邪神之口说出了一句至理名言:“天下武功,唯快不破”. 在移动互联网时代,同样如此,留给一个公司的窗口往往只有很短的时间,如何把握住 ...
- [Unity优化] Unity CPU性能优化
前段时间本人转战unity手游,由于作者(Chwen)之前参与端游开发,有些端游的经验可以直接移植到手游,比如项目框架架构.代码设计.部分性能分析,而对于移动终端而言,CPU.内存.显卡甚至电池等硬件 ...
- PLSQL优化基础和性能优化 (学习总结)
PLSQL优化基础和性能优化 (学习总结) 网上有一篇关于PLSQL优化的文章,不错,个人根据自己的经验再稍加整理和归纳,总结PLSQL优化和性能调优 适合有一定PLSQL基础,需要进一步提高的学友看 ...
- Nginx详解二十六:Nginx架构篇之性能优化
一.性能优化考虑点 1.当前系统结构瓶颈 通过压力测试观察指标.日志检测.性能分析 2.了解业务模式 接口业务类型.系统层次化结构 3.性能与安全 二.ab接口压力测试工具 1.安装:yum -y i ...
- nginx全局配置和性能优化
nginx目录结构和命令 1.ls /apps/nginx/: html是测试页,sbin是主程序 2.ls /apps/nginx/sbin/: nginx 只有一个程序文件 3. ...
随机推荐
- Ubuntu Nginx Uwsgi Python布置服务器Django项目
1 安装python 3.6 ubuntu预装了2.7,不需要卸载预装库,直接安装python3.6(其实现在的阿里云18.04会给你自动装python2.7.15和3.6.8) 你可以分别查看一下 ...
- css 之calc无效踩坑
踩坑: 1. height:calc(100vh-60); 无效 2.height:calc(100vh-60px); 无效 3.height:calc(100vh - 60px); 终于起效 总 ...
- Image Processing and Analysis_8_Edge Detection:Multiresolution edge detection techniques ——1995
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...
- opencv读取图像python和c++版本的结果不同
问题: 在读取同一张图像时,python读取的结果和c++读取的结果差异较大,测试图像中最大误差达到16. 原因: python的opencv采用的是4.1.1,c++采用的是3.1.0,在解析JPE ...
- ES查询语句
记录常用的es 查询 聚合 GET _cat / indices GET / p_ext_develop / _mapping / g GET / p_ext_develop / _analyze { ...
- Flutter——ListView组件(平铺列表组件)
ListView的常见参数: 名称 类型 说明 scrollDirection Axis Axis.horizontal 水平列表 Axis.vertical 垂直列表 padding EdgeIns ...
- Djang简介
一:MVC简介 MVC的全拼为Model-View-Controller,最早由TrygveReenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语 ...
- Codeforces 1216E2 枚举位数+二分
两个二分 枚举位数 #include <bits/stdc++.h> #define MOD 1000000007 using namespace std; typedef long lo ...
- Mybatis中的拦截器
作者:moshenglv的专栏 拦截器的一个作用就是我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑而不再执行被拦截的方法. ...
- eclipse调试断点
1.条件断点 如果你不知道如何添加断点,只需点击左边面板(行号前面)断点即被创建.在调试界面中,“断点”视图会把所有被创建的断点列出来.我们可以给它加一个布尔条件,也就是说,该断点会被激活并且如果布尔 ...