varnish是否能稳定、快速的运行,与Linux本身的优化以及varnish自身参数的设置有很大关系,在varnish安装配置完成 后,还必须从操作系统和varnish配置参数两个方面对varnish服务器进行性能优化,从而最大程度上发挥varnish的性能。
一、优化linux内核参数
内核参数是用户和系统内核之间交互的一个接口,通过这个接口,用户可以在系统运行的同时动态的更新内核配置,而这些内核参数是通过Linux Proc文件系统存在的,因此,可以通过对Proc文件系统进行调整,达到性能优化的目的。
以下参数是官方给出的一个配置,内容如下:
net.ipv4.ip_local_port_range = 1024 65536
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_fin_timeout = 30
net.core.netdev_max_backlog = 30000。
net.ipv4.tcp_no_metrics_save=1
net.core.somaxconn = 262144
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
对上面的每个选项含义解释如下:
net.ipv4.ip_local_port_range:用来指定外部连接的端口范围,默认是32768到61000,这里设置为1024到65536。
net.core.rmem_max:该文件指定了接收套接字缓冲区大小的最大值,单位是字节。
net.core.wmem_max:该文件指定了发送套接字缓冲区大小的最大值,单位是字节。
net.ipv4.tcp_rmem:此参数与net.ipv4.tcp_wmem都是用来优化TCP接收/发送缓冲区,包含三个整数值,分别是:min,default,max:
tcp_rmem:min表示为TCP socket预留用于接收缓冲的最小内存数量,default为TCP socket预留用于接收缓冲的缺省内存数量,max用于TCP socket接收缓冲的内存最大值。
tcp_wmem:min表示为TCP socket预留用于发送缓冲的内存最小值,default为TCP socket预留用于发送缓冲的缺省内存值,max用于TCP socket发送缓冲的内存最大值。
net.ipv4.tcp_fin_timeout:此参数用来减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接。此参数值为整数,单位为秒。
举一个例子:在一个tcp会话过程中,在会话结束时,A首先向B发送一个fin包,在获得B的ack确认包后,A就进入FIN WAIT2状态等待B的fin包,然后给B发ack确认包。此参数就是用来设置A进入FIN WAIT2状态等待对方fin包的超时时间。如果时间到了仍未收到对方的fin包就主动释放该会话。
net.core.netdev_max_backlog:该参数表示在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数量。
net.ipv4.tcp_syncookie:该文件表示是否打开SYN Cookie功能,tcp_syncookies是一个开关,该功能有助于保护服务器免受SyncFlood攻击。默认为0,这里设置为1。
net.ipv4.tcp_max_orphans:表示系统中最多有多少TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接就会复位并打输出警告信息。这个限制仅仅是为了防止简单的DoS攻击。此值不能太小。这里设置为262144。
net.ipv4.tcp_max_syn_backlog:表示SYN队列的长度,预设为1024,这里设置队列长度为262144,以容纳更多等待连接。
net.ipv4.tcp_synack_retries:这个参数用于设置内核放弃连接之前发送SYN+ACK包的数量。
net.ipv4.tcp_syn_retries:此参数表示在内核放弃建立连接之前发送SYN包的数量。
将以上内容添加到/etc/sysctl.conf文件中,然后执行如下命令,让设置生效:
[root@varnish-server ~]#sysctl -p
二、优化系统资源
假设有这样一 种情况,当一台Linux 主机上同时登陆了10个人,在系统资源没有限制的情况下,这10个用户同时打开了500个文档,而假设每个文档的大小有10M,这时系统的内存资源就会受 到巨大的挑战。如果没有内存方面的限制,势必造成系统资源利用的混乱,而实际的应用环境要比这种假设复杂的多,这时,ulimit就派上用场了。它是一种 简单并且有效的实现资源限制的方式。
ulimit可以限制系统的各个方面,它通过限制shell启动进程所占用的资源,来完成系统资源的合理利用和分配,ulimit支持以下各种 类型的限制:所创建的内核文件的大小、内存锁住的大小、常驻内存集的大小、进程数据块的大小、打开文件描述符的数量、Shell进程所能使用的最大虚拟内 存、Shell 进程创建文件的大小、分配堆栈的最大大小、单个用户的最大线程数、CPU 时间等。同时,它还支持硬资源和软资源的限制。
ulimit有临时限制和永久限制两种实现方式,它可以限制通过使用其命令行登录的shell会话,并在会话终止时结束限制,而不影响于其它 shell会话。对于长期的固定限制,ulimit的命令可以添加到由登录shell的配置文件中,这样就实现了永久限制shell启动进程所占用的资 源。
Ulimit使用格式为:ulimit [options] [value]
具体的options 含义以及简单示例如表1所示:
表1
在了解了ulimit的含义和用法以后,接下来就可以针对varnish系统进行相关的设定了,这里的参数设定值如下所示,但是此值不能一概而论,需要根据应用环境的不同,选择适合的值:
ulimit -HSn 131072
ulimit -HSc unlimited
为了保证这个限制永久生效,最好将ulimit设置放到varnish的启动脚本中。
三、Varnish参数优化
通过 telnet到varnish的3500管理端口,然后执行“param.show”命令即可看到varnish运行中的所有参数,当然也可以通过这种方 式更改相关参数,varnish运行中的参数有很多,这里仅选取对varnish性能影响比较大的几个参数进行介绍,更多介绍请查阅官方文档。
首先看下面四个参数:
thread_pools 4 [pools]
thread_pool_min 50 [threads]
thread_pool_max 5120 [threads]
thread_pool_timeout 10 [seconds]
thread_pools:用来设置线程池的数量,一般认为这个值和系统CPU的数目相同最好,设置过多的pools,varnish的并发处理能力会更强,但是也会消耗更多的CPU和内存。
thread_pool_min:用来设置每个pools的最小threads数,当pools接收到可用的请求后,就会将请求分配给空闲的threads来处理。
thread_pool_max:表示所有pools对应的threads数总和的最大值,此值不能太大,可以设置为系统峰值的90%左右即可,设置过大,会导致进程hung住。
thread_pool_timeout:表示threads的超时过期时间,当threads数大于thread_pool_min设定值时,threads空闲超过thread_pool_timeout设定的时间时,thread就会被释放掉。
另外还有两个参数:
lru_interval 20 [seconds]
listen_depth 1024 [connections]
lru_interval: 这是个时间参数,大概意思是说如果有一个对象在内存中超过了此参数设定的时间还没有被重用时,就把这个对象从LRU(Least Recently Used)队列中移除。这其实是缓存系统的一个常用算法,合理的设置这个时间,可以提高系统的运行效率。
listen_depth:这个参数是设置TCP连接队列的长度,设置大一点可以提高并发处理能力。
对于这些优化参数,最好的方式是加到varnish的启动脚本中,通过varnishd的“-p”参数调用即可。
分享到:
相关推荐
关于Varnish的优化,主要涉及到如何在后端数据发生变化时,让Varnish缓存失效并更新。这可以通过发起PURGE请求实现,即通知Varnish清除特定URL的缓存。通过在管理服务器上执行curl命令,或者在远程管理时,正确配置...
想象一下,你刚刚发布了一篇博文,并分享到了社交网络。然后,这篇文章恰巧被大V看中再次分享了出去,立即吸引了数百粉丝的目光,引导他们涌入了你的网站。看到这么多的访客量,以及它们的评论,你内心激动不已。...
20. **Varnish优化**: 包括调整缓存大小、优化配置文件等。 #### Varnish参考资料 - [Varnish官方文档](https://varnish-cache.org/docs/trunk/) - [Varnish缓存优化实践]...
Linux环境下的Varnish配置涉及到安装、配置文件的修改、启动和管理、监控以及性能优化等多个环节。理解并掌握Varnish的基本工作原理和VCL语言,是有效利用Varnish提高Web性能的关键。通过不断的实践和调整,Varnish...
Varnish和Lighttpd是两个非常重要的开源Web服务器软件,它们在Web性能优化和负载均衡方面发挥着关键作用。Varnish作为一个高性能的HTTP缓存代理,常用于减轻后端服务器的压力,提高网站响应速度;而Lighttpd则是一款...
4. 性能调优:学习如何监控和分析Varnish性能,以及调整参数以优化缓存效率。 5. 案例研究:通过实际案例了解Varnish在不同场景下的应用,如电商、新闻网站等。 6. 故障排查:掌握Varnish的日志分析技巧,以便快速...
4. **性能优化**:Varnish在内存管理、连接处理和I/O方面进行了优化,提供了极高的吞吐量和低延迟。 5. **易扩展性**:Varnish的模块化设计使得添加新功能和扩展变得简单。 **Varnish 3.0.7的安装与配置** 1. **...
2.6 Varnish优化 2.6.1 优化Linux内核参数 2.6.2 优化系统资源 2.6.3 优化Varnish参数 2.7 Varnish的常见应用实例 2.7.1 利用Varnish实现图片防盗链 2.7.2 利用Varnish实现静态文件压缩处理 2.8 本章...
5. Varnish和CDN集成:Varnish可以与内容分发网络(CDN)结合使用,进一步优化全球用户的访问体验,尤其是在跨地域的内容传输中。 6. Varnish的性能监控和日志分析:Varnish提供丰富的日志记录功能,可以配合第三方...
3. **系统优化**:通过优化操作系统设置,例如调整TCP/IP栈参数、文件系统缓存策略等,可以进一步提升Varnish的运行效率。 #### 四、Varnish配置:打造个性化缓存策略 Varnish的配置文件是其功能发挥的核心。不同...
Varnish是一款强大的...总之,Varnish 6.2.0作为一个高效的HTTP缓存加速器,对于提高网站性能、减少服务器负载、优化用户体验具有重要意义。通过深入理解和有效利用其特性,可以为企业或个人网站带来显著的性能提升。
总之,Varnish对于优化Magento性能至关重要,而正确配置和管理Varnish-Magento集成是电子商务平台成功的关键因素之一。通过解决像form key问题这样的技术挑战,可以进一步提升用户体验,降低服务器负载,提高网站的...
Varnish项目由挪威的Varnish Software AS维护,并且拥有活跃的社区支持,提供持续的更新和优化。 在解压的文件"varnish-5.2.1"中,通常会包含以下内容: 1. `INSTALL`:安装指南,描述如何编译和安装Varnish。 2. ...
Varnish 4.0.0是一个重要的里程碑,它带来了许多新功能和优化,旨在提升服务的稳定性和效率。首先,让我们深入了解一下Varnish的工作原理。Varnish作为缓存服务器,它接收来自客户端的HTTP请求,如果请求的内容已经...
Varnish是一款强大的开源HTTP缓存和反向代理服务器,其设计目的是提高网站的性能和响应速度。...对于那些希望优化Web服务器性能、减少服务器压力和提升用户体验的组织,Varnish是一个值得考虑的解决方案。
Varnish的核心配置文件,通常命名为`default.vcl`,是通过一种称为VCL...理解并熟练运用这些阶段和VCL语法,能够帮助架构师有效地利用Varnish优化Web性能,实现高效的缓存策略,提升网站的整体响应速度和用户体验。