varnish缓存四:性能调优

一、内核优化:(vim /etc/sysctl.conf ,立即生效使用 sysctl  -p)
   内核参数是用户和系统内核之间交互的一个接口,通过这个接口,用户可以在系统运行的同时动态的更新内核配置,而这些内核参数是通过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包的数量。
二、优化系统资源:
   在Linux下面部署应用的时候,,其实Linux是有文件句柄限制的,而且默认不是很高,一般都是1024,作为一台生产服务器,其实很容易就达到这个数量,因此我们需 要把这个值改大一些。
   这里,有很多ulimit的文章都说的很含糊,究竟这个1024 是 系统的限制,还是用户的限制呢。其实,这个是用户限制来的,完整的说法,应该是当前用户准备要运行的程序的限制。
   1、这个限制是针对单个程序的限制
   2、这个限制不会改变之前已经运行了的程序的限制
   3、对这个值的修改,退出了当前的shell就会消失
ulimit -HSn 131072        
ulimit -HSc unlimited
为了保证这个限制永久生效,最好将ulimit设置放到varnish的启动脚本中。
三、Varnish参数优化
查看varnish运行中的所有参数(也可以更改):
/usr/local/varnish/bin/varnishadm param.show    
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,调优)