登录 |
  • 注册
  • B tree

    2009年06月22日 下午 42:19 | 作者:pangyt

    [转]B树:

    http://blog.csdn.net/manesking/archive/2007/02/09/1505979.aspx

    PG调优

    2009年06月21日 上午 31:15 | 作者:pangyt

    参考:http://www.varlena.com/GeneralBits/Tidbits/perf.html

    http://www.varlena.com/GeneralBits/Tidbits/annotated_conf_e.html

    http://linuxfinances.info/info/postgresql.html

    设置这些选项的一个方法是编辑文件 postgresql.conf
    每次postmaster收到SIGHUP(最简单的发送方法就是使用 pg_ctl reload),信号后都会重新读取这个配置文件。 postmaster 同时也将这个信号广播给所有正在运行的服务器进程,这样现有会话也能得到新的缺省。 另外,你可以只向一个服务器进程直接发送信号。 有些参数只能在服务器启动的时候设置;对这些条目中的任何进行修改都将忽略,直到下次服务器重启。
    第二种设置这些配置参数的方法是把它们作为命令行参数传递给 postmaster, 比如:postmaster -c log_connections=yes -c log_destination=’syslog’.命令行选项覆盖任何与 postgresql.conf 冲突的选项,请注意,这意味着你不能通过编辑 postgresql.conf, 在运行时改变其数值,因此,虽然命令行方法很方便,但你在以后可能会付出灵活性的代价。
    有时候,给某一个特定会话一个命令行参数也是很有用的。 可以在客户端使用环境变量 PGOPTIONS 来实现这个目的:
    env PGOPTIONS=’-c geqo=off’ psql

    数据库导出:(-f可以换成>)
    sudo -u postgres /usr/local/pgsql/bin/pg_dump -d URT1 -f /tmp/dump.sql
    数据库导入:(-f可以换成<)
    sudo -u postgres /usr/local/pgsql/bin/pgsql -d URT1 -f /tmp/dump.sql
    导出指定的字段:
    select * into test_tbl from some_tbl where ****;
    pg_dump -d db_name -t test_tbl > /tmp/test.sql
    导入则类似。

    环境变量设置:
    vi .bash_profile
    LD_LIBRARY_PATH=/usr/local/pgsql/lib
    export LD_LIBRARY_PATH
    PATH=$PATH:$HOME/bin:/usr/local/pgsql/bin
    export PATH
    MANPATH=/usr/local/pgsql/man:$MANPATH
    export MANPATH

    应用程序
    initdb — 创建一个新的 PostgreSQL数据库集群
    initlocation — 创建一个从属的 PostgreSQL数据库存储区
    ipcclean — 从退出的PostgreSQL服务器中删除共享内存和信号灯
    pg_ctl — 启动,停止和重起 PostgreSQL
    pg_controldata — 显示服务器范围哪的空值信息
    pg_resetxlog — 重置预写日志以及 pg_control 内容
    postgres — 意单用户模式运行一个 PostgreSQL服务器
    postmaster — PostgreSQL多用户数据库服务器

    clusterdb — 对一个PostgreSQL数据库进行建簇
    createdb — 创建一个新的 PostgreSQL 数据库
    createlang — 定义一种新的 PostgreSQL 过程语言.
    createuser — 定义一个新的 PostgreSQL 用户帐户
    dropdb — 删除一个现有 PostgreSQL 数据库
    droplang — 删除一种 PostgreSQL 过程语言
    dropuser — 删除一个 PostgreSQL 用户帐户
    ecpg — 嵌入的 SQL C 预处理器
    pg_config — 检索已安装版本的 PostgreSQL 的信息
    pg_dump — 将一个PostgreSQL数据库抽出到一个脚本文件 或者其它归档文件中
    pg_dumpall — 抽出一个 PostgreSQL 数据库集群到脚本文件中。
    pg_restore — 从一个由 pg_dump 创建的备份文件中恢复 PostgreSQL 数据库.
    psql — PostgreSQL 交互终端
    pgtclsh — PostgreSQL TCL shell 客户端
    pgtksh — PostgreSQL Tcl/Tk shell 客户端.
    vacuumdb — 收集垃圾并且分析一个PostgreSQL 数据库

    监控数据库活动
    select now() as Time,datname as Database ,xact_commit as commit,blks_read as read,blks_hit as hit,tup_returned as return,tup_fetched as fetch,tup_inserted as insert,tup_updated as update,tup_deleted as delete from pg_stat_database;
    pg_stat_activity 每个服务器进程一行,显示进程ID,数据库,用户,和当前查询. 只有超级用户看得到当前查询字段;对于其它用户,它显示为 NULL. (请注意因为收集器的报告延迟,当前查询只是对长时间运行的查询 及时更新.)
    pg_stat_database 每个数据库一行,显示激活的后端的数量,提交的事务总数以及在该 数据库中回卷数目的总数,读取的磁盘块的总数,以及缓冲区命中的总数( 也就是中所需要的块已经在缓冲区中找到,从而避免了读取块的动作).

    pg_stat_get_tuples_returned(oid) bigint 如果参数是一个表,那么就是顺序扫描读取的元组数目, 如果是一个索引,那么就是索引元组的数目
    pg_stat_get_tuples_fetched(oid) bigint 如果参数是一个表,那么就是顺序扫描抓取的有效(未过期)的表元组数目, 如果是一个索引,那么就是用这个索引抓取的有效表元组数目
    pg_stat_get_tuples_inserted(oid) bigint 插入表中的元组数量
    pg_stat_get_tuples_updated(oid) bigint 在表中已更新的元组数量
    pg_stat_get_tuples_deleted(oid) bigint 从表中删除的元组数量
    pg_stat_get_blocks_fetched(oid) bigint 表或者索引的磁盘块抓取请求的数量
    pg_stat_get_blocks_hit(oid) bigint 在缓冲区中找到的表或者索引的磁盘块请求数目

    sysctl.conf

    2009年06月19日 下午 48:16 | 作者:pangyt

    {转}sysctl 是一个用来在系统运行中查看及调整系统参数的工具。有的 sysctl 参数只是用来报告目前的系统状况,例如报告目前已开机时间、所使用的操作系统版本、核心名称等等;而有的可以让我们修改参数以调整系统运作的行为,例如网络暂存内存的大小、最大的上线人数等等。sysctl.conf就是sysctl的配置文件,而这些可以调整的参数中有的必须在一开机系统执行其它程序前就设定好,有的可以在开机完后任意调整。同大多数配置文件一样,我们可以对sysctl.conf进行配置来优化系统的性能.

    网上关于sysctl.conf的优化方案有各种版本,大多都是抄来抄去的,让新人看了很迷茫。为解决此问题,经过两天的整理,查了N多资料,将大家常用的总结如下,很多默认的不需要修改的暂未涉及,今后将逐步把所有的项目都有个翻译、讲解、修改建议,如有修改,将以此文为准,其他地方的内容,本人不负责更新。因此转载请注明链接地址:http://www.bsdlover.cn/securit…如果您有补充或修订意见,请于本文后评论或邮件联系cujxtm@gmail.com,万分感谢!

    ###################

    所有rfc相关的选项都是默认启用的,因此网上的那些还自己写rfc支持的都可以扔掉了

    ###############################

    net.inet.ip.sourceroute=0

    net.inet.ip.accept_sourceroute=0

    #############################

    通过源路由,攻击者可以尝试到达内部IP地址 –包括RFC1918中的地址,所以不接受源路由信息包可以防止你的内部网络被探测。

    #################################

    net.inet.tcp.drop_synfin=1

    ###################################

    安全参数,编译内核的时候加了options TCP_DROP_SYNFIN才可以用,可以阻止某些OS探测。

    ##################################

    kern.maxvnodes=8446

    vnode 是对文件或目录的一种内部表达。因此,增加可以被操作系统利用的vnode数量将降低磁盘的I/O。

    一般而言,这是由操作系统自行完成的,也不需要加以修改。但在某些时候磁盘 I/O 会成为瓶颈,

    而系统的 vnode 不足,则这一配置应被增加。此时需要考虑是非活跃和空闲内存的数量。

    要查看当前在用的 vnode 数量: sysctl vfs.numvnodes

    vfs.numvnodes: 91349

    要查看最大可用的 vnode 数量: sysctl kern.maxvnodes

    kern.maxvnodes: 100000

    如果当前的 vnode 用量接近最大值,则将 kern.maxvnodes 值增大 1,000 可能是个好主意。

    您应继续查看 vfs.numvnodes 的数值, 如果它再次攀升到接近最大值的程度,仍需继续提高 kern.maxvnodes。 在 top(1) 中显示的内存用量应有显著变化,更多内存会处于活跃 (active) 状态。

    ####################################

    kern.maxproc: 964

    ###################…

    Maximum number of processes

    ####################################

    kern.maxprocperuid: 867

    Maximum processes allowed per userid

    ####################################

    因为我的maxusers设置的是256,20+16*maxusers=4116。

    maxprocperuid至少要比maxproc少1,因为init(8) 这个系统程序绝对要保持在运作状态。我给它设置的2068。

    kern.maxfiles: 1928

    系统中支持最多同时开启的文件数量,如果你在运行数据库或大的很吃描述符的进程,那么应该设置在20000以上,

    比如kde这样的桌面环境,它同时要用的文件非常多。一般推荐设置为32768或者65536。

    ####################################

    kern.argmax: 262144

    maximum number of bytes (or characters) in an argument list.

    命令行下最多支持的参数,比如你在用find命令来批量删除一些文件的时候

    find . -name “*.old” -delete,如果文件数超过了这个数字,那么会提示你数字太多的。

    可以利用find . -name “*.old” -ok rm {} \;来删除。

    默认的参数已经足够多了,因此不建议再做修改。

    ####################################

    kern.securelevel: -1

    -1:这是系统默认级别,没有提供任何内核的保护错误;

    0:基本上作用不多,当你的系统刚启动就是0级别的,当进入多用户模式的时候就自动变成1级了。

    1:在这个级别上,有如下几个限制:

    a. 不能通过kldload或者kldunload加载或者卸载可加载内核模块;

    b. 应用程序不能通过/dev/mem或者/dev/kmem直接写内存;

    c. 不能直接往已经装在(mounted)的磁盘写东西,也就是不能格式化磁盘,但是可以通过标准的内核接口执行写操作;

    d. 不能启动X-windows,同时不能使用chflags来修改文件属性;

    2:在 1 级别的基础上还不能写没装载的磁盘,而且不能在1秒之内制造多次警告,这个是防止DoS控制台的;

    3:在 2 级别的级别上不允许修改IPFW防火墙的规则。

    如果你已经装了防火墙,并且把规则设好了,不轻易改动,那么建议使用3级别,如果你没有装防火墙,而且还准备装防火墙的话,不建议使用。

    我们这里推荐使用 2 级别,能够避免比较多对内核攻击。

    ####################################

    kern.maxfilesperproc: 1735

    每个进程能够同时打开的最大文件数量,网上很多资料写的是32768,除非用异步I/O或大量线程,打开这么多的文件恐怕是不太正常的。我个人建议不做修改,保留默认。

    ####################################

    kern.ipc.maxsockbuf: 262144

    最大的套接字缓冲区,网上有建议设置为2097152(2M)、8388608(8M)的。

    我个人倒是建议不做修改,保持默认的256K即可,缓冲区大了可能造成碎片、阻塞或者丢包。

    ####################################

    kern.ipc.somaxconn: 128

    最大的等待连接完成的套接字队列大小,即并发连接数。

    高负载服务器和受到Dos攻击的系统也许会因为这个队列被塞满而不能提供正常服务。

    默认为128,推荐在1024-4096之间,根据机器和实际情况需要改动,数字越大占用内存也越大。

    ####################################

    kern.ipc.nmbclusters: 4800

    这个值用来调整系统在开机后所要分配给网络 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 数量。要修改这个值必须在一开机就修改,所以只能在 /boot/loader.conf 中加入修改的设定

    kern.ipc.nmbclusters=32768

    ####################################

    kern.ipc.shmmax: 33554432

    # 线程可使用的最大共享内存.如果这些过小的话,有些大型的软件将无法启动

    安装xine和mplayer提示的设置为67108864,即64M,如果内存多的话,可以设置为134217728,即128M

    ####################################

    kern.ipc.shmall: 8192

    # 最大线程数量 .如果这些过小的话,有些大型的软件将无法启动

    安装xine和mplayer提示的设置为32768

    ####################################

    kern.ipc.shm_use_phys: 0

    如果我们将它设成 1,则所有 System V 共享内存 (share memory,一种程序间沟通的方式)部份都会被留在实体的内存 (physical memory) 中,

    而不会被放到硬盘上的 swap 空间。我们知道物理内存的存取速度比硬盘快许多,而当物理内存空间不足时,

    部份数据会被放到虚拟的内存上,从物理内存和虚拟内存之间移转的动作就叫作 swap。如果时常做 swap 的动作,

    则需要一直对硬盘作 I/O,速度会很慢。因此,如果我们有大量的程序 (数百个) 需要共同分享一个小的共享内存空间,

    或者是共享内存空间很大时,我们可以将这个值打开。这一项,我个人建议不做修改,除非你的内存非常大。

    ####################################

    kern.ipc.shm_allow_removed: 0

    共享内存是否允许移除?这项似乎是在fb下装vmware需要设置为1的,否则会有加载SVGA出错的提示

    作为服务器,这项不动也罢。

    kern.ipc.numopensockets: 12
    已经开启的socket数目,可以在最繁忙的时候看看它是多少,然后就可以知道maxsockets应该设置成多少了。
    ####################################
    kern.ipc.maxsockets: 1928
    这是用来设定系统最大可以开启的 socket 数目。如果您的服务器会提供大量的 FTP 服务,
    而且常快速的传输一些小档案,您也许会发现常传输到一半就中断。因为 FTP 在传输档案时,
    每一个档案都必须开启一个 socket 来传输,但关闭 socket 需要一段时间,如果传输速度很快,
    而档案又多,则同一时间所开启的 socket 会超过原本系统所许可的值,这时我们就必须把这个值调大一点。
    除了 FTP 外,也许有其它网络程序也会有这种问题。
    然而,这个值必须在系统一开机就设定好,所以如果要修改这项设定,我们必须修改 /boot/loader.conf 才行
    kern.ipc.maxsockets=”16424″
    ####################################
    kern.ipc.nsfbufs: 1456
    经常使用 sendfile(2) 系统调用的繁忙的服务器,
    有必要通过 NSFBUFS 内核选项或者在 /boot/loader.conf (查看 loader(8) 以获得更多细节) 中设置它的值来调节 sendfile(2) 缓存数量。
    这个参数需要调节的普通原因是在进程中看到 sfbufa 状态。sysctl kern.ipc.nsfbufs 变量在内核配置变量中是只读的。
    这个参数是由 kern.maxusers 决定的,然而它可能有必要因此而调整。
    在/boot/loader.conf里加入
    kern.ipc.nsfbufs=”2496″
    ####################################
    kern.maxusers: 59
    maxusers 的值决定了处理程序所容许的最大值,20+16*maxusers 就是你将得到的所容许处理程序。系统一开机就必须要有 18 个处理程序 (process),即便是简单的执行指令 man 又会产生 9 个 process,所以将这个值设为 64 应该是一个合理的数目。如果你的系统会出现 proc table full 的讯息的话,可以就把它设大一点,例如 128。除非您的系统会需要同时开启很多档案,否则请不要设定超过 256。可以在 /boot/loader.conf 中加入该选项的设定,kern.maxusers=256
    ####################################
    kern.coredump: 1
    如果设置为0,则程序异常退出时不会生成core文件,作为服务器,不建议这样。
    ####################################
    kern.corefile: %N.core
    可设置为kern.corefile=”/data/coredump/%U-%P-%N.core”,其中 %U是UID,%P是进程ID,%N是进程名,当然/data/coredump必须是一个实际存在的目录
    ####################################
    vm.swap_idle_enabled: 0
    vm.swap_idle_threshold1: 2
    vm.swap_idle_threshold2: 10
    #########################
    在有很多用户进入、离开系统和有很多空闲进程的大的多用户系统中很有用。可以让进程更快地进入内存,但它会吃掉更多的交换和磁盘带宽。
    系统默认的页面调度算法已经很好了,最好不要更改。
    ########################
    vfs.ufs.dirhash_maxmem: 2097152
    #########################
    默认的dirhash最大内存,默认2M. 增加它有助于改善单目录超过100K个文件时的反复读目录时的性能, 建议修改为33554432(32M)
    #############################
    vfs.vmiodirenable: 1
    #################
    这个变量控制目录是否被系统缓存。大多数目录是小的,在系统中只使用单个片断(典型的是1K)并且在缓存中使用的更小 (典型的是512字节)。当这个变量设置为关闭 (0) 时,缓存器仅仅缓存固定数量的目录,即使您有很大的内存。而将其开启 (设置为1) 时,则允许缓存器用 VM 页面缓存来缓存这些目录,让所有可用内存来缓存目录。不利的是最小的用来缓存目录的核心内存是大于 512 字节的物理页面大小(通常是 4k)。我们建议如果您在运行任何操作大量文件的程序时保持这个选项打开的默认值。这些服务包括 web 缓存,大容量邮件系统和新闻系统。尽管可能会浪费一些内存,但打开这个选项通常不会降低性能。但还是应该检验一下。
    ####################
    vfs.hirunningspace: 1048576
    这个值决定了系统可以将多少数据放在写入储存设备的等候区。通常使用默认值即可,但当我们有多颗硬盘时,我们可以将它调大为 4MB 或 5MB。注意这个设置成很高的值(超过缓存器的写极限)会导致坏的性能。不要盲目的把它设置太高!高的数值会导致同时发生的读操作的迟延。
    #############################
    vfs.write_behind: 1
    这个选项预设为 1,也就是打开的状态。在打开时,在系统需要写入数据在硬盘或其它储存设备上时,它会等到收集了一个 cluster 单位的数据后再一次写入,否则会在一个暂存区空间有写入需求时就立即写到硬盘上。这个选项打开时,对于一个大的连续的文件写入速度非常有帮助。但如果您遇到有很多行程延滞在等待写入动作时,您可能必须关闭这个功能。
    ############################
    net.local.stream.sendspace: 8192
    本地套接字连接的数据发送空间 建议设置为65536
    ###################################
    net.local.stream.recvspace: 8192
    本地套接字连接的数据接收空间 建议设置为65536
    ###################################
    net.inet.ip.portrange.lowfirst: 1023
    net.inet.ip.portrange.lowlast: 600
    net.inet.ip.portrange.first: 49152
    net.inet.ip.portrange.last: 65535
    net.inet.ip.portrange.hifirst: 49152
    net.inet.ip.portrange.hilast: 65535
    ###################
    以上六项是用来控制TCP及UDP所使用的port范围,这个范围被分成三个部份,低范围、预设范围、及高范围。这些是你的服务器主动发起连接时的临时端口的范围,预设的已经1万多了,一般的应用就足够了。如果是比较忙碌的FTP server,一般也不会同时提供给1万多人访问的,当然如果很不幸,你的服务器就要提供很多,那么可以修改first的值,比如直接用1024开始
    #########################
    net.inet.ip.redirect: 1
    设置为0,屏蔽ip重定向功能
    ###########################
    net.inet.ip.rtexpire: 3600
    net.inet.ip.rtminexpire: 10
    很多apache产生的CLOSE_WAIT状态,这种状态是等待客户端关闭,但是客户端那边并没有正常的关闭,于是留下很多这样的东东。建议都修改为2
    #########################
    net.inet.ip.intr_queue_maxlen: 50
    Maximum size of the IP input queue,如果下面的net.inet.ip.intr_queue_drops一直在增加,那就说明你的队列空间不足了,那么可以考虑增加该值。
    ##########################
    net.inet.ip.intr_queue_drops: 0
    Number of packets dropped from the IP input queue,如果你sysctl它一直在增加,那么增加net.inet.ip.intr_queue_maxlen的值。
    #######################
    net.inet.ip.fastforwarding: 0
    如果打开的话,每个目标地址一次转发成功以后它的数据都将被记录进路由表和arp数据表,节约路由的计算时间,但会需要大量的内核内存空间来保存路由表。如果内存够大,打开吧,呵呵
    #############################
    net.inet.ip.random_id: 0
    默认情况下,ip包的id号是连续的,而这些可能会被攻击者利用,比如可以知道你nat后面带了多少主机。如果设置成1,则这个id号是随机的,嘿嘿。
    #####################
    net.inet.icmp.maskrepl: 0
    防止广播风暴,关闭其他广播探测的响应。默认即是,无须修改。
    ###############################
    net.inet.icmp.icmplim: 200
    限制系统发送ICMP速率,改为100吧,或者保留也可,并不会给系统带来太大的压力。
    ###########################
    net.inet.icmp.icmplim_output: 1
    如果设置成0,就不会看到提示说Limiting icmp unreach response from 214 to 200 packets per second 等等了.不过禁止输出容易让我们忽视攻击的存在。这个自己看着办吧。
    ######################################
    net.inet.icmp.drop_redirect: 0
    net.inet.icmp.log_redirect: 0
    设置为1,屏蔽ICMP重定向功能
    ###################################
    net.inet.icmp.bmcastecho: 0
    防止广播风暴,关闭广播ECHO响应,默认即是,无须修改。
    ###############################
    net.inet.tcp.mssdflt: 512
    net.inet.tcp.minmss: 216
    ###############################
    数据包数据段最小值,以上两个选项最好不动!或者只修改mssdflt为1460,minmss不动。原因详见http://www.bsdlover.cn/security/2007/1211/article_4.html
    #############################
    net.inet.tcp.keepidle: 7200000
    TCP的套接字的空闲时间,默认时间太长,可以改为600000(10分钟)。
    ##########################
    net.inet.tcp.sendspace: 32768
    最大的待发送TCP数据缓冲区空间,应用程序将数据放到这里就认为发送成功了,系统TCP堆栈保证数据的正常发送。
    ####################################
    net.inet.tcp.recvspace: 65536
    最大的接受TCP缓冲区空间,系统从这里将数据分发给不同的套接字,增大该空间可提高系统瞬间接受数据的能力以提高性能。
    ###################################
    这二个选项分别控制了网络TCP联机所使用的传送及接收暂存区的大小。预设的传送暂存区为 32K,而接收暂存区为 64K。如果需要加速 TCP 的传输,可以将这二个值调大一点,但缺点是太大的值会造成系统核心占用太多的内存。如果我们的机器会同时服务数百或数千个网络联机,那么这二个选项最好维持默认值,否则会造成系统核心内存不足。但如果我们使用的是 gigabite 的网络,将这二个值调大会有明显效能的提升。传送及接收的暂存区大小可以分开调整,
    例如,假设我们的系统主要做为网页服务器,我们可以将接收的暂存区调小一点,并将传送的暂存区调大,如此一来,我们就可以避免占去太多的核心内存空间。
    ###################################
    net.inet.udp.maxdgram: 9216
    最大的发送UDP数据缓冲区大小,网上的资料大多都是65536,我个人认为没多大必要,如果要调整,可以试试24576。
    ##############################
    net.inet.udp.recvspace: 42080
    最大的接受UDP缓冲区大小,网上的资料大多都是65536,我个人认为没多大必要,如果要调整,可以试试49152。
    #######################
    以上四项配置通常不会导致问题,一般说来网络流量是不对称的,因此应该根据实际情况调整,并观察其效果。如果我们将传送或接收的暂存区设为大于 65535,除非服务器本身及客户端所使用的操作系统都支持 TCP 协议的 windows scaling extension (请参考 RFC 1323 文件)。FreeBSD默认已支持 rfs1323 (即 sysctl 的 net.inet.tcp.rfc1323 选项)。
    ###################################################
    net.inet.tcp.log_in_vain: 0
    记录下任何TCP连接,这个一般情况下不应该更改。
    ####################
    net.inet.tcp.blackhole: 0
    建议设置为2,接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包
    #####################################
    net.inet.tcp.delayed_ack: 1
    当一台计算机发起TCP连接请求时,系统会回应ACK应答数据包。该选项设置是否延迟ACK应答数据包,把它和包含数据的数据包一起发送。在高速网络和低负载的情况下会略微提高性能,但在网络连接较差的时候,对方计算机得不到应答会持续发起连接请求,反而会让网络更加拥堵,降低性能。因此这个值我建议您看情况而定,如果您的网速不是问题,可以将封包数量减少一半 .如果网络不是特别好,那么就设置为0,有请求就先回应,这样其实浪费的网通、电信的带宽速率而不是你的处理时间:)
    ############################
    net.inet.tcp.inflight.enable: 1
    net.inet.tcp.inflight.debug: 0
    net.inet.tcp.inflight.rttthresh: 10
    net.inet.tcp.inflight.min: 6144
    net.inet.tcp.inflight.max: 1073725440
    net.inet.tcp.inflight.stab: 20
    限制 TCP 带宽延迟积和 NetBSD 的 TCP/Vegas 类似。它可以通过将 sysctl变量net.inet.tcp.inflight.enable设置成1来启用。系统将尝试计算每一个连接的带宽延迟积,并将排队的数据量限制在恰好能保持最优吞吐量的水平上。这一特性在您的服务器同时向使用普通调制解调器,千兆以太网,乃至更高速度的光与网络连接 (或其他带宽延迟积很大的连接) 的时候尤为重要,特别是当您同时使用滑动窗缩放,或使用了大的发送窗口的时候。如果启用了这个选项,您还应该把 net.inet.tcp.inflight.debug 设置为 0 (禁用调试),对于生产环境而言, 将 net.inet.tcp.inflight.min 设置成至少 6144 会很有好处。然而, 需要注意的是,这个值设置过大事实上相当于禁用了连接带宽延迟积限制功能。这个限制特性减少了在路由和交换包队列的堵塞数据数量,也减少了在本地主机接口队列阻塞的数据的数量。在少数的等候队列中、交互式连接,尤其是通过慢速的调制解调器,也能用低的 往返时间操作。但是,注意这只影响到数据发送 (上载/服务端)。对数据接收(下载)没有效果。
    调整 net.inet.tcp.inflight.stab 是 不 推荐的。这个参数的默认值是 20,表示把 2 个最大包加入到带宽延迟积窗口的计算中。额外的窗口似的算法更为稳定,并改善对于多变网络环境的相应能力,但也会导致慢速连接下的 ping 时间增长 (尽管还是会比没有使用 inflight 算法低许多)。对于这些情形, 您可能会希望把这个参数减少到 15, 10, 或 5;
    并可能因此而不得不减少 net.inet.tcp.inflight.min (比如说, 3500) 来得到希望的效果。减少这些参数的值, 只应作为最后不得已时的手段来使用。
    ############################
    net.inet.tcp.syncookies: 1
    SYN cookies是一种用于通过选择加密的初始化TCP序列号,可以对回应的包做验证来降低SYN’洪水’攻击的影响的技术。默认即是,不需修改
    ########################
    net.inet.tcp.msl: 30000
    这个值网上很多文章都推荐的7500,还可以改的更小一些(如2000或2500),这样可以加快不正常连接的释放过程(三次握手2秒、FIN_WAIT4秒)。
    #########################
    net.inet.tcp.always_keepalive: 1
    帮助系统清除没有正常断开的TCP连接,这增加了一些网络带宽的使用,但是一些死掉的连接最终能被识别并清除。死的TCP连接是被拨号用户存取的系统的一个特别的问题,因为用户经常断开modem而不正确的关闭活动的连接。
    #############################
    net.inet.udp.checksum: 1
    防止不正确的udp包的攻击,默认即是,不需修改
    ##############################
    net.inet.udp.log_in_vain: 0
    记录下任何UDP连接,这个一般情况下不应该修改。
    #######################
    net.inet.udp.blackhole: 0
    建议设置为1,接收到一个已经关闭的端口发来的所有UDP包直接drop
    #######################
    net.inet.raw.maxdgram: 8192
    Maximum outgoing raw IP datagram size 很多文章建议设置为65536,好像没多大必要。
    ######################################
    net.inet.raw.recvspace: 8192
    Maximum incoming raw IP datagram size 很多文章建议设置为65536,好像没多大必要。
    #######################
    net.link.ether.inet.max_age: 1200
    调整ARP清理的时间,通过向IP路由缓冲填充伪造的ARP条目可以让恶意用户产生资源耗竭和性能减低攻击。这项似乎大家都未做改动,我建议不动或者稍微减少,比如300(HP-UX默认的5分钟)
    #######################
    net.inet6.ip6.redirect: 1
    设置为0,屏蔽ipv6重定向功能
    ###########################
    net.isr.direct: 0
    所有MPSAFE的网络ISR对包做立即响应,提高网卡性能,设置为1。
    ####################################
    hw.ata.wc: 1
    这个选项用来打开 IDE 硬盘快取。当打开时,如果有数据要写入硬盘时,硬盘会假装已完成写入,并将数据快取起来。这种作法会加速硬盘的存取速度,但当系统异常关机时,比较容易造成数据遗失。不过由于关闭这个功能所带来的速度差异实在太大,建议还是保留原本打开的状态吧,不做修改。
    ###################
    security.bsd.see_other_uids: 1
    security.bsd.see_other_gids: 1
    #####################
    不允许用户看到其他用户的进程,因此应该改成0.

    memcache临摹

    2009年06月19日 下午 44:26 | 作者:pangyt

    先发牢骚:即便规模尚小,酷讯、抓虾、一见等公司都成立了产品委员会:由产品部门调查和整理用户需求,提交产品委员会审议。以酷讯为例,它现 在的产品部 门有8个人,由产品部、研发、项目管理部、测试、设计等各个部门的人参加,目的是让每个细分产品都能明确指向用户需求。迅雷甚至建立起了更完整的信息反馈 机制,在内部,员工提出意见、纠错能够得到奖励,对外,鼓励用户提出意见,甚至对相关人士每周进行抽奖。

    我的博客有个特点,就是图多,呵呵,一图顶千言么。

    这篇文章的目的是对当下极度流行的memcache进行代码级别的分析,虽然在网上已经流行了几篇很不错的分析文章,但是我还是忍不住做一些补充,多以图的形式。
    参考文章:

    memcache分析调试

    Memcached深度分析(原创)

    高性能,分布式,轻量级缓存组件memcached的源码剖析—第二篇,libevent

    主题:Memcached源码分析(线程模型)

    那么我们开始吧。

    影响过我的人

    2009年06月19日 下午 24:27 | 作者:pangyt

    隐藏

    一些最近打算研究的东东,持续更新

    2009年06月19日 下午 26:55 | 作者:pangyt

    libevent:http://monkey.org/~provos/libevent/
    pgbouncer:http://pgfoundry.org/frs/?group_id=1000258

    ifconfig postgresql.conf sysctl.conf

    nginx:http://www.evanmiller.org/nginx-modules-guide.html#overview

    [转帖]工作2年后的体会

    2009年06月19日 下午 40:27 | 作者:pangyt

    [来源不详......]

    论工作:
    1.对待薪酬:不管公司加不加你薪水,只要你还在这个公司一天,就请努力专心的做事。
    2.对待每一件事:努力认真去做好每一件事。只要你想做,总有法子可以做到的。
    3.做好本分工作.技术人员有时候对PM分配自己一些较没技术含量的工作会很不满.记住,都是做事而已.无论怎样,分配到你的工作,请你做好.孔子尚且养过马,薛仁贵尚且当过伙头军.我认为,做好一个茶叶蛋,比做砸了原子弹更有意义。不以技术难度定优劣,都是做事而已.
    4.团队的交流,配合开发:
    1)别人的失误要及时指出,当然了,语气要婉转.这样PM才能调整进度,别发现了错误隐瞒不报.
    2)对于自己不懂的环节,勇敢承认自己的缺点,大胆去估计进度,并认真学习.
    3)如果可能,每天汇报进度,也许只是几分钟,让PM看看你的构思,你的代码,你的成果.PM是最熟悉业务的,他能指出你的程序流是否正确,页面是否恰当.根据这些,你和他才能估计进度,这样,整个项目的进度才算可控.
    4)学会承担更多的责任.把困难的任务交给你,通常意味着只有你才能完成.请你好好享受这种”唯一”的乐趣.
    5.出了问题,努力想办法去解决。别人或者不在意你的能力,但很在意你的态度.论学习:
    1.年轻时多花点时间在自己专业上.不要分心旁骛太多.
    2.先做好本职工作,行有余力,再自学
    3.及时总结心得经验.记录,总结做过的项目,能总结多少就多少。如果你有扎实的理论基础,深刻的理解能力,坚强的毅力,无论什么新技术新东西你都能很快学会,但最宝贵的东西—–经验,解决问题的钥匙.你是无法学会的,只能慢慢体会,慢慢总结.
    4.技术不求新,涉及哪方面的技术/知识,就去学习,想办法精通.先有深度,再求广度.

    论生活:
    1.生活应该简单,但不应该单调。做饭,折纸,音乐,都是不错的消遣。适当放松,有不足才有期待。
    2.踢球能让我很开心.多去踢球.
    3.别被一些俗事打乱了生活的节奏,要懂得把握生活的节奏
    4.每星期总结一周的活动
    5.维持7.5小时睡眠
    6.抓住该努力的时间去努力,该松弛的时候去松弛

    论阅读:
    1.借鉴高中读三国的经验,选定一本书,就那个领域进行精读。其他都只略读。精读的书要经常看才行。
    2.外出放松心情的时候,别读太严肃的书。
    3.伏案+适当时间练习,有想法了才抛开书实践。是学习编程的最好方法.
    4.读书用自己的观点概括一个框架,再读同类书时,对总结修修补补就行了。(即对比阅读的方法)
    5.找本经典英语读上一两年,就像看古文.基础好了,以后看英语才不会觉得痛苦.

    论做人:
    1.自视高谓之骄,怀激愤谓之躁.做人应该尽量避免骄傲,浮躁.
    2.要在3年达到别人10年才能达到的高度,就意味着3年内要承受10年的苦.请你衡量.
    3.不要拿社会标准来衡量自己的价值,而应该用心灵的意义去裁决.
    4.深圳很浮躁,越是浮躁的地方,越要扎实下来,厚积薄发.
    5.调整自己的心态,不要太在乎一得一失.你目前所努力的,其实不是为了成功,而是为了当成功的机会来临时,你能把握住而已.为了成功和为了成功把握机会,两者的区别很重要.
    6.做人应该谦虚.而且不要有自虐狂的心理,并不是每个人都会针对你.
    7.高手是别人认为的.不是自封的,不要自大.
    8.坚持理想,理想不难,难的是坚持.

    论心理:
    1.烦恼和焦虑:烦恼和焦虑表示你为一些事情担心着,而你目前并没有付出能够解决这些问题的努力。
    2.宽容面对自己的缺陷和不足.
    3.把自己的消极想法都记下,逐点去分析,攻破。分析问题所在,制定方法去解决(生活与心理都是)
    4.知足常乐

    Hello world!

    2009年06月18日 下午 24:46 | 作者:pangyt

    欢迎使用 WordPress 。这是系统自动生成的演示文章。编辑或者删除它,开始您的博客!