LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 699|回复: 7

NMBCLUSTERS 是什么?

[复制链接]
发表于 2004-3-1 12:38:48 | 显示全部楼层 |阅读模式
我的服务器突然出现问题不能上网,我用的是-ddial方式拔号,,在出错的时候ppp.log日志中有这样一句:
feb 25 19;02:24 cqzd ppp[56]: Error: ip_Input: deflink: wrote 1496,got No buffer space available
而且屏幕出现:ALL mbufs exhausted, please see tuning(7)
后来我在handbook中查到以下这一段:
6.10.2 网络限制
NMBCLUSTERS 内核配置选项指出了系统可用的网络mbufs 的数量。一个具有大量负载的
服务器如果MBUFs 比较少,就会影响FreeBSD 的性能。每一个cluster 大概需要2K 的内存,
所以1024 个cluster 就需要保留2MB 的内存给网络缓存。如果你的服务器超过一个并发连
接,那每个连接需要吃掉一个16k 的接收缓存和一个16K 的发送缓存,你需要提供32MB 的
内存给网络缓存以确保web 服务器的稳定。一个最笨的计算方法是乘以2,所以
32MBx2=64MB/2K =32768。

我的服务器只是做了透明代理,及域名服务,应该不算忙。不过我的机器只有64M内存,而且划了32M给squid做了高速缓存,应该只剩下32M了,是不是因为这个原因。上面这一段在handbook的系统管理的配置与调整里面,刚好我的机器也出现了ALL mbufs exhausted这样的提示,会不会是因为这个引起的呢?不过我找不到这个NMBCLUSTERS,我在sysctl -a里没找到,内核里也没有这个选项,这个东西是什么?
 楼主| 发表于 2004-3-1 15:26:41 | 显示全部楼层
我终于找到这个了。
用sysctl -a | more
kern.ipc.nmbclusters:1024
我编辑/boot/loader.conf
添加一句:
kern.ipc.nmbcluster="4800"
4.9默认的这个值真的很小,只有1024。而我装的5.2.1默认安装的这个值却有4800.我已经将这个值改为了4800,不知道网络故障会不会排除,过两天就知道了。
发表于 2004-3-1 15:39:53 | 显示全部楼层
严重支持尘飞扬的探索和共享精神,大家应该向尘GG学习!!

我用的是4.7-RELEASE-p25
kern.ipc.nmbclusters: 4608(缺省值)
 楼主| 发表于 2004-3-2 15:58:55 | 显示全部楼层
4.7默认也有4608?我开始怀疑这个是不是系统默认值了,不知会不会跟内存有关系,我那台服务器的内存是64M。只有下次安装的时候查一下了,或者有没有朋友将你们的这个值和系统配置简单贴一下,看看到底有没有什么区别?我的网络到现在还没有出现问题,已经比以前坚持时间长了:)看来这个应该还是有影响的。
发表于 2004-3-2 18:39:33 | 显示全部楼层
网络选项NMBCLUSTERS定义了mbuf cluster的大小,默认大小为 256.如果是服务器,那么其值应该设置为如下才比较合适:
options                NMBCLUSTERS=4096                 #mbuf custers at 4096]#
#Misc .options
#
options CHILD_MAX=512                #maximum number of child processes
options OPEN_MAX=512                #maximum fds(breaks RPC svcs)
一般情况下,NMBCLUSTERS应该设置得大一些。这是因为假如浏览器连接中途中断,fd socket以及那个特殊连接将会以TIME_OUT的状态而结束,在这过程中此连接的mbufs并没被释放。另一个原因是,在服务器超时时,一些连接以FIN_WAIT_2状态永远结束,因为这种状态不在服务器上超时,并且浏览器也永远不会发送一个final FIN.
发表于 2004-3-2 18:52:51 | 显示全部楼层
在虚拟机里内存96MB,默认的值也是4608,系统FreeBSD 4.8
发表于 2004-3-2 18:58:50 | 显示全部楼层
kern.ipc.nmbclusters可以调整用来增加系统愿意申请的网络mbuf的数量。每

个cluster(簇)大概2K的内存,所以值1024代表保留2M内核内存作为网络缓冲区。

你可以简单的计算出需要多少。如果你有一个web服务器最多可以有1000个并发

连接,每个连接吃掉16K接收和发送缓冲区,你大概需要32MB的网络缓冲区来对

付它。一个比较粗糙的方法是乘以2,所以32MBx2 = 64MB/2K = 32768。所以这

个情况下你将需要设置nmbclusters到32768。我们建议为那些内存不多的机器

设置1024到4096而4096到32768为那些有很多内存的机器。无论如何如何你不能

设置一个很随意的值,这可能导致启动时崩溃。netstat(1)的-m选项可以用来查

看网络缓冲区的使用情况。老的FreeBSD系统没有这个sysctl,所以需要设置内核
配置选项NMBCLUSTERS。
 楼主| 发表于 2004-3-2 19:38:19 | 显示全部楼层
呵呵,又见freebird身影了,果然厉害,受益非浅:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表