squid优化及配置参数

Squid 在高负载下,需要大量的内核资源。特别的,您需要给您的系统配置比正常情况更高的文档描述符和缓存。文档描述符的限制通常很恼人。您最好在开始编译squid 之前来增加这些限制的大小。 .

文档描述符是个简单的整数,用以标明每一个被进程所打开的文档和socket。第一个打开的文档是0,第二个是1,依此类推。Unix 操作系统通常给每个进程能打开的文档数量强加一个限制。更甚的是,unix 通常有一个系统级的限制。

因为squid 的工作方式,文档描述符的限制可能会极大的影响性能。当squid 用完任何的文档描述符后,他不能接收用户新的连接。也就是说,用完文档描述符导致拒绝服务。直到一部分当前请求完成,相应的文档和socket 被关闭,squid 不能接收新请求。当squid发现文档描述符短缺时,他会发布警告。

在运行./configure 之前,检查您的系统的文档描述符限制是否合适,能给您避免一些麻烦。大多数情况下,1024 个文档描述符足够了。很忙的cache可能需要4096或更多。在配置文档描述符限制时,我推荐配置系统级限制的数量为每个进程限制的2 倍。

通常在您的Unix shell 中能找到系统的文档描述符限制。任何的C shell 及其类似的shell有内建的limit 命令。更新的Bourne shell 及其类似的shell 有一条叫做ulimit 的命令。为了发现您的系统的文档描述符限制,试运行如下命令:
sh$ ulimit -n .

在Linux 上配置文档描述符有点复杂。在编译squid 之前,您必须编辑系统include 文档中的一个,然后执行一些shell 命令。请首先编辑/usr/include/bits/typesizes.h 文档,改变__FD_SETSIZE 的值:
#define _ _FD_SETSIZE 8192

下一步,使用这个命令增加内核文档描述符的限制:
# echo 8192 > /proc/sys/fs/file-max

最后,增加进程文档描述符的限制,在您即将编译squid 的同一个shell 里执行:
sh# ulimit -Hn 8192

该命令必须以root 运行,仅仅运行在bash shell。不必重启机器。

使用这个技术,您必须在每一次系统启动后执行上述echo 和ulimit 命令,或至少在squid 启动之前。假如您使用某个rc.d 脚本来启动squid,那是个放置这些命令的好地方。 .

临时端口是TCP/IP 栈分配给出去连接的本地端口。换句话说,当squid 发起一条连接到另一台服务器,内核给本地socket 分配一个端口号。这些本地端口号有特定的范围限制。

临时端口号的短缺对很忙的代理服务器(例如每秒数百个连接)来说,会较大的影响性能。这是因为一些TCP 连接在他们被关闭时进入TIME_WAIT 状态。当连接进入TIME_WATI 状态时,临时端口号不能被重用。

您能使用netstat 命令来显示有多少个连接进入这个状态:

% netstat -n | grep TIME_WAIT

在Linux 上,简单的写一对数字到下列指定文档:
# echo "1024 40000" > /proc/sys/net/ipv4/ip_local_port_range

不要忘记将这些命令加到您的系统启动脚本中,以使机器每一次重启后都生效。 ..

ls -l /usr/local/squid
total 5
drwxr-x--- 2 wessels wheel 512 Apr 28 20:42 bin
drwxr-x--- 2 wessels wheel 512 Apr 28 20:42 etc
drwxr-x--- 2 wessels wheel 512 Apr 28 20:42 libexec
drwxr-x--- 3 wessels wheel 512 Apr 28 20:43 man
drwxr-x--- 2 wessels wheel 512 Apr 28 20:42 sbin
drwxr-x--- 4 wessels wheel 512 Apr 28 20:42 share
drwxr-x--- 4 wessels wheel 512 Apr 28 20:43 var ..

.4.1 configure 选项

./configure 脚本有大量的不同选项,他们以-开始。当您敲入./configure --help 时,能看到选项的完整列表。一些选项对任何configure 脚本是通用的,更有一些是squid 专有的。下面是您可能用得到的标准选项:
--perfix =PREFIX

如前面描述的相同,这里配置安装目录。安装目录是任何可执行文档,日志,和配置文档的默认目录。在整本书中,$prefix 指您选择的安装目录。

--localstatedir =DIR
该选项允许您改变var 目录的安装位置。默认是$prefix/var,但也许您想改变他,以使squid 的磁盘缓存和日志文档被存储在别的地方。

--sysconfdir =DIR
该选项允许您改变etc 目录的位置。默认的是$prefix/etc。假如您想使用/usr 作为安装位置,您也许该配置--sysconfdir为/etc.

以下是squid 的专有./configure选项:

--enable-dlmalloc[=LIB]
在一些系统上,内建的内存分配机制(malloc)在使用squid 时表现不尽人意。使用--enable-dlmalloc 选项将squid 源代码包中的dlmalloc 包编译和链接进来。假如您的系统中已安装dlmalloc,您能使用=LIB 参数指定库的路径。请见http://g.oswego.edu/dl/html/malloc.html更多关于dlmalloc 的信息。 。

--enable-gnuregex
在访问控制列表和其他配置指令里,squid 使用正则表达式作为匹配机制。GNU 的正则表达式库包含在squid 的源代码包里;他能够在没有内建正则表达式的操作系统中使用。./configure脚本侦察您系统中的正则表达式库,假如必要,他能够激活使用GNU正则表达式。假如因为某些理由,您想强制使用GNU正则表达式,您能够将这个选项加到./configure命令后。

--enable-carp
Cache数组路由协议(CARP)用来转发丢失的cache到父cache的数组或cluster。在10.9章有更多关于CARP的细节。

--enable-async-io[=N_THREADS]
同步I/O 是squid 技术之一,用以提升存储性能。aufs 模块使用大量的线程来执行磁盘I/O 操作。该代码仅仅工作在linux 和solaris 系统中。=N_THREADS 参数改变squid 使用的线程数量。aufs 和同步I/O 在8.4 章中被讨论。

添加新评论 »