《高性能Linux服务器构建实战》——2.6节Varnish优化

2.6 Varnish优化
Varnish是否能稳定、快速地运行,与Linux本身的优化及Varnish自身参数的设置有很大关系。在安装配置完Varnish后,还必须从操作系统和Varnish配置参数两个方面对Varnish服务器进行性能优化,从而最大限度地发挥Varnish的性能优势。

2.6.1 优化Linux内核参数
内核参数是用户和系统内核之间交互的一个接口,通过这个接口,用户可以在系统运行的同时动态更新内核配置,而这些内核参数是通过Linux Proc文件系统存在的。因此,可以通过调整Proc文件系统达到优化Linux性能的目的。
以下参数是官方给出的一个配置:

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:用来指定外部连接的端口范围,默认是32 768到61 000,这里设置为1024到65 536。
net.core.rmem_max:指定接收套接字缓冲区大小的最大值,单位是字节。
net.core.wmem_max:指定发送套接字缓冲区大小的最大值,单位是字节。
net.ipv4.tcp_rmem:此参数与net.ipv4.tcp_wmem都是用来优化TCP接收/发送缓冲区的,包含3个整数值,分别是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-WAIT-2状态等待B的fin包,然后给B发ack确认包。net.ipv4.tcp_fin_timeout参数用来设置A进入FIN-WAIT-2状态等待对方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攻击。此值不能太小。这里设置为262 144。
net.ipv4.tcp_max_syn_backlog:表示SYN队列的长度,预设为1024,这里设置队列长度为262 144,以容纳更多的等待连接。
net.ipv4.tcp_synack_retries:这个参数用于设置内核放弃连接之前发送SYN+ACK包的数量。
net.ipv4.tcp_syn_retries:此参数表示在内核放弃建立连接之前发送SYN包的数量。
将以上内容添加到/etc/sysctl.conf文件中,然后执行如下命令,使设置生效。

[root@varnish-server ~]#sysctl  -p

2.6.2 优化系统资源
假设有这样一种情况,一台Linux 主机上同时登录了10个用户,在没有限制系统资源的情况下,这10个用户同时打开了500个文档,而每个文档的大小为10MB,这时系统的内存资源就会受到巨大的挑战。如果没有内存方面的限制,势必造成系统资源利用的混乱。而实际的应用环境要比这种假设复杂得多。这时,ulimit就派上用场了。ulimit是一种简单并且有效的实现资源限制的方式。
ulimit可以限制系统的各个方面,它通过限制shell启动进程所占用的资源,来完成对系统资源的合理利用和分配。ulimit支持对以下内容进行限制:所创建的内核文件的大小、内存锁住的大小、常驻内存集的大小、进程数据块的大小、打开文件描述符的数量、shell进程所能使用的最大虚拟内存、shell 进程创建文件的大小、分配堆栈的最大值、单个用户的最大线程数和CPU 时间等。同时,它还支持对硬资源和软资源的限制。
ulimit有临时限制和永久限制两种实现方式。临时限制可以限制通过命令行登录的shell会话,并在会话终止时结束限制,而不影响与其他shell会话。对于永久限制,ulimit命令可以将ulimit命令添加到有登录shell的配置文件中,这样就实现了对shell启动进程所占用的资源的永久限制。
ulimit使用格式如下:

ulimit [options] [value]

options 中可设置的选项的含义以及简单示例如表2-7所示。

在了解了ulimit的含义和用法以后,接下来就可以针对Varnish系统进行相关的设定。这里的参数设定值如下(此值不能一概而论,需要根据应用环境的不同,选择适合的值)。

ulimit -HSn 131072
ulimit -HSc unlimited

为了保证这个限制永久生效,最好将ulimit设置放到Varnish的启动脚本中。

2.6.3 优化Varnish参数
telnet到Varnish的3500管理端口,然后执行param.show命令即可看到Varnish运行中的所有参数。当然也可以通过这种方式更改相关参数,由于Varnish运行中用到的参数有很多,因此这里仅选取对Varnish性能影响比较大的几个参数进行介绍,更多介绍请查阅varnish官方文档。
首先查看以下4个参数:

thread_pools               4 [pools]
thread_pool_min            50 [threads]
thread_pool_max            5120 [threads]
thread_pool_timeout        10 [seconds]

thread_pools:用来设置线程池的数量。一般认为这个值和系统CPU的数目相同最好。设置多一些的pool,Varnish的并发处理能力会更强,但是也会消耗更多的CPU和内存。
thread_pool_min:用来设置每个pool的最小thread数。pool接收到可用的请求后,就会将请求分配给空闲的thread来处理。
thread_pool_max:表示所有pool对应的thread数总和的最大值。此值不能太大,设置为系统峰值的90%左右即可,设置过大会导致进程被挂起。
thread_pool_timeout:表示thread的超时过期时间。当thread数大于thread_pool_min设定值时,如果thread空闲超过thread_pool_timeout设定的时间,thread就会被释放掉。
Varnish运行中还有以下两个参数:

lru_interval               20 [seconds]
listen_depth               1024 [connections]

lru_interval:这是个时间参数,表示在内存中如果某一个对象超过了此参数设定的时间后还没有被重用时,就把这个对象从LRU(Least Recently Used)队列中移除。这是缓存系统的一个常用算法。合理地设置这个时间,可以提高系统的运行效率。
listen_depth:这个参数用于设置TCP连接队列的长度,将其设置得大一些可以提高并发处理的能力。
对于这些优化参数,最好的方式是将它们加到Varnish的启动脚本中,然后通过varnishd的“-p”参数调用即可。

时间: 2025-01-26 16:04:06

《高性能Linux服务器构建实战》——2.6节Varnish优化的相关文章

《高性能Linux服务器构建实战》——2.5节管理Varnish

2.5 管理Varnish 2.5.1 查看Varnish进程 通过上一节的设置,Varnish已经可以启动起来了.执行如下命令可以查看Varnish是否正常启动. [root@varnish-server ~]# ps -ef|grep varnish root 29615 1 0 00:20 pts/1 00:00:00 /usr/local/varnish/bin/varnishncsa -n /data/varnish/cache -f root 29616 1 0 00:20 pts/

《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》——第1章 Linux服务器安全运维 1.1 账户和登录安全

第1章 Linux服务器安全运维 1.1 账户和登录安全 安全是IT行业一个老生常谈的话题了,最近的"棱镜门"事件折射出了很多安全问题,处理好信息安全问题已变得刻不容缓.因此作为一名运维人员,必须了解一些安全运维准则,同时,要保护自己所负责的业务,首先要站在攻击者的角度思考问题,才能修补任何潜在的威胁和漏洞. 账户安全是系统安全的第一道屏障,也是系统安全的核心,保障登录账户的安全,在一定程度上可以提高服务器的安全级别,本节重点介绍Linux系统登录账户的安全设置方法.1.1.1 删除特

《高性能Linux服务器构建实战》——1.9节本章小结

1.9 本章小结本章主要介绍了对高性能HTTP服务器Nginx的安装.配置.管理和使用,以及Nginx在性能优化方面的一些经验和技巧,并通过实例分别演示了Nginx与PHP整合,Nginx和Java.Perl整合的过程.通过本章的学习,读者能够对Nginx有一个清晰的认识,并且可以熟练地配置和管理Nginx服务器.随着Nginx知识的普及,相信Nginx会越来越受欢迎.如果你还没有使用Nginx来搭建Web应用系统,不妨现在尝试一下.

《高性能Linux服务器构建实战》——3.1节Memcached基础

3.1 Memcached基础 3.1.1 什么是Memcached Memcached是一个免费开源的.高性能的.具有分布式内存对象的缓存系统,它通过减轻数据库负载加速动态Web应用.最初版本由LiveJournal的Brad Fitzpatrick在2003年开发完成.目前全世界很多用户都在使用它来构建自己的大负载网站或提高自己的高访问网站的响应速度.Memcache是这个项目的名称,而Memcached是服务器端的主程序文件名. 缓存一般用来保存一些经常存取的对象或数据(例如,浏览器会把经

《高性能Linux服务器构建实战》——1.7节实战Nginx与PHP(FastCGI)的安装、配置与优化

1.7 实战Nginx与PHP(FastCGI)的安装.配置与优化 1.7.1 什么是 FastCGI FastCGI是一个可伸缩地.高速地在HTTP server和动态脚本语言间通信的接口.多数流行的HTTP server都支持FastCGI,包括Apache.Nginx和lighttpd等.同时,FastCGI也被许多脚本语言支持,其中就有PHP. FastCGI是从CGI发展改进而来的.传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执

《高性能Linux服务器构建实战》——2.1节初识Varnish

2.1 初识Varnish 2.1.1 Varnish概述 Varnish是一款高性能且开源的反向代理服务器和HTTP 加速器,它的开发者Poul-Henning Kamp是FreeBSD核心的开发人员之一.Varnish采用全新的软件体系机构,和现在的硬件体系配合紧密.在1975年时,储存媒介只有两种:内存与硬盘.而现在计算机系统的内存除了主存外,还包括CPU内的L1.L2,有的还包括L3快取,硬盘上也有自己的快取装置,因此Squid Cache自行处理数据替换的架构不可能得知这些情况而做到最

《高性能Linux服务器构建实战》——2.4节运行Varnish

2.4 运行Varnish 2.4.1 varnishd指令 Varnish启动的命令是/usr/local/varnish/sbin/varnishd.此命令参数较多,用法比较复杂,在命令行执行"/usr/local/varnish/sbin/varnishd –h"即可得到varnishd的详细用法.表2-6列出了varnishd常用参数的使用方法和含义. 2.4.2 配置Varnish运行脚本 在安装Varnish时,已经将Varnish的管理脚本复制到相应的目录下,这里稍作修改

《高性能Linux服务器构建实战》——1.4节Nginx的安装与配置

1.4 Nginx的安装与配置 1.4.1 下载与安装Nginx Nginx的官方网站是http://sysoev.ru/nginx/,英文主页为http://nginx.net,从这里可以获得Nginx的最新版本信息.Nginx有三个版本:稳定版.开发版和历史稳定版.开发版更新较快,包含最新的功能和bug的修复,但同时也可能会出现新的bug.开发版一旦更新稳定下来,就会被加入稳定版分支中.然而有些新功能不一定会被加到稳定版中去.稳定版更新较慢,但是bug较少,可以作为生产环境的首选,因此通常建

《高性能Linux服务器构建实战》——3.2节剖析Memcached的工作原理

3.2 剖析Memcached的工作原理 3.2.1 Memcached的工作过程 Memcached是一种C/S模式,在服务器端启动服务守护进程,此时可以指定监听的IP地址.端口号以及使用多少内存来处理客户端的请求等几个关键参数.服务器端的服务启动后就一直处于等待处理客户端的连接状态.Memcached 是由C语言来实现的,采用的是异步I/O,其实现方式是基于事件的单进程和单线程的.使用libevent 作为事件通知机制,多个服务器端可以协同工作,但这些服务器端之间没有任何通信关系,每个服务器