freebsd sysctl详解与配置方法
kern.ipc.max_protohdr: 60
net.inet.udp.blackhole=1
kern.clockrate: { hz = 100, tick = 10000, profhz = 1024, stathz = 128 }
# sysctl -a | more
这是用来控制系统内部表格(internal system tables)大小的参数,它的值大约是您期望系统同一时间会上线使用的使用者数量。我们在核心设定档中有一个 maxusers 的选项,如果您使用的是 freebsd 4.5 以上的版本,建议您只要在核心设定档中将它 0 即可,系统会在一开机时自动依您的内存大小调整这个值。如果我们使用的是 freebsd 4.5 以后的版本,要调整这个值时,我们可以在 /boot/loader.conf 中加入该选项的设定,例如:
kern.ipc.maxsockets=”16424″
当我们要修改这个值是,必须在一开机就修改,所以只能在 /boot/loader.conf 中加入修改的设定,例如:net.inet.tcp.recvspace=32768
kern.ipc.max_hdr: 76
这个选项控制了 tcp 联机等候区最多可以等待的联机数量,其默认值为 128,不过这个值对于一台忙碌的服务器而言可能小了点。例如大型的网页服务器、邮件服务器,我们可以将它设为 1024。要注意的是在一些网络服务的程序中,如 apache 及 sendmail 也有自己的等待数量设定,我们可能也要在那些软件上做一些设定才会让 kern.ipc.somaxconn 发生作用。将这个选项的值调大一点还有一个好处,就是在面对 denial of service 的攻击时,有较好的防卫能力。 kern.securelevel: -1
9.2.12 kern.maxusers
kern.hostname: alexwang.com
net.inet.icmp.drop_redirect=1
kern.ipc.nmbclusters=16384
复制代码 代码示例:
9.2.3 kern.ipc.shm_use_phys
这是用来设定系统最大可以开启的 socket 数目。如果您的服务器会提供大量的 ftp 服务,而且常快速的传输一些小档案,您也许会发现常传输到一半就中断。因为 ftp 在传输档案时,每一个档案都必须开启一个 socket 来传输,但关闭 socket 需要一段时间,如果传输速度很快,而档案又多,则同一时间所开启的 socket 会超过原本系统所许可的值,这时我们就必须把这个值调大一点。除了 ftp 外,也许有其它网络程序也会有这种问题。
如果我们将传送或接收的暂存区设为大于 65535,除非我们的服务器本身及客户端所使用的操作系统支持 tcp 协议的 windows scaling extension (请参考 rfc 1323 文件)。freebsd 预设已支援 rfs1323 (即 sysctl 的 net.inet.tcp.rfc1323 选项)。
[email protected]:/usr/src/sys/i386/compile/alex
9.2.9 net.inet.tcp.delayed_ack
kern.ipc.nmbclusters="32768"
而有的可以让我们修改参数以调整系统运作的行为,例如网 络暂存内存的大小、最大的上线人数等等。
复制代码 代码示例:
kern.ipc.maxsockbuf=2097152kern.maxdsiz="536870912"
net.inet.ip.portrange.last: 5000
9.2.6 vfs.hirunningspace
kern.saved_ids: 0
net.inet.tcp.delayed_ack=0
这个选项预设为 1,也就是打开的状态。在打开时,在系统需要写入数据在硬盘或其它储存设备上时,它会等到收集了一个 cluster 单位的数据后再一次写入,否则会在一个暂存区空间有写入需求时就立即写到硬盘上。这个选项打开时,对于一个大档案写入速度非常有帮助。但如果您遇到有很多 行程延滞在等待写入动作时,您可能必须关闭这个功能。
首先,使用下列指令来查看目前所有的 sysctl 参数及其状况:
net.local.stream.recvspace=32768
kern.posix1version: 200112
这个值用来调整系统在开机后所要分配给网络 mbufs 的 cluster 数量,由于每个 cluster 大小为 2k,所以当这个值为 1024 时,也是会用到 2mb 的核心内存空间。我们可以简单的估计出大约需要的大小,例如,假设我们的网页同时约有 1000 个联机,而 tcp 传送及接收的暂存区大小都是 16k,则最糟的情况下,我们会需要 (16k+16k) * 1024,也就是 32mb 的空间,然而所需的 mbufs 大概是这个空间的二倍,也就是 64mb,所以所需的 cluster 数量为 64mb/2k,也就是 32768。对于内存有限的机器,建议值是 1024 到 4096 之间,而当拥有海量存储器空间时,我们可以将它设定为 4096 到 32768 之间。我们可以使用 netstat 这个指令并加上参数 -m 来查看目前所使用的 mbufs 数量。
kern.maxfiles: 4040
net.inet.tcp.tcbhashsize="2048"
9.2.1 kern.ipc.maxsockets
如:# sysctl net.inet.tcp.syncookies=1
net.inet.udp.maxdgram=57344
#kern.securelevel=0
仅说明一些影响较明显的设定。
一般的网络程序都会用到预设范围的 port,然而,这个预设范围只从 1024 到 5000,这对于一台忙碌的 ftp server 或 proxy server 可能会有不足的情形。所以我们可以手动调整一下 net.inet.ip.portrange.last 这个值,将它调为 10000、20000、甚至 40000 都是合理的。如果要在一开机就调整这个值,我们可以修改 /etc/sysctl.conf,并增加下列这一行:
net.inet.icmp.icmplim=100
这个选项预设被设为 1,也就是打开的状态。它被用来决定一个目录中的结构 (目录下的其它文件名称等等) 被快取在内存中的行为。一般的目录结构可能都不大,而这些目录结构会被快取在物理内存中。物理内存中所存放的目录结构快取有限,所以不管我们的物理内存有 多大,预设都只会快取一定大小的目录结构。如果我们将这个选项打开,系统将 buffer cache 放在虚拟内存的快取中,目录结构也就会被存放在虚拟内存中。这样的好处是所有的内存空间都可以被拿来做目录的快取,而缺点是最小用来存放目录结构的快取会 从 512 bytes 变成 4k。
这个是我在实际使用服务器中的参数,请在:/etc/sysctl.conf 加入参数
9.2.7 net.inet.tcp.sendspace 及 net.inet.tcp.recvspace
复制代码 代码示例:
在freebsd系统中,有的sysctl 参数只是用来回报目前的系统状况,例如回报目前已开机时间、所使用的操作系统版本、核心名称等等;
这个值一定要设定大于四,maxusers 的值决定了处理程序所容许的最大值,20+16*maxusers 就是你将得到的所容许处理程序。系统一开机就必须要有 18 个处理程序 (process),即便是简单的执行指令 man 又会产生 9 个 process,所以将这个值设为 64 应该是一个合理的数目。如果你的系统会出现 proc table full 的讯息的话,可以就把它设大一点,例如 128。除非您的系统会需要同时开启很多档案,否则请不要设定超过 256。
net.inet.tcp.always_keepalive=0
net.inet.ip.portrange.* 是用来控制 tcp 及 udp 所使用的 port 范围,这个范围被分成三个部份,低范围、预设范围、及高范围。让我们看一下目前各范围 port 的情形:
kern.ipc.shm_use_phys=1 然而,这个值必须在系统一开机就设定好,所以如果要修改这项设定,我们必须修改 /boot/loader.conf 才行。例如,我们要将它改成最多同时可以有 16424 个 socket,则必须在 /boot/loader.conf 中加入下列这一行:
kern.version: freebsd 5.2.1-release #0: sun apr 11 16:16:08 cst 2004
kern.maxproc: 2020
kern.ipc.somaxconn: 128
kern.ipc.maxsockets="4008"
net.inet.ip.portrange.hilast: 65535
net.inet.tcp.blackhole=2
kern.boottime: { sec = 1081672724, usec = 885137 } sun apr 11 16:38:44 2004
9.2.13 kern.ipc.nmbclusters
而这些可以调整的参数中必须在一开机系统执行其它程序前就设定好,有的可以在开机完后任意调整。
kern.ipc.sockbuf_waste_factor: 8
9.2.10 kern.ipc.somaxconn
kern.ipc.nsfbufs="2496"
kern.job_control: 1
tcp 协议有一个特性,就是当收到客户端的数据时,会传回一个 ack (acknowledgement) 的封包,以确认已收到数据。然而,我们也可以将 ack 封包和所要回传的资料一起送出。例如,当我使用 telnet 进入系统时,在输入指定时,当我们在键盘上敲打一个字符,系统会送回一个表示已接收到该字符的 ack 封包,并传回一个含有该字符的封包以在终端机上显示。当 net.inet.tcp.delayed_ack 打开时,系统会将 ack 和显示该字符的封包一传送,而不需分成二个封包。所以这个选项打开时,可以将封包数量减少一半,以加速网络传输。其它的网络服务,例如,www、 smtp、pop3 等也都具有这种特性。
kern.ipc.max_datalen: 132
kern.ngroups: 16
kern.ipc.maxsockbuf: 262144 这个选项控制了系统中支持最多开启的档案数量,这个值通常是几千个档,但对于一台忙碌的数据库系统或是会开启许多档案的服务器而言,我们可以将它调高为一、二万。 kern.ipc.nmbufs="65535"
还有要注意的是,除了这二个选项可以控制网络传输暂存区大小外,route 这个指令也可以用来依路由路径的不同指定暂存区大小。另外 ipfw 等防火墙软件也可以用来限制每个联机所能使用的网络频宽。
net.inet.ip.fastforwarding=1查看 # sysctl -a |grep syncookies 是否打开,开着可以防小规模的ddos
kern.maxfiles=65536
kern.ipc.somaxconn=8192
net.inet.icmp.log_redirect=0
kern.maxfilesperproc=32768
net.local.stream.sendspace=65535
net.inet.ip.portrange.last=40000
9.2.5 vfs.write_behind
kern.domainname:
9.2.2 net.inet.ip.portrange.*
kern.maxprocperuid: 1818
如果您使用 freebsd 4.4 以前的版本,则只能重新编译核心以改变这项设定。
kern.bootfile: /boot/kernel/kernel
9.2.11 kern.maxfiles
复制代码 代码示例:
并非所有的参数都可以使用 sysctl 进行调整,而且有的参数对于效能的影响并不大。
# ee /boot/loader.conf
kern.argmax: 65536
也可以使用 sysctl 显示单一的参数值,例如:
net.inet.tcp.sendspace=65536
kern.maxusers=256
kern.maxvnodes: 17812
kern.osreldate: 502010
kern.osrevision: 199506
kern.ipc.shm_use_phys 这个选项预设为 0 (关闭),我们可以将它设为 1 (打开)。如果我们将它设成 1,则所有 system v 共享内存 (share memory,一种程序间沟通的方式)部份都会被留在实体的内存 (physical memory) 中,而不会被放到硬盘上的 swap 空间。我们知道物理内存的存取速度比硬盘快许多,而当物理内存空间不足时,部份数据会被放到虚拟的内存上,从物理内存和虚拟内存之间移转的动作就叫作 swap。如果时常做 swap 的动作,则需要一直对硬盘作 i/o,速度会很慢。因此,如果我们有大量的程序 (数百个) 需要共同分享一个小的共享内存空间,或者是共享内存空间很大时,我们可以将这个值打开。
9.2.4 vfs.vmiodirenable
kern.maxfilesperproc: 3636
………略………
复制代码 代码示例:
net.inet.tcp.log_in_vain=0这二个选项分别控制了网络 tcp 联机所使用的传送及接收暂存区的大小。预设的传送暂存区为 32k,而接收暂存区为 64k。如果需要加速 tcp 的传输,可以将这二个值调大一点,但缺点是太大的值会造成系统核心占用太多的内存。如果我们的机器会同时服务数百或数千个网络联机,那么这二个选项最好维 持默认值,否则会造成系统核心内存不足。但如果我们使用的是 gigabite 的网络,将这二个值调大会有明显效能的提升。传送及接收的暂存区大小可以分开调整,例如,假设我们的系统主要做为网页服务器,我们可以将接收的暂存区调小 一点,并将传送的暂存区调大,如此一来,我们就可以避免占去太多的核心内存空间。
9.2.8 net.inet.tcp.always_keepalive
这个值决定了系统可以将多少数据放在写入储存设备的等候区。通常使用默认值即可,但当我们有多颗硬盘时,我们可以将它调大为 4mb 或 5mb。但必须注意的是,太大的值反而会造成效能低落。 kern.hostid: 0
net.inet.ip.portrange.lowlast: 600
# sysctl kern.ipc.maxsockbuf
net.inet.ip.portrange.lowfirst: 1023
# sysctl -a|grep portrange
net.inet.ip.redirect=0
kern.ipc.max_linkhdr: 16
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/jq/jc/6288.shtml
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
PHP识别相片是否是颠倒的
时间:2020-12-28
-
python编程有哪些ide
时间:2020-12-28
-
python开发工程师是做什么
时间:2020-12-28
-
php构造函数的作用
时间:2020-12-28
-
php怎么跟数据库连接
时间:2020-12-28
-
php实现顺序线性表
时间:2020-12-28
-
Python多重继承中的菱形继
时间:2020-12-28
-
php中break的作用
时间:2020-12-28
热门文章
-
php中常用的正则表达式使用方法
时间:2020-12-25
-
asp与php区别是什么?
时间:2020-12-27
-
PHP识别相片是否是颠倒的,并且重新摆正
时间:2020-12-28
-
Yii授权之基于角色的存取控制 (RBAC)
时间:2020-12-23
-
php的一键安装包有哪些 php环境搭建
时间:2020-12-19
-
php实现对图片对称加解密(适用身份证加
时间:2020-12-25
-
php如何理解面向对象
时间:2020-12-28
-
超详细分析php docker的原理及作用
时间:2020-12-27
-
Python控制Excel实现自动化办公
时间:2020-12-23
-
session的作用是什么
时间:2020-12-25
