Discuz! Board

 找回密码
 注册
搜索
查看: 522|回复: 3

【分享教学】使用 sysctl 调校你的OSX (之一)

[复制链接]
薛彩霞 发表于 2011-6-10 05:50:50 | 显示全部楼层 |阅读模式
我将网络上还有关于BSD系统调校的文章整理如下,如果文章内容有误,请不吝指正,
希望对您有帮助,并更了解OSX这个OS!(文字较多包涵)

sysctl 是一个系统运作中查看及调整系统参数的工具。有的 sysctl 参数只是用来回报目前的系统状况,例如回目前已开机时间、所使用的作业系统版本、核心名称等等;而有的可以让我们修改参数以调整系统运作的行为,例如网络暂存内存的大小、最大的上线人数等等。而这些可以调整的参数中必须在一开机系统执行其他程序前就设定好,有的可以在开机完後任意调整。
OSX在开机时期会执行一个/etc/rc 的文档,其中有一行:
if [ -f /etc/sysctl.conf ]; then
        awk '{ if (!index($1, "#") && index($1, "=")) print $1 }' < /etc/sysctl.conf | while read

当/etc/sysctl.conf 这个文档存在的话会读入 sysctl.conf 内容!
首先我们可以使用下列指令来查看目前所有的 sysctl 参数及其状况:
$ sysctl -a | more
按这里查看图片
查看个别 sysctl 参数:
$ sysctl net.inet.tcp.delayed_ack

或是与 buf 相关的所有参数:
$ sysctl -a | grep buf
按这里查看图片
那修改参数的方式有两种:
1.在/etc 目录下增加 sysctl.conf 文档,将需要修改的参数加入,当反悔时将sysctl.conf移除即可,(或在参数前加上#号),并不会对系统造成伤害!如我的sysctl.conf:
按这里查看图片   

2. 终端机模式,使用sudo -s , 直接修改系统值(不建议这样,除非你非常熟悉OSX),如:
    #sysctl -w net.inet.tcp.delayed_ack=0

将一些有用的参数整理如下:

(1).net.inet.tcp.delayed_ack
TCP 协定有一个特性,就是当收到客户端的资料时,会传回一个 ACK (acknowledgement) 的封包,以确认已收到资料。其他的网络服务,例如,WWW、SMTP、POP3 等也都具有这种特性。在高速网络和低负载的情况下会稍微提高效能;但在网络连接较差的情况下对方电脑得不到应答反而会降低效能。
net.inet.tcp.delayed_ack=0

default=
net.inet.tcp.delayed_ack:3

(2).kern.ipc.maxsockbuf
这是用来设定系统最大可以开启的 socket 数目。如果您的伺服器会提供大量的 FTP 服务,而且常快速的传输一些小文档,您也许会发现常传输到一半就中断。因为 FTP 在传输文档时,每一个文档都必须开启一个 socket 来传输,但关闭 socket 需要一段时间,如果传输速度很快,而文档又多,则同一时间所开启的 socket 会超过原本系统所许可的值,这时我们就必须把这个值调大一点。除了 FTP 外,也许有其他网络程序也会有这种问题。
kern.ipc.maxsockbuf=8000000

default=
kern.ipc.maxsockbuf:262144

(3).net.inet.tcp.sendspace 及 net.inet.tcp.recvspace
这二个选项分别控制了网络 TCP 连线所使用的传送及接收暂存区的大小。预设的传送暂存区为 32K,而接收暂存区为 64K。如果需要加速 TCP 的传输,可以将这二个值调大一点,但缺点是太大的值会造成系统核心占用太多的内存。如果我们的机器会同时服务数百或数千个网络连线,那麽这二个选项最好维持预设值,否则会造成系统核心内存不足。但如果我们使用的是 gigabite 的网络,将这二个值调大会有明显效能的提升。传送及接收的暂存区大小可以分开调整,例如,假设我们的系统主要做为网页伺服器,我们可以将接收的暂存区调小一点,并将传送的暂存区调大,如此一来,我们就可以避免占去太多的核心内存空间。

default=
net.inet.tcp.recvspace: 32768
net.inet.tcp.sendspace: 32768
参考:
apple.com/support/downloads/broadbandtuner10.

和上面的 kern.ipc.maxsockbuf 搭配,可以增加网络传输的速度:

kern.ipc.maxsockbuf=8000000
net.inet.tcp.sendspace=65536
net.inet.tcp.recvspace=65536

(4).kern.maxproc 及 kern.maxprocperuid
在跑 bittorrent 碰到 'Too many open files' 这个讯息,就将修改为:
允许系统执行最多的行程(processes)
kern.maxproc=2048
允许使用者执行最多的行程(processes)
kern.maxprocperuid=500

default=
kern.maxproc = 532
kern.maxprocperuid = 100


参考:FreeBSD 6.0架设管理与应用
下一篇:sysctl调校 (之二)
寺院 发表于 2011-6-10 09:06:15 | 显示全部楼层
不错,有找到窍门了喔, 在linux(suse)上利用sysctl来调校,可得到不错的的结果.
尤迪安 发表于 2011-6-10 12:21:40 | 显示全部楼层
感谢大大的分享
收获良多,要学习的还很多啊
要努力
李觉得 发表于 2011-6-10 15:37:05 | 显示全部楼层
感谢大大的分享
读取这篇文章
让小弟获得许多
有你的教学,使劣笨的人踏出第一步
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|苹果学院

GMT+8, 2019-8-23 17:38 , Processed in 0.073796 second(s), 7 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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