关键词:
目录
Nginx缓存机制介绍
Nginx中如何使用缓存,缓存机制是怎么样的。而且Nginx缓存是不会像redis这些一样有自己的内存管理机制,池化等,它会依据文件系统进行缓存
Nginx缓存机制的作用
- 缓存能够提升性能,学会Nginx中如何使用缓存很重要。
- Nginx作为静态资源服务器,静态资源变动频率小,缓存能够加速访问。
- Nginx离用户最近,启用缓存能更好的提高性能,结合Redis可以组成类似二级缓存。
nginx缓存机制简述
nginx是没做优化的。
Nginx缓存支持
在官网中api模块 设置, 都有自己的默认值,可以根据需要设置。
缓存使用
在配置文件中。 主要是在http指令块中存在
包括代理缓存配置,定义的配置
events
# 并发连接数
worker_connections 1024;
http
# JAVA服务器集群
upstream app_servers
server 127.0.0.1:8080;
# server 127.0.0.1:8081;
# 代理缓存配置 - 定义配置
proxy_cache_path "./cache_data/" levels=2:1:2 keys_zone=hot_information_cache:256m inactive=1d max_size=1000g;
proxy_cache_path "./cache_data/" levels=2:1:2 keys_zone=cache2:256m inactive=30s max_size=30g;
server
# 监听80端口
listen 80;
location /
# 开启缓存
proxy_cache hot_information_cache;
# 缓存JAVA应用返回的指定状态的数据,缓存时间时1天
proxy_cache_valid 200 206 304 301 302 1d;
# 请求的url就是缓存的key(根据实际业务场景匹配)
proxy_cache_key $uri$is_args$args;
# 设置传递给上游服务的请求头,Host为客户端host,默认为$proxy_host
proxy_set_header Host $http_host;
# 如果缓存中没找到,再去请求后端服务器
proxy_pass http://app_servers;
# 该指令在商业版本Nginx Plus支持,可以通过第三方模块ngx_cache_purge来替代
# 资源有变化的时候清除缓存
location ~ /purge(/.*)
#设置只允许指定的IP来清除缓存
allow all;
# allow 127.0.0.1;
# deny all ;
proxy_cache_purge hot_information_cache $1;
levels表示目录层级 3级。
后面对应的参数,包括proxy_cache_path 缓存的路径 和缓存空间名、大小等配置。启用缓存proxy_cache 等。
proxy_cache_path 可以配置多个的。
keys_zone=cache2:256m 这里定义的是 空间名称 和大小。
proxy_cache_valid 缓存JAVA应用返回的指定状态的数据,缓存时间时1天
proxy_cache_key 请求的url就是缓存的key
proxy_set_header 设置传递给上游服务的请求头。
通过这些指令 可以开启缓存。
proxy_cache_path参数详解
缓存清除机制分析
对于内存和磁盘满了,nginx如何清除的,以及会不会像redis去池化会不会有碎片化的处理。
缓存自己有缓存管理进程
被动缓存清除
proxy_cache_path 中可以通过以下指令来管理缓存
- max_size 指定缓存大小,缓存管理进程监控缓存是否超过指定值,超过该大小则通过LRU算法来 淘汰数据。一次迭代删除的数据通过下面的参数来指定。
- manager_files 一次迭代过程中删除的项的数量,默认100个
- manager_threshold 一次迭代操作的持续时间限制,默认200毫秒
- manager_sleep 两次迭代的间隔时间,默认50毫秒
缓存加载
proxy_cache_path中可以通过以下参数来调整加载缓存 Nginx启动一分钟后,缓存加载进程被激活,存储在文件系统上先前缓存的数据将被加载到 缓存区中,整个加载是在迭代中完成的。一次加载
- loader_files 一次迭代加载不超过指定数目的项,默认100。
- loader_threshold 一次迭代操作的持续时间限制,默认200毫秒
- loader_sleep 两次迭代的间隔时间,默认50毫秒
主动清除缓存
proxy_cache_path中可以通过以下参数来调整主动清除缓存
-
purger:on开启缓存清除进程,遍历所有缓存条目并删除匹配到的键的缓存数据
-
purger_files 一次迭代过程中扫描的项的数量,默认10个
-
purger_threshold 一次迭代的持续时间,默认50毫秒
- purger_sleep 两次迭代的间隔时间,默认50毫秒
该指令在商业版本Nginx Plus支持,可以通过第三方模块ngx_cache_purge来替代
location ~ /purge(/.*)
#设置只允许指定的IP来清除缓存
allow all;
# allow 127.0.0.1;
# deny all ;
proxy_cache_purge hot_information_cache $1;
ngx_cache_purge是一个第三方的nginx缓存主动清除模块,集成方便,使用简单。下面我们就来学习如何安装使用它。本节内容基于第一课安装的Nginx基础进行,这里我们只是再编译增加模块。
Nginx缓存主动清除插件ngx_cache_purge 提取码:d8eq
Nginx程序运行原理分析
nginx在运行时,架构是怎么样的,架构 工作模式;从进程来看有 master 和worker进程。
Nginx工作模式
这个流程模型和netty上的网络模型,都是很像的,网络请求。
多进程处理模型
多进程模型的处理方式
- 首先,master进程一开始就会根据我们的配置,来建立需 要listen的网络socket fd,然后fork出多个worker进程。
- 其次,根据进程的特性,新建立的worker进程,也会和 master进程一样,具有相同的设置。因此,其也会去监听 相同ip端口的套接字socket fd。
-
然后 ,多个worker进程监听同样设置的socket fd,当有 一个请求进来,所有的worker都会感知。
-
最后 ,监听成功的worker进程,读取请求,解析处理,响 应数据返回给客户端,断开连接,结束。因此,一个request请求,只需要worker进程就可以完成。
多进程处理模型优点
Nginx为何要采用多进程模式?
- 进程之间是独立的,当一个worker进程出现异常退出,其他worker进程不会受到影响;
- 独立进程也会避免一些不需要的锁操作,这样能提高处理效率,开发调试也更容易。
Worker进程遇到的问题
解决
- ngx_posted_accept_events队列优先执行,普通事件的
- ngx_posted_events队列最后执行
accept_mutex
Nginx采用了一个是否打开accept_mutex选项的值,控制worker进程是否需要去竞争锁,打开accept_mutex锁,能很好解决accept精确问题
这是module中代码。
Worker与CPU的绑定
linux服务器参数调整
修改配置文件
sudo vim /etc/sysctl.conf
调整内容
# 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
# 由于某种原因服务端主动关闭连接,连接进入FIN_WAIT2状态,该状态是没有超时的
# 如果客户端不关闭,这个FIN_WAIT_2状态将保持到系统重新启动,越来越多的FIN_WAIT_2状态会致使内核crash
net.ipv4.tcp_fin_timeout = 30
# 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.tcp_keepalive_time = 1200
# 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,
# 可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_syncookies = 1
# 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1
# 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_tw_recycle = 1
# 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.ip_local_port_range = 1024 65000
# 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_syn_backlog = 8192
# 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
net.ipv4.tcp_max_tw_buckets = 5000
生效配置
sudo /sbin/sysctl -p
Nginx常规调整
nginx一网打尽:动静分离压缩缓存黑白名单跨域高可用性能优化......(代码片段)
...、Nginx动静分离五、Nginx资源压缩六、Nginx缓冲区七、Nginx缓存机制八、Nginx实现IP黑白名单九、Nginx跨域配置十、Nginx防盗链设计十一、Nginx大文件传输配置十二、Nginx配置SLL证书十三、Nginx的高可用十四 查看详情
网页性能优化,缓存优化加载时优化动画优化(代码片段)
缓存优化性能优化第一步,便是管理好页面的缓存,避免重复下载资源。否则,即增加服务器压力,又折磨用户的钱包。浏览器缓存机制访问页面,请求各种资源,浏览器检查本地是否有缓存。如果有,检查资源是否过期。没过... 查看详情
浏览器底层渲染机制和crp性能节点优化(代码片段)
浏览器底层渲染机制和CRP性能节点优化编写一个页面所需的技术栈HTML$CSS[less/sass/style…]按照w3c规范去编写代码,浏览器本身也是按照w3c规范去编译解析我们的代码,最后渲染出我们想要的效果!!javascript[ES6+/XMLHttpRequest/vue/rea... 查看详情
前端性能优化(代码片段)
...优化方法。(内容较多请看目录)减少http请求次数1.浏览器缓存策略浏览器缓存机制有四个方面,它们按照获取资源时请求的优先级依次排列如下:MemoryCache:是指存在内存中的缓存。从优先级上来说,它是浏览器最先尝试去命中... 查看详情
nginx性能优化(配置文件详解)(代码片段)
随着访问量的不断增加,需要对Nginx和内核做相应的优化来满足高并发用户的访问,那下面在单台Nginx服务器来优化相关参数。Nginx.conf配置优化:worker_processes8;nginx进程数,建议按照cpu数目来指定,一般为它的倍数。worker_cpu_... 查看详情
前端性能优化:配置etag(代码片段)
...一个组件的一个特定版本的字符串,是web服务器用于确认缓存组件的有效性的一种机制,通常可以使用组件的某些属性来构造它。条件GET请求 浏览器下载组件的时候,会将它们存储到浏览器缓存中。如果需要再次获取相同的... 查看详情
前端常见的性能优化(代码片段)
...于图片自己找工具先压还可以使用服务器的gzip压缩2.建立缓存机制DNS缓存把不经常更改的静态资源做数据缓存(一般做的是304或者ETAG等协商缓存)强缓存和协商缓存(304)离线存储(manifest)有钱就做CDN(地域分布式服务器),还... 查看详情
recyclerview性能优化及高级使用(代码片段)
...化的点,在理解优化点之前,最好对RecyclerView的缓存机制有一些了解,比如得知道CacheView和RecycledViewPool的区别和联系,RecyclerView的绘制流程有一定了解,再来谈Recycler 查看详情
nginx-性能优化配置(代码片段)
文章目录性能优化配置1.高效文件传输模式2.gzip2.1gzip_types总结性能优化配置1.高效文件传输模式[!NOTE]参数sendfileon用于开启文件高效传输模式,同时将tcp_nopushon和tcp_nodelayon两个指令设置为on,可防止网络及磁盘I/O阻塞,... 查看详情
nginx-性能优化配置(代码片段)
文章目录性能优化配置1.高效文件传输模式2.gzip2.1gzip_types总结性能优化配置1.高效文件传输模式[!NOTE]参数sendfileon用于开启文件高效传输模式,同时将tcp_nopushon和tcp_nodelayon两个指令设置为on,可防止网络及磁盘I/O阻塞,... 查看详情
nginx性能优化(代码片段)
...gzip_module属于内置模块。开启资源压缩:http#开启压缩机制gzipon;#指定会被压缩的文件类型(也可自己配置其他类型)gzip_typestext/plainapplication/javascripttext/cssapplication/xmltext/javascriptimage/jpegimage/gifimage/png;#设置压缩级别,越高资... 查看详情
nginx性能优化(代码片段)
...gzip_module属于内置模块。开启资源压缩:http#开启压缩机制gzipon;#指定会被压缩的文件类型(也可自己配置其他类型)gzip_typestext/plainapplication/javascripttext/cssapplication/xmltext/javascriptimage/jpegimage/gifimage/png;#设置压缩级别,越高资... 查看详情
linux性能学习(1.1):cpu_cpu缓存(代码片段)
文章目录1简介2工作机制3CacheLine参考资料:1.https://www.makeuseof.com/tag/what-is-cpu-cache/2.https://zhuanlan.zhihu.com/p/806720733.CPUCache机制以及Cachemiss4.性能优化方法和技巧在日常的嵌入式开发中,查看一些SOC的datasheet总会看到“32K 查看详情
linux性能学习(1.1):cpu_cpu缓存(代码片段)
文章目录1简介2工作机制3CacheLine参考资料:1.https://www.makeuseof.com/tag/what-is-cpu-cache/2.https://zhuanlan.zhihu.com/p/806720733.CPUCache机制以及Cachemiss4.性能优化方法和技巧在日常的嵌入式开发中,查看一些SOC的datasheet总会看到“32K 查看详情
nginx-性能优化配置(代码片段)
...,可以图片a的生命周期设置长一点,让客户端来缓存。开启Gzip功能后,Nginx服务器会根据配置的策略对发送的内容,如css、js、xml、html等静态资源进行压缩,使得这些内容大小减少,在用户接收到返回内容之前对其... 查看详情
nginx-性能优化配置(代码片段)
...,可以图片a的生命周期设置长一点,让客户端来缓存。开启Gzip功能后,Nginx服务器会根据配置的策略对发送的内容,如css、js、xml、html等静态资源进行压缩,使得这些内容大小减少,在用户接收到返回内容之前对其... 查看详情
web缓存机制(代码片段)
作为前端开发人员,对于我们的站点或应用的缓存机制我们能做的似乎不多,但这些却是与我们关注的性能息息相关的部分,站点没有做任何缓存机制,我们的页面可能会因为资源的下载和渲染变得很慢,但大家都知道去找前端... 查看详情
nginx性能优化(代码片段)
nginx性能优化1.worker_processesn; nginx进程数,一般为cpu的倍数2.worker_cpu_affinity0000000100000010.. 为每个进程分配cpu,可多写几个,也可将一个进程分配到多个cpu3.worker_rlimit_nofile65535; nginx进程打开的最多文件描述符数目,查看... 查看详情