FreeBSD性能FAQ总汇

1.

Q: FreeBSD 出现下列错误是怎么回事?

May 5 22:05:00 antarctica /kernel: ad1s1e: UDMA ICRC error writing fsbn 4159
of 2048-2063 (ad1s1 bn 4159; cn 0 tn 66 sn 1) retrying
May 5 22:05:00 antarctica /kernel: ad1s1e: UDMA ICRC error writing fsbn 4159
of 2048-2063 (ad1s1 bn 4159; cn 0 tn 66 sn 1) falling back to PIO mode

A: 这通常是因为使用了40线的IDE硬盘线,然而硬盘被设置成使用DMA方式,这种方式需
要80线硬盘线。也有可能是您的硬盘不支持DMA方式。

解决方法:
1. 换用一根80线的IDE硬盘线
2. 在BIOS或者FREEBSD中关闭对UDMA的支持
对于FreeBSD系统,将下列命令增加到/etc/rc.conf
/sbin/sysctl -w hw.atamodes=pio,pio,pio,pio
这可能会降低硬盘速度。

2.

Q: 出现下列告警是怎么回事?
/kernel: Limiting closed port RST response from 1883 to 200 packets per second

A: 这是由于某些主机正试图快速的访问你的主机上一些没有开放的端口,你的主机正在
回复RST报文。这是正常的反应。但是FreeBSD内核限制了每秒钟回复RST报文的数量,
以防止发生可能的DoS攻击。例如,如果攻击者通过伪造源IP来向你的未开端口发送大量
连接请求,就可能诱使你的主机向该主机发送RST报文。这可能导致受害主机所在网络的
带宽占用。
如果你不想看到上述信息,你可以通过打开黑洞模式来停止响应RST报文。这也可以减缓
远程攻击者对你的主机的扫描速度。
你可以使用如下命令来打开balckhole支持:
#sysctl -w net.inet.tcp.blackhole=2
#sysctl -w net.inet.udp.blackhole=1

也可以在/etc/sysctl.conf中增加下列选项:
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
使这种模式每次启动后都生效。

3.

Q: 出现下列告警是怎么回事?

“file: table is full”

A: 这可能是由于系统打开的文件描述符已经超过了内核限制的最大的文件数限制。
对于系统负载比较重的主机,可以增大最大文件数限制。
对于4.0以后的版本,可以直接使用sysctl动态修改:
#sysctl -w kern.maxfiles=65536
#sysctl -w kern.maxfilesperproc=65536

也可以在/etc/sysctl.conf中增加下列选项:
kern.maxfiles=65536
kern.maxfilesperproc=65536

4.
Q: 如何调整内核参数来改善在重负载下的性能?
A: 可以参考下列步骤进行:

1. 在/usr/src/sys/i386/conf/Myconf(Myconf是自己创建的配置文件)
中增加下列两行代码:
maxusers 512
options NMBCLUSTERS=65536

注:如果原来的Myconf中已经设置了maxusers,只要将原来的值修改为512即可。
2. 重新编译内核:
# config Myconf
# cd ../../complie/Myconf
# make depend
# make
# make install

3. 在/etc/sysctl.conf中增加下列代码:

kern.maxfiles=65536
kern.maxfilesperproc=65536
kern.ipc.nmbclusters=32768
vfs.vmiodirenable=1
kern.ipc.somaxconn=4096

4. 重新启动系统