脚本宝典收集整理的这篇文章主要介绍了Nginx缓存机制和性能优化,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
目录
Nginx缓存机制介绍
Nginx缓存机制的作用
nginx缓存机制简述
Nginx缓存支持
缓存使用
proxy_cache_path参数详解
缓存清除机制分析
被动缓存清除
缓存加载
主动清除缓存
Nginx程序运行原理分析
Nginx工作模式
多进程处理模型
多进程处理模型优点
Nginx为何要采用多进程模式?
Worker进程遇到的问题
解决
Worker与CPU的绑定
linux服务器参数调整
修改配置文件
调整内容
生效配置
Nginx常规调整
Nginx中如何使用缓存,缓存机制是怎么样的。而且Nginx缓存是不会像redis这些一样有自己的内存管理机制,池化等,它会依据文件系统进行缓存
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 设置传递给上游服务的请求头。
通过这些指令 可以开启缓存。
对于内存和磁盘满了,nginx如何清除的,以及会不会像redis去池化会不会有碎片化的处理。
缓存自己有缓存管理进程
proxy_cache_path 中可以通过以下指令来管理缓存
proxy_cache_path中可以通过以下参数来调整加载缓存 Nginx启动一分钟后,缓存加载进程被激活,存储在文件系统上先前缓存的数据将被加载到 缓存区中,整个加载是在迭代中完成的。一次加载
proxy_cache_path中可以通过以下参数来调整主动清除缓存
该指令在商业版本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在运行时,架构是怎么样的,架构 工作模式;从进程来看有 master 和worker进程。
这个流程模型和netty上的网络模型,都是很像的,网络请求。
多进程模型的处理方式
accept_mutex
Nginx采用了一个是否打开accept_mutex选项的值,控制worker进程是否需要去竞争锁,打开accept_mutex锁,能很好解决accept精确问题
这是module中代码。
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缓存机制和性能优化所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。