linux文件描述符导致squid拒绝服务
 
前几天因工作需要在RHEL4.8上面架设了一个squid双网代理,刚开始测试一切正常,然后就在前台负载均衡服务器把这个代理地址加上,运行一段时间后,客服反映有一些玩家无法进入游戏房间,通过cacti监控发现大量的失败连接,正常的连接只有900多
 
初步判断为linux内核限制了连接数,通过google一下发现linux默认文件描述符只有1024个,对于squid等一些服务来说,在大负载的情况下这点文件描述符是远远不够的,因为squid 的工作方式,文件描述符的限制可能会极大的影响性能。当squid 用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。直到一部分当前请求完成,相应的文件和socket 被关闭,squid 不能接收新请求,这样就要扩大linux的文件描述符了
一,通过ulimit命令修改
//显示当前文件描述符
ulimit -n
//修改当前用户环境下的文件描述符为65536
ulimit -HSn 65536
echo "ulimit -HSn 65536" >> /etcrc.local
使用ulimit命令的缺点:
1,只能修改当前登录用户环境下的文件描述符,如果此用户来另外打开一个连接,此链接环境的文件描述符依然是没改前的
2,如果系统重启,以前修改都不再生效
二,通过修改limits.conf文件
编辑/etc/security/limits.conf 文件,在最后加入如下两行
*                               soft    nofile  65536
*                               hard    nofile  65536
保存退出,都不需要重启服务器,直接重新登陆用ulimit -n就能看到效果
这样无论使用哪个用户,无论是否重启都不会失效了。
扩大linux的文件描述符后,再重新编译安装squid,安装完成后,重新启用此代理,发现连接数马上就上来了
 
Linux下squid编译安装
groupadd squid
useradd -g squid -s /sbin/nologin squid
mkdir -p /cache/{cache,logs}
ulimit -HSn 65536 //打开文件数为65536
#squid 2.6
tar - xzvf squid-2.6.STABLE9.tar.gz
cd 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-Vary
HTTP header. Can be used to indicate
variance within an accelerator setup.
Typically used together with other code
that 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.0
tar -zxvf squid-3.0.STABLE7.tar.gz
cd 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 install
chown -R squid.squid /cache/cache
chown -R squid.squid /cache/logs
vi /usr/local/squid/etc/squid.conf
visible_hostname squid17
http_port 8008
http_port 80
cache_mgr kerryhu@163.com
cache_mem 1024 MB
maximum_object_size_in_memory 10 MB
memory_replacement_policy lru
cache_replacement_policy lru
cache_dir ufs /cache/cache 8000 32 128
max_open_disk_fds 0
maximum_object_size 300 MB
cache_swap_low 90
cache_swap_high 95
http_access allow all
#logs
access_log none
cache_log /cache/logs/cache.log
cache_store_log none
error_directory  /usr/local/squid/share/errors/Simplify_Chinese
/usr/local/squid/sbin/squid -z      //测试Squid运行状况
/usr/local/squid/sbin/squid start   //启动squid
Echo “/usr/local/squid/sbin/squid start”  >> /etc/rc.local
/usr/local/squid/sbin/squid -k reconfigure –f /usr/local/squid/etc/squid.conf   //重新加载配置文件
本文转自king_819 51CTO博客,原文链接:http://blog.51cto.com/kerry/300757,如需转载请自行联系原作者

linux文件描述符导致squid拒绝服务相关推荐

  1. [转帖]linux文件描述符文件/etc/security/limits.conf

    linux文件描述符文件/etc/security/limits.conf https://blog.csdn.net/fanren224/article/details/79971359 需要多学习 ...

  2. 玩转Linux文件描述符和重定向

    本文介绍linux中文件描述符与重定向的相关知识,文件描述符是与文件输入.输出相关联的整数,它们用来跟踪已打开的文件.有需要的朋友参考下. 原文出处:http://www.jbxue.com/arti ...

  3. linux文件描述符、软硬连接、输入输出重定向

    引用链接:https://blog.csdn.net/qq769651718/article/details/79459346 文件描述符的作用: 文件描述符是linux操作系统中特有的概念.其相当于 ...

  4. 页描述符 linux,有关Crontab导致Linux文件描述符...-探讨:crond 引发大量sendmail进...-linux下的ulimit命令用法解析(图文)_169IT.COM...

    一,遇到的问题 系统中的定时任务,过一段时间之后,不能运行. 通过系统命令查看到系统有大量sendmail进程,导致文件描述符耗尽.以下主要通过分析整个处理过程,供大家参考. 二,处理过程 分析步骤如 ...

  5. OS / Linux / 文件描述符以及 file 结构体

    零.前言 程序可以理解为硬盘上的普通二进制文件:进程是加载到内存中的二进制文件,除了加载到内存中的二进制文件外,还附有所有对于该二进制文件描述信息的结构体,描述该进程的结构体叫PCB(进程控制块),在 ...

  6. linux文件描述符泄漏,文件描述符(fd)泄漏排查一篇就够了

    生产多次遇到文件描述符(fd)泄露相关的问题, 文件描述符泄漏一般引起 的现象是文件句柄数(封面图)/tcp alloc(上图)增长.文章分为两部分介绍文件描述符相关内容,第一部分介绍文件描述基础知识 ...

  7. Linux文件描述符详解

    文章目录 一.概念 `1.1.特点` 优点 缺点 二.手动创建文件描述符 `2.1.语法` 2.1.1.创建 2.1.2.调用 2.1.3.关闭 `2.2.重定向输出的文件描述符` `2.3.重定向输 ...

  8. linux文件描述符与标识符,文件描述符fd

    这里以问答的方式来讨论这个问题: 1. 文件描述符 fd 和文件指针 FILE *的关系? 文件描述符是什么?我们知道每一个进程都有一个自己的PCB(进程控制块),进程控制块的结构是: struct ...

  9. linux文件 i节点结构,Linux 文件描述符 文件表项 i节点结构

    Linux的VFS(虚拟文件系统)学习起来很痛苦,看源码不太明智,看完分析完就忘且太浪费时间,懂了后也无法应用在实际场合中.所以这里只是讨论下文件描述符,文件表项(file结构体)和inode,理清实 ...

最新文章

  1. ECLIPSE 如何导入文件?
  2. 学习笔记之xss原理篇
  3. 数据库acid实现原理(二)
  4. Google Chrome Source Code 源码下载
  5. iOS - PassData
  6. http://blog.chinaunix.net/uid-25082381-id-3242162.html
  7. 下载历史版本的 xCode
  8. leetcode 764. Largest Plus Sign | 764. 最大加号标志(Java)
  9. [RabbitMQ]消息应答概念_消息手动应答代码
  10. 16位并行加载寄存器设计
  11. 第十章练习题----2
  12. 本人服务器遭受黑客长期攻击,特把这几天做的一些有用的安全方面总结出来,以方便以后查阅
  13. opengl与Directx的区别
  14. 图形裁剪算法matlab,MATLAB裁剪图片
  15. python代码的层次结构_Python的object和type理解及主要对象层次结构
  16. 支持向量机(Support Vector Machine,SVM)—— 线性SVM
  17. 爬虫笔记——urllib实战之淘宝零食板块爬取
  18. WebRTC协议学习之一(WebRTC简介)
  19. vue使用高德地图关键字搜索功能的实例代码(踩坑经验)
  20. 如何避免过敏,哮喘和湿疹断奶宝宝正确

热门文章

  1. 限量放送,2018全球智能驾驶峰会「免费拿票攻略」接住了!
  2. android ffmpeg编译动态库,最简单的android studio调用ffmpeg动态库
  3. python网络编程需要学什么,python网络编程学习笔记(五):socket的一些补充 Python 网络编程需要学习哪些网络相关的知识...
  4. 接口安全怎么处理_压瓦机设备噪声大怎么处理及压瓦机的安全使用
  5. Android动态壁纸画布透明,Android 动态壁纸LayoutParams问题
  6. go 监测tcp 连接断开_优化ngrok的tcp连接
  7. 若依项目如何打war包后在tomcat中运行呢?
  8. 8.1 Ext JS应用测试概览
  9. windows下putty 连接linux远程管理
  10. css html 语法,CSS基础语法