免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2200 | 回复: 6
打印 上一主题 下一主题

[网络管理] squid代理2G内存却很快被用尽 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-25 13:04 |只看该作者 |倒序浏览
哪位知道内存都被用哪了?
几乎几秒钟就被消耗掉1M

论坛徽章:
0
2 [报告]
发表于 2003-03-25 13:21 |只看该作者

squid代理2G内存却很快被用尽

squid.conf 里有限制的啊!

论坛徽章:
5
荣誉会员
日期:2011-11-23 16:44:17CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-09-18 15:15:45未羊
日期:2014-02-25 14:37:19射手座
日期:2014-12-26 22:55:37
3 [报告]
发表于 2003-03-25 16:54 |只看该作者

squid代理2G内存却很快被用尽

原帖由 "xzyang" 发表:
哪位知道内存都被用哪了?
几乎几秒钟就被消耗掉1M

那么紧张干什么,当CACHE了,怎么都不习惯LINUX这种方式呢,AIX这样用内存啊。反而SOLARIS上面FREE那么多搞得我很不爽。

论坛徽章:
0
4 [报告]
发表于 2003-03-25 21:32 |只看该作者

squid代理2G内存却很快被用尽

紧张倒沒有,机器运行其他程序也正常。只是感觉linux内存用过后好像不释放。例如用文本编辑器打开一个100M左右的日志文件,用去内存300多兆,文件关闭后,占用内存并不减少。不知是不是要进行什么优化配置?

论坛徽章:
0
5 [报告]
发表于 2003-03-26 08:35 |只看该作者

squid代理2G内存却很快被用尽

 在Internet上的应用几乎都是事件驱动式的(event driven)。在Unix上,有两个基本的函数用来检测来自于网络的事件,一个是select(),另外一个是poll()。无一例外,Squid使用poll()函数作为它的事件检测和分派的核心。下面是poll()函数的接口原型:

    int poll(struct pollfd *fds, unsigned int nfds, int timeout);

  其中,fds是需要检测的文件描述符集合,nfds是这个集合的大小。

  当nfds比较小时,poll()工作得非常好。但是在实际中我们发现,当nfds比较大时,poll()本身的操作就占用了CPU的绝大部分时间,换句话说,就是poll()的伸缩性(scalablity)比较弱。那么,问题出在哪儿呢?

  问题就出在poll()接口的定义和实现上。对于每次poll()调用,poll()函数都要求将整个文件描述符列表传递给它,由于poll()是一个系统调用,因此,系统对于每次poll()调用,都必须穿透user/kernel边界拷贝数据,同时在kernel内部还有一次malloc()调用。当nfds比较小时,这种开销不会导致多大的性能问题,但是如果nfs大到成千上万时,这种开销就非常了得!实际上,在一个中等规模的环境中,比如高校,系统同时保持1万多条连接是比较常见的事情(如拥有5000台以上计算机的高效,最高峰达到了20000条以上的连接,平均可以达到13000条左右的连接)。另外,从应用程序的角度看,每次当poll()调用返回后,都必须遍历整个文件描述符列表,这是一个O(n)复杂度的操作,因此伸缩性很差。同样的,这种遍历操作在kernel内部也必须做一遍。

  总而言之,poll()低效的主要原因是,poll()做了太多的无效操作,因此浪费了大量的CPU时间:

  (1)无效的user->;kernel方向的数据拷贝。在一个实际的应用中,很多描述符都会存在于一段时间,因此每次对拷贝所要检测的所有文件描述符列表是一个无效的操作,因为两次连续的poll()调用中,必定有很多文件描述符是相同的;

  (2)无效的kernel->;user方向的数据拷贝。在实际中,尽管系统保持了很多文件描述符(套接字),但是在每个时刻,真正可readable或writable的文件描述符并不多,因此,将所有的文件描述符都拷贝给user是无效的,在一个保持了10000条连接的系统中,可能只有1000条连接上可readable或writable,因此有90%的数据拷贝是无效的。

  (3)无效的应用层遍历。根据(2),既然10000条连接中只有1000条连接是有事件的(readable或writable),那么90%的遍历就是无效的。

  影响cache系统性能的最主要两个因素是network I/O和disk I/O。由于cache存在大量的数据读写操作,因此disk I/O的性能高低会极大地影响cache的整体性能。Squid为了解决这一点,在操作系统提供的文件系统的基础上实现了一个所谓的"cache文件系统"。但是无论如何,由于这个"cache文件系统"是建立在通用文件系统的基础之上,所以它最多只能利用内存来减少disk I/O次数以提高系统性能。由于通用文件系统并没有利用多个磁盘I/O的独立性,因此当系统挂接了多个磁盘时,这种方式并不能有效利用多个磁盘同时I/O的特点,所以它并不能有效提高disk I/O。

  以上两点,决定了Squid具有很差的伸缩性,也就是说,即使你硬件配置再高,它也不能有效的提升性能!

论坛徽章:
0
6 [报告]
发表于 2003-03-26 11:16 |只看该作者

squid代理2G内存却很快被用尽

上面的观点带有严重的偏向性,squid如此流行是由它自身的性能决定的.

论坛徽章:
5
荣誉会员
日期:2011-11-23 16:44:17CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-09-18 15:15:45未羊
日期:2014-02-25 14:37:19射手座
日期:2014-12-26 22:55:37
7 [报告]
发表于 2003-03-26 12:41 |只看该作者

squid代理2G内存却很快被用尽

[quote]原帖由 "shanyou"] 在Internet上的应用几乎都是事件驱动式的(event driven)。在Unix上,有两个基本的函数用来检测来自于网络的事件,一个是select(),另外一个是poll()。无一例外,Squid使用poll()函数作为它的事件检测和分派的核心。..........[/quote 发表:

有开始吹了,打算吹Netshine ICS 了吧,堪称能支持40Gb/s的流量的东西。不过别人用LINUX哦,没有KEVENT你怎么办。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP