linux文件描述符导致squid拒绝服务

原始出处:

linux文件描述符导致squid拒绝服务前几天因工作需要在RHEL4.8上面架设了一个squid双网代理,刚开始测试一切正常,然后就在前台负载均衡服务器把这个代理地址加上,运行一段时间后,客服反映有一些玩家无法进入游戏房间,通过cacti监控发现大量的失败连接,正常的连接只有900多650) this.width=650;” alt=”” border=”0″ src=”http://cdn.verydemo.com/upload/2013_04_03/13649466885251.jpg” />初步判断为linux内核限制了连接数,通过google一下发现linux默认文件描述符只有1024个,对于squid等一些服务来说,在大负载的情况下这点文件描述符是远远不够的,因为squid 的工作方式,文件描述符的限制可能会极大的影响性能。当squid 用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。直到一部分当前请求完成,相应的文件和socket 被关闭,squid 不能接收新请求,这样就要扩大linux的文件描述符了一,通过ulimit命令修改//显示当前文件描述符ulimit -n//修改当前用户环境下的文件描述符为65536ulimit -HSn 65536echo "ulimit -HSn 65536" >> /etcrc.local使用ulimit命令的缺点:1,只能修改当前登录用户环境下的文件描述符,如果此用户来另外打开一个连接,此链接环境的文件描述符依然是没改前的2,如果系统重启,以前修改都不再生效二,通过修改limits.conf文件编辑/etc/security/limits.conf 文件,在最后加入如下两行* soft nofile65536* hard nofile65536保存退出,都不需要重启服务器,直接重新登陆用ulimit -n就能看到效果这样无论使用哪个用户,无论是否重启都不会失效了。扩大linux的文件描述符后,再重新编译安装squid,安装完成后,重新启用此代理,发现连接数马上就上来了Linux下squid编译安装groupadd squiduseradd -g squid -s /sbin/nologin squidmkdir -p /cache/{cache,logs}ulimit -HSn 65536 //打开文件数为65536#squid 2.6tar – xzvf squid-2.6.STABLE9.tar.gzcd squid-2.6.STABLE9./configure –prefix=/usr/local/squid –enable-snmp –enable-storeio=diskd,ufs –enable-poll–disable-hostname-checks –enable-underscores –enable-x-accelerator-vary–enable-kill-parent-hack –enable-err-language="Simplify_Chinese"–enable-default-err-languages="Simplify_Chinese" –disable-ident-lookups–with-maxfd=65535;make;make install;–prefix=/usr/local/squid :指定软件的安装路径.–enable-snmp :此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须选择此项,使Squid支持SNMP接口。–enable-storeio=diskd,ufs :磁盘ache的模式.–enable-poll :应启用Poll()函数而不是select()函数,通常而言poll(轮询)比select要好,但configure(脚本程序)已知Poll在某些平台下失效, 若你认为你比configure编译配置脚本程序要聪明的话,可以用这个选项启用Poll。总之就是用这个可以提升性能就是啦。–disable-hostname-checks :关闭hostname检查;以提高速度.–enable-underscore :允许解析的URL中出现下划先,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址。–enable-x-accelerator-vary :Enable support for the X-Accelerator-VaryHTTP header. Can be used to indicatevariance within an accelerator setup.Typically used together with other codethat adds custom HTTP headers to the requests.–enable-kill-parent-hack :关掉suqid的时候,要不要连同父进程一起关掉.–enable-err-language="Simplify_Chinese" 和–enable-default-err-languages="Simplify_Chinese" :指定出错是显示的错误页面为简体中文.–disable-ident-lookups :防止系统使用RFC931规定的身份识别方法。–enable-cahce-digests :加快请求时,检索缓存内容的速度。(在squid集群时才有用)–enable-linux-netfilter :可以支持透明代理for linux2.4.–enable-arp-acl :可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。(和上一行配合用;只有反向代理时没用).–with-maxfd=65535 //打开文件数为65536#squid 3.0tar -zxvf squid-3.0.STABLE7.tar.gzcd squid-3.0.STABLE7./configure –prefix=/usr/local/squid –enable-gnuregex –enable-arp-acl –enable-auth="basic" –enable-basic-auth-helpers="NCSA" –enable-async-io=80 –enable-storeio=ufs –enable-icmp –enable-kill-parent-hack –enable-snmp –disable-ident-lookups –enable-cache-digests –enable-ssl –enable-delay-pools –enable-poll –enable-linux-netfilter –enable-underscore –enable-err-language="Simplify_Chinese" –enable-default-err-languages="Simplify_Chinese"解释说明:–prefix=/usr/local/squid //指定安装路径–enable-arp-acl //这样可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗–enable-async-io=80 //这个主要是设置async模式来运行squid,我的理解是设置用线程来运行squid,如果服务器配置很不错,有1G以上内存,cpu使用SMP的方式的话可以考虑设成160或者更高。如果服务器比较糟糕就根据实际情况设了。另外此项还另cache文件支持aufs –enable-auth-modules //此编译选项启用认证模块,可以对访问代理用户进行授权。 –enable-cache-digests //使能缓存摘要,本来此项目的是为了在Squid集群服务之间迅速发现缓存对象,这里在本地使用,可以加快请求时,检索缓存内容的速度。–enable-err-language="Simplify_Chinese" 和–enable-default-err-languages="Simplify_Chinese" //指定出错是显示的错误页面为简体中文 –enable-delay-pools //此选项使能一个延时池,这样能对某些特定的请求限制额定带宽。 –enable-gnuregex //由于Squid大量使用字符串处理做各种判断,加此项能更好处理。 –enable-icmp //加入icmp支持 –disable-ident-lookups //防止系统使用RFC931规定的身份识别方法。 –enable-kill-parent-hack //关掉suqid的时候,要不要连同父进程一起关掉,这个当然要啦 –enable-linux-netfilter //允许使用Linux的透明代理功能。–enable-poll //应启用Poll()函数而不是select()函数,通常而言poll(轮询)比select要好,但configure(脚本程序)已知Poll在某些平台下失效, 若你认为你比configure编译配置脚本程序要聪明的话,可以用这个选项启用Poll。总之就是用这个可以提升性能就是啦。 –enable-snmp //此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须选择此项,使Squid支持SNMP接口。 –enable-storeio=ufs,null //使用的文件系统通常是默认的ufs,不过如果想要做一个不缓存任何文件的代理服务器,就需要加上null文件系统。 –enable-underscore //允许解析的URL中出现下划先,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址。Make;make installchown -R squid.squid /cache/cachechown -R squid.squid /cache/logsvi /usr/local/squid/etc/squid.confvisible_hostname squid17http_port 8008http_port 80cache_mgr kerryhu@163.comcache_mem 1024 MBmaximum_object_size_in_memory 10 MBmemory_replacement_policy lrucache_replacement_policy lrucache_dir ufs /cache/cache 8000 32 128max_open_disk_fds 0maximum_object_size 300 MBcache_swap_low 90cache_swap_high 95http_access allow all#logsaccess_log nonecache_log /cache/logs/cache.logcache_store_log noneerror_directory/usr/local/squid/share/errors/Simplify_Chinese/usr/local/squid/sbin/squid -z //测试Squid运行状况/usr/local/squid/sbin/squid start //启动squidEcho “/usr/local/squid/sbin/squid start”>> /etc/rc.local/usr/local/squid/sbin/squid -k reconfigure –f /usr/local/squid/etc/squid.conf //重新加载配置文件 有时不但是必要的,而且是很有必要的。

linux文件描述符导致squid拒绝服务

相关文章:

你感兴趣的文章:

标签云: