使用 /proc 文件系统来控制系统[转贴]

 

使用 /proc 文件系统来控制系统[转贴]

级别:中级
作者:Graham White(gwhite at uk.ibm.com)
IT 专家,Hursley,IBM
2003 年 8 月

/proc 文件系统是 Linux 的优秀特性之一,本文向您详细讲述了它的一些最实用的基础知识。使用 /proc,您再也不用关闭并重新引导机器来管理操作系统的许多细节问题,这对那些要求系统的可用性尽可能高的管理员来说非常有用。

任何管理过具有商业重要性的系统的人都知道计算机正常运行时间的价值 - 或者反过来讲,知道用户因故障时间会给您带来诸多头痛问题。公司采用 UNIX 服务器的主要原因之一是由于它的可靠性和稳定性。如果仔细管理,通常可以很长时间不需重启这些服务器。为了做到尽善尽美,您可以实时执行一些管理任务,甚至是内核这一级别的任务,从而保持服务器的可用性。虽然因升级硬件或因某人踢掉电源线而仍需要重启系统,但了解到许多管理任务可以在不干扰服务的情况下执行,总是有益的。


本文提供了不需要重新引导就能够执行关于各种管理任务和更改系统的提示和技巧。Linux 提供了各种方法,用以在保持系统正常运行的情况下,更改底层操作系统的值和设置。这些方法有两种基本形式,一种形式对于所有 Linux 系统都是通用的,并在 Linux 内核中提供这一形式(您可以在 Linux Kernel Archives 上查找更多关于 Linux 内核的信息和下载内核源代码;请参阅参考资料,里面有至 Linux Kernel Archives 的链接),还有一种形式是各分发版所独有的,并且由供应商提供。本文将讨论这两种方法。


更改运行中的内核的参数
Linux 向管理员提供了非常好的方法,使他们可以在系统运行时更改内核,而不需要重新引导内核/系统。这是通过 /proc 虚拟文件系统实现的。Linux Gazette 给出了一份有关 /proc 的参考,它是我所看到过的最简单且最容易的参考之一。(请参阅参考资料,其中有至这篇文章的链接。)/proc 文件系统主要可以让您查看运行中的内核,这一点对于监控性能、查找系统信息、了解系统是如何配置的以及更改该配置很有用。该文件系统被称为虚拟文件系统,因为它实际上根本不是一个文件系统。它只是内核提供的一个映射,被附加在通常的文件系统结构之上,从而使您能够访问它。


我们可以采用某种方法在系统正常运行的同时更改运行中的内核的参数,这一事实赋予了系统管理员在更改内核设置方面强大的能力和高的灵活性。这种实现是出自部分 Linux 内核开发人员富有灵感的想法。但能力太大会是一件坏事吗?有时确实如此。如果准备更改 /proc 文件系统中的任何内容,您必须确保自己知道在更改什么以及这会对系统产生什么影响。这些技术确实有用,但错误的举动会带来完全不希望得到的结果。如果您不熟悉这方面的内容,或者不确定您所做的某项更改会带来什么影响,那么请在一台对您或您公司不重要的机器上进行实践。


如何更改
首先,考虑怎样做不会对内核进行更改。有两条充分的理由说明了为什么不能直接切换至 /proc 文件系统,用文本编辑器打开一个文件,做一系列更改,然后保存该文件,再退出。这两条理由是:

数据完整性:所有这些文件描述了运行中的系统,由于内核可以随时更改这些文件中的任何一个,因此如果打开一个编辑器,然后更改某些数据,而同时,系统也正在底层更改这些数据,那么无论您保存下来的任何内容都不可能是内核所期望的内容。
虚拟文件:所有这些文件实际上都不存在。如何使保存的数据同步,等等?

所以,解决办法是,不使用编辑器来更改任何这些文件。每当更改 /proc 文件系统中的任何内容时,应该使用 echo 命令,然后从命令行将输出重定向至 /proc 下所选定的文件中。例如:


echo "Your-New-Kernel-Value" > /proc/your/file


类似的,如果希望查看 /proc 中的信息,应该使用专门用于此用途的命令,或者使用命令行下的 cat 命令。


更改什么
要很好地使用 /proc 不需要您是一位内核方面的高手,只需基本了解这个文件系统的结构就可以极大地帮助您。直到有一天用户向您询问某些特定的功能,使您很高兴曾下功夫了解过在哪里进行更改,您才可能会觉得有必要知道关于 /proc 中的任何事情。在这方面,/proc 文件系统通过其结构和文件许可权帮助系统管理员。


/proc 中的每个文件都有一组分配给它的非常特殊的文件许可权,并且每个文件属于特定的用户标识。这一点实现得非常仔细,从而提供给管理员和用户正确的功能。下面这个列表汇总了各个文件上有哪些特定的许可权:

只读:任何用户都不能更改该文件;它用于表示系统信息
root 写:如果 /proc 中的某个文件是可写的,则通常只能由 root 用户来写
root 读:有些文件对一般系统用户是不可见的,而只对 root 用户是可见的
其它:出于各种原因,您可能会看到不同于上面常见的三种许可权的组合

关于 /proc,您会发现最通常的情况是,它的大多数文件是只读的,除了 /proc/sys 目录。该目录下存放着大多数的内核参数(而不是信息),并且设计成可以在系统运行的同时进行更改。因此这个目录是本文的主旨所在。


就更改 /proc 中什么内容而言,要了解的最后一点是,应该向这些文件实际写些什么。当查看 /proc 中各种文件时,会发现其中一些文件对我们来说是可读的,一些文件是数据文件。通过用特定的实用程序(譬如 top、lspci 和 free),这些数据文件仍然也可读。您还会注意到,对我们来说可读文件有两种不同格式:一些是二进制开关,另一些包含其它信息。二进制开关文件只包含代表特定内核功能的 0(关)或 1(开)。


进行更改
详细介绍有关 /proc 中每个文件的用法和确切信息超出了本文所涉及的范围。要获得任何关于本文没有涉及到的 /proc 文件的其它信息,一个最佳来源就是 Linux 内核源代码本身,它包含了一些非常优秀的文档。对于系统管理员,/proc 中的以下文件较有用。这不意味着它是一份详尽的说明,而只是日常使用中便于查阅的参考。


/proc/scsi
/proc/scsi/scsi
作为系统管理员,需要了解的最有用内容是,在有热交换驱动器情况下,如何不重启系统就可以添加更多磁盘空间。假使不使用 /proc,您可以插入驱动器,但为了使系统识别新磁盘,必须随即重新引导系统。这里,可以用以下命令来使系统识别新的驱动器:


echo "scsi add-single-device w x y z" > /proc/scsi/scsi


为使该命令正常运行,必须指定正确的参数值 w、x、y 和 z,如下所示:

w 是主机适配器标识,第一个适配器为零(0)
x 是主机适配器上的 SCSI 通道,第一个通道为零(0)
y 是设备的 SCSI 标识
z 是 LUN 号,第一个 LUN 为零(0)

一旦将磁盘添加到系统中之后,可以挂装任何先前已格式化的文件系统,也可以开始对它进行格式化等。例如,如果不确定磁盘是什么设备,或者想检查任何先前已有的分区,则可以用如 fdisk -l 这样的命令来向您报告这方面的信息。


相反的,在不重新引导系统的情况下将设备从系统中除去的命令是:


echo "scsi remove-single-device w x y z" > /proc/scsi/scsi


在输入这条命令并将热交换 SCSI 磁盘从系统中除去之前,请确保首先卸下已从该磁盘安装的任何文件系统。


/proc/sys/fs/
/proc/sys/fs/file-max
该文件指定了可以分配的文件句柄的最大数目。如果用户得到的错误消息声明由于打开文件数已经达到了最大值,从而他们不能打开更多文件,则可能需要增加该值。可将这个值设置成有任意多个文件,并且能通过将一个新数字值写入该文件来更改该值。


缺省设置:4096


/proc/sys/fs/file-nr
该文件与 file-max 相关,它有三个值:

已分配文件句柄的数目
已使用文件句柄的数目
文件句柄的最大数目
该文件是只读的,仅用于显示信息。

/proc/sys/fs/inode-*
任何以名称"inode"开头的文件所执行的操作与上面那些以名称"file"开头的文件所执行的操作一样,但所执行的操作与索引节点有关,而与文件句柄无关。


/proc/sys/fs/overflowuid 和 /proc/sys/fs/overflowgid
这两个文件分别保存那些支持 16 位用户标识和组标识的任何文件系统的用户标识(UID)和组标识(GID)。可以更改这些值,但如果您确实觉得需要这样做,那么您可能会发现更改组和密码文件项更容易些。


缺省设置:65534


/proc/sys/fs/super-max
该文件指定超级块处理程序的最大数目。挂装的任何文件系统需要使用超级块,所以如果挂装了大量文件系统,则可能会用尽超级块处理程序。


缺省设置:256


/proc/sys/fs/super-nr
该文件显示当前已分配超级块的数目。该文件是只读的,仅用于显示信息。


/proc/sys/kernel
/proc/sys/kernel/acct
该文件有三个可配置值,根据包含日志的文件系统上可用空间的数量(以百分比表示),这些值控制何时开始进行进程记帐:

如果可用空间低于这个百分比值,则停止进程记帐
如果可用空间高于这个百分比值,则开始进程记帐
检查上面两个值的频率(以秒为单位)
要更改这个文件的某个值,应该回送用空格分隔开的一串数字。

缺省设置:2 4 30


如果包含日志的文件系统上只有少于 2% 的可用空间,则这些值会使记帐停止,如果有 4% 或更多可用空间,则再次启动记帐。每 30 秒做一次检查。


/proc/sys/kernel/ctrl-alt-del
该文件有一个二进制值,该值控制系统在接收到 ctrl+alt+delete 按键组合时如何反应。这两个值表示:

零(0)值表示捕获 ctrl+alt+delete,并将其送至 init 程序。这将允许系统可以完美地关闭和重启,就好象您输入 shutdown 命令一样。
壹(1)值表示不捕获 ctrl+alt+delete,将执行非干净的关闭,就好象直接关闭电源一样。

缺省设置:0


/proc/sys/kernel/domainname
该文件允许您配置网络域名。它没有缺省值,也许已经设置了域名,也许没有设置。


/proc/sys/kernel/hostname
该文件允许您配置网络主机名。它没有缺省值,也许已经设置了主机名,也许没有设置。


/proc/sys/kernel/msgmax
该文件指定了从一个进程发送到另一个进程的消息的最大长度。进程间的消息传递是在内核的内存中进行,不会交换到磁盘上,所以如果增加该值,则将增加操作系统所使用的内存数量。


缺省设置:8192


/proc/sys/kernel/msgmnb
该文件指定在一个消息队列中最大的字节数。


缺省设置:16384


/proc/sys/kernel/msgmni
该文件指定消息队列标识的最大数目。


缺省设置:16


/proc/sys/kernel/panic
该文件表示如果发生"内核严重错误(kernel panic)",则内核在重新引导之前等待的时间(以秒为单位)。零(0)秒设置在发生内核严重错误时将禁止重新引导。


缺省设置:0


/proc/sys/kernel/printk
该文件有四个数字值,它们根据日志记录消息的重要性,定义将其发送到何处。关于不同日志级别的更多信息,请阅读 syslog(2) 联机帮助页。该文件的四个值为:

控制台日志级别:优先级高于该值的消息将被打印至控制台
缺省的消息日志级别:将用该优先级来打印没有优先级的消息
最低的控制台日志级别:控制台日志级别可被设置的最小值(最高优先级)
缺省的控制台日志级别:控制台日志级别的缺省值

缺省设置:6 4 1 7


/proc/sys/kernel/shmall
该文件是在任何给定时刻系统上可以使用的共享内存的总量(以字节为单位)。


缺省设置:2097152


/proc/sys/kernel/shmax
该文件指定内核所允许的最大共享内存段的大小(以字节为单位)。


缺省设置:33554432


/proc/sys/kernel/shmmni
该文件表示用于整个系统共享内存段的最大数目。


缺省设置:4096


/proc/sys/kernel/sysrq
如果该文件指定的值为非零,则激活 System Request Key。


缺省设置:0


/proc/sys/kernel/threads-max
该文件指定内核所能使用的线程的最大数目。


缺省设置:2048


/proc/sys/net
/proc/sys/net/core/message_burst
写新的警告消息所需的时间(以 1/10 秒为单位);在这个时间内所接收到的其它警告消息会被丢弃。这用于防止某些企图用消息"淹没"您系统的人所使用的拒绝服务(Denial of Service)攻击。


缺省设置:50(5 秒)


/proc/sys/net/core/message_cost
该文件存有与每个警告消息相关的成本值。该值越大,越有可能忽略警告消息。


缺省设置:5


/proc/sys/net/core/netdev_max_backlog
该文件指定了,在接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。


缺省设置:300


/proc/sys/net/core/optmem_max
该文件指定了每个套接字所允许的最大缓冲区的大小。


/proc/sys/net/core/rmem_default
该文件指定了接收套接字缓冲区大小的缺省值(以字节为单位)。


/proc/sys/net/core/rmem_max
该文件指定了接收套接字缓冲区大小的最大值(以字节为单位)。


/proc/sys/net/core/wmem_default
该文件指定了发送套接字缓冲区大小的缺省值(以字节为单位)。


/proc/sys/net/core/wmem_max
该文件指定了发送套接字缓冲区大小的最大值(以字节为单位)。


/proc/sys/net/ipv4
所有 IPv4 和 IPv6 的参数都被记录在内核源代码文档中。请参阅文件 /usr/src/linux/Documentation/networking/ip-sysctl.txt。


/proc/sys/net/ipv6
同 IPv4。


/proc/sys/vm
/proc/sys/vm/buffermem
该文件控制用于缓冲区内存的整个系统内存的数量(以百分比表示)。它有三个值,通过把用空格相隔的一串数字写入该文件来设置这三个值。

用于缓冲区的内存的最低百分比
如果发生所剩系统内存不多,而且系统内存正在减少这种情况,系统将试图维护缓冲区内存的数量。
用于缓冲区的内存的最高百分比

缺省设置:2 10 60


/proc/sys/vm/freepages
该文件控制系统如何应对各种级别的可用内存。它有三个值,通过把用空格相隔的一串数字写入该文件来设置这三个值。

如果系统中可用页面的数目达到了最低限制,则只允许内核分配一些内存。
如果系统中可用页面的数目低于这一限制,则内核将以较积极的方式启动交换,以释放内存,从而维持系统性能。
内核将试图保持这个数量的系统内存可用。低于这个值将启动内核交换。

缺省设置:512 768 1024


/proc/sys/vm/kswapd
该文件控制允许内核如何交换内存。它有三个值,通过把用空格相隔的一串数字写入该文件来设置这三个值:

内核试图一次释放的最大页面数目。如果想增加内存交换过程中的带宽,则需要增加该值。
内核在每次交换中试图释放页面的最少次数。
内核在一次交换中所写页面的数目。这对系统性能影响最大。这个值越大,交换的数据越多,花在磁盘寻道上的时间越少。然而,这个值太大会因"淹没"请求队列而反过来影响系统性能。

缺省设置:512 32 8


/proc/sys/vm/pagecache
该文件与 /proc/sys/vm/buffermem 的工作内容一样,但它是针对文件的内存映射和一般高速缓存。


使内核设置具有持久性
这里提供了一个方便的实用程序,用于更改 /proc/sys 目录下的任何内核参数。它使您可以更改运行中的内核(类似于上面用到的 echo 和重定向方法),但它还有一个在系统引导时执行的配置文件。这使您可以更改运行中的内核,并将这些更改添加到配置文件,以便于在系统重新引导之后,这些更改仍然生效。


该实用程序称为 sysctl,在 sysctl(8) 的联机帮助页中,对这个实用程序进行了完整的文档说明。sysctl 的配置文件是 /etc/sysctl.conf,可以编辑该文件,并在 sysctl.conf(8) 下记录了该文件。sysctl 将 /proc/sys 下的文件视为可以更改的单个变量。所以,以 /proc/sys 下的文件 /proc/sys/fs/file-max 为例,它表示系统中所允许的文件句柄的最大数目,这个文件被表示成 fs.file-max。


这个示例揭示了 sysctl 表示法中的一些奇妙事情。由于 sysctl 只能更改 /proc/sys 目录下的变量,并且人们始终认为变量是在这个目录下,因此省略了变量名的那一部分(/proc/sys)。另一个要说明的更改是,将目录分隔符(正斜杠 /)换成了英文中的句号(点 .)。


将 /proc/sys 中的文件转换成 sysctl 中的变量有两个简单的规则:

去掉前面部分 /proc/sys。
将文件名中的正斜杠变为点。

这两条规则使您能将 /proc/sys 中的任一文件名转换成 sysctl 中的任一变量名。一般文件到变量的转换为:


/proc/sys/dir/file --> dir.file
dir1.dir2.file --> /proc/sys/dir1/dir2/file


可以使用命令 sysctl -a 查看所有可以更改的变量和其当前设置。


用 sysctl 还可以更改变量,它所做的工作与上面所用的 echo 方法完全一样。其表示法为:


sysctl -w dir.file="value"


还是用 file-max 作为示例,使用下面两种方法中的一种将该值更改为 16384:


sysctl -w fs.file-max="16384"


或者:


echo "16384" > /proc/sys/fs/file-max


不要忘记 sysctl 不会将所做的更改添加到配置文件中;这要您用手工来完成。如果您希望在重新引导之后,前面所做的更改仍然有效,则必须维护这个配置文件。


注:不是所有的分发版都提供 sysctl 支持。如果您的特定系统属于这种情况,则可以用上面所描述的 echo 和重定向方法,将这些命令添加到启动脚本中,这样系统每次引导时,都会执行它们。


用于设置系统的命令
在系统运行的同时更改其它非内核系统参数,而且在不重新引导系统的情况下使这些设置生效,这种做法是可能的。在 /etc/init.d 目录中列出了包含这些参数的文件,它们主要按服务、守护程序和服务器来分类。由于越来越多各方面的脚本可以罗列在这个目录下,所以这里不可能讨论所有各种配置。不过,下面列举了一些示例,这些示例讨论了如何在不同的 Linux 分发版上操作 /etc/init.d 下的脚本。这里的示例可能很有用,其中讨论了更改守护程序,然后在不重新引导系统的情形下重新装入配置:

更改 Web 服务器配置,然后重新装入 Apache
除去不需要的 inetd 登录服务
操作网络设置
通过 NFS 导出新的文件系统
启动/停止防火墙

首先,常见的方法是,直接通过 /etc/init.d 中的脚本来操作系统服务。这些脚本用参数来操作它们所控制的服务;可以通过输入脚本名但不带任何参数这种方法来查看有哪些有效的选项。常见的参数有:

start:启动已停止的服务
stop:停止正在运行的服务
restart:停止正在运行的服务,然后再重启该服务;它将启动已停止的服务
reload:在不中断任何连接的情况下,重新装入服务配置
status:报告服务处于运行状态,还是停止状态

例如,下面这条命令将在不终止任何已连接的用户会话的情形下,重新装入 xinetd 配置(如果您更改了 /etc/xinetd.conf,那么这条命令很有用):


/etc/init.d/xinetd reload


Red Hat 提供了 service 这条命令,它可以为您操作服务。service 命令提供的功能与输入脚本名本身的功能一样。它的语法如下所示:


service script-name [parameter]


例如:


service xinetd reload


SuSE 也提供名为 rc 的命令。该命令类似于上面的 service 命令,但该命令与脚本名之间没有空格。它的语法如下所示:


rc{script-name} parameter


例如:


rcapache start


与更改内核参数类似,一旦重新引导系统,则对这些服务的更改将会丢失。现在越来越多的分发版开始采用 chkconfig 命令,它管理在各种运行级别下(包括引导时)启动的服务。在撰写本文时,chkconfig 命令的语法会因 Linux 版本的不同而略有差异,不过如果输入不带任何参数的命令 chkconfig,则会显示一个如何使用该命令的列表。也可以通过 chkconfig(8) 的联机帮助页找到更多有关 chkconfig 的信息。


结束语
使用 /proc 文件系统实时配置 Linux 内核不是一件轻松的事情,然而一旦了解了该文件系统的结构,以及掌握了如何操作各种文件和参数,则您就拥有了一个功能强大的工具,使您的服务器在任何时候都可用。


致谢
我十分感谢 Adrian Fewings 先生对本文的校对。

 

关于作者
Graham 于 2000 年 7 月获得了 Exeter 大学计算机科学和管理科学的理学士学位(荣誉)。在毫无一点经验的情况下,他于 2000 年 9 月加入了 IBM,从事 IT 支持工作,并且开始学习 Linux。一年后,于 2001 年 9 月,他获得了 Red Hat 认证工程师。他所从事的工作和个人爱好使他具备了在各个平台上运行各种版本的 Linux 的经历,来支持 IBM 位于英国的 Hursley Laboratory 的开发社区。最近,他已经撰写了一些关于 Linux 方面的文章,他的第一部也是唯一的一部出版物被收录在 Linux Documentation Project 的指南中。可以通过 gwhite at uk.ibm.com 与 Graham 联系。

 


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 


/proc/sys/net/ipv4/
(内核参数文档:Documentation/networking/ip-sysctl.txt)

ipfrag_time
 该文件表示一个IP分段在内存中保留多少秒。
缺省设置:30(秒)

tcp_max_tw_buckets
 系统在同时所处理的最大timewait sockets 数目。如果超过此数的话,
time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制,纯
粹为了抵御那些简单的 DoS 攻击,千万不要人为的降低这个限制,不过,如果
网络条件需要比默认值更多,则可以提高它(或许还要增加内存)。
缺省设置:180000

icmp_echo_ignore_all
icmp_echo_ignore_broadcasts
该文件表示内核是否忽略所有的ICMP ECHO请求,或忽略广播和多播请求。
0, 响应请求
1, 忽略请求
缺省设置:0
建议设置:1

ip_local_port_range
该文件表示TCP/UDP协议打开的本地端口号。
缺省设置:1024 4999
建议设置:32768 61000

tcp_mem
该文件包含3个整数值,分别是:low,pressure,high
Low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
Pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
High:允许所有tcp sockets用于排队缓冲数据报的页面量。
一般情况下这些值是在系统启动时根据系统内存数量计算得到的。
缺省设置:24576 32768 49152

ip_nonlocal_bind
该文件表示是否允许进程邦定到非本地地址。
缺省设置:0

tcp_orphan_retries
在近端丢弃TCP连接之前,要进行多少次重试。默认值是 7 个,相当于 50秒–
16分钟,视 RTO 而定。如果您的系统是负载很大的web服务器,那么也许需
要降低该值,这类 sockets 可能会耗费大量的资源。另外参考tcp_max_orphans。

icmp_ignore_bogus_error_responses
设置它之后,可以忽略由网络中的那些声称回应地址是广播地址的主机生成的ICMP错误。

ip_no_pmtu_disc
该文件表示在全局范围内关闭路径MTU探测功能。
缺省设置:0

tcp_reordering
该文件表示TCP流中重排序的数据报最大数量。
缺省设置:3

icmp_ratelimit
icmp_ratemask
某些路由器违背RFC1122标准,其对广播帧发送伪造的响应来应答。这种违背行
为通常会被以告警的方式记录在系统日志中。如果该选项设置为True,内核不会
记录这种警告信息。
缺省设置:0

tcp_retrans_collapse
该文件表示对于某些有bug的打印机是否提供针对其bug的兼容性。
缺省设置:1

tcp_retries1
该文件表示放弃回应一个TCP连接请求前进行重传的次数。
缺省设置:3

tcp_retries2
该文件表示放弃在已经建立通讯状态下的一个TCP数据包前进行重传的次数。
缺省设置:15

igmp_max_memberships
该文件表示多播组中的最大成员数量。
缺省设置:20

tcp_abort_on_overflow
当守护进程太忙而不能接受新的连接,就向对方发送reset消息,默认值是false。
这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态。只有在你确
信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用。
缺省设置:0

inet_peer_gc_maxtime
废物收集(GC)通过的最大间隔,这个间隔会影响到缓冲池中内存的低压力。 该值
以 jiffies为单位测量。
缺省设置:120

tcp_adv_win_scale
该文件表示计算缓冲开销bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale >; 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale <= 0)。
缺省设置:2

tcp_rfc1337
这个开关可以启动对于在RFC1337中描述的“tcp的time-wait暗杀危机”问题的修复。启用后,内核将丢弃那些发往time-wait状态TCP套接字的RST包。却省为0。

inet_peer_gc_mintime
废物收集(GC)通过的最短间隔。这个间隔会影响到缓冲池中内存的高压力。 该值
以 jiffies为单位测量。
缺省设置:10

tcp_app_win
该文件表示保留max(window/2^tcp_app_win, mss)数量的窗口由于应用缓冲。当为0时表示不需要缓冲。
缺省设置:31

tcp_rmem
该文件包含3个整数值,分别是:min,default,max
Min:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下TCP socket都至少会有这么多数量的内存用于接收缓冲。
Default:为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的 net.core.wmem中default的值。该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win的默认值情况下,TCP 窗口大小为65535。
Max:为TCP socket预留用于接收缓冲的内存最大值。该值不会影响 net.core.wmem中max的值,今天选择参数 SO_SNDBUF则不受该值影响。
缺省设置:4096 87380 174760

inet_peer_maxttl
条目的最大存活期。在此期限到达之后,如果缓冲池没有耗尽压力的话(例如:缓
冲池中的条目数目非常少),不使用的条目将会超时。该值以 jiffies为单位测量。
缺省设置:600

tcp_dsack
该文件表示是否允许TCP发送“两个完全相同”的SACK。
缺省设置:1

tcp_sack
该文件表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);(对于广域网通信来说)这个选项应该启用,但是这会增加对 CPU 的占用。
缺省设置:1

inet_peer_minttl
条目的最低存活期。在重组端必须要有足够的碎片(fragment)存活期。这个最低
存活期必须保证缓冲池容积是否少于 inet_peer_threshold。该值以 jiffies为
单位测量。
缺省设置:120

tcp_ecn
该文件表示是否打开TCP的直接拥塞通告功能。
缺省设置:0

tcp_stdurg
使用 TCP urg pointer 字段中的主机请求解释功能。大部份的主机都使用老旧的
BSD解释,因此如果您在 Linux 打开它,或会导致不能和它们正确沟通。
缺省设置:0

inet_peer_threshold
INET对端存储器某个合适值,当超过该阀值条目将被丢弃。该阀值同样决定生存
时间以及废物收集通过的时间间隔。条目越多,存活期越低,GC 间隔越短。
缺省设置:65664

tcp_fack
该文件表示是否打开FACK拥塞避免和快速重传功能。
缺省设置:1

tcp_synack_retries
為了與另一端建立連線﹐核心會連同 SYN 一起送出 ACK ﹐以確認收到上一個 SYN。這是
所謂的三段交握( threeway handshake) 的第二個步驟。這裡決定核心在放棄連線之前所
送出的 SYN+ACK 數目。

ip_autoconfig
这个文件里面写着一个数字,表示主机是否通过RARP、BOOTP、DHCP或者其它机制取得其IP配置。否则就是0。

tcp_fin_timeout
如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。参见tcp_max_orphans。

tcp_syncookies
该文件表示是否打开TCP同步标签(syncookie),内核必须打开了 CONFIG_SYN_COOKIES项进行编译。 同步标签(syncookie)可以防止一个套接字在有过多试图连接到达时引起过载。
缺省设置:0

tcp_syn_retries
该文件表示本机向外发起TCP SYN连接超时重传的次数,不应该高于255;该值仅仅针对外出的连接,对于进来的连接由tcp_retries1控制。
缺省设置:5

ip_default_ttl
该文件表示一个数据报的生存周期(Time To Live),即最多经过多少路由器。
缺省设置:64
增加该值会降低系统性能。

tcp_keepalive_intvl
该文件表示发送TCP探测的频率,乘以tcp_keepalive_probes表示断开没有相应的TCP连接的时间。
缺省设置:75(秒)

tcp_timestamps
该文件表示是否启用以一种比超时重发更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。
缺省设置:1

ip_dynaddr
该参数通常用于使用拨号连接的情况,可以使系统动能够立即改变ip包的源地址为该ip地址,同时中断原有的tcp对话而用新地址重新发出一个syn请求包,开始新的tcp对话。在使用ip欺骗时,该参数可以立即改变伪装地址为新的ip地址。该文件表示是否允许动态地址,如果该值非0,表示允许;如果该值大于1,内核将通过log记录动态地址重写信息。
缺省设置:0

tcp_keepalive_probes
该文件表示丢弃TCP连接前,进行最大TCP保持连接侦测的次数。保持连接仅在
SO_KEEPALIVE套接字选项被打开时才被发送。
缺省设置:9(次)

tcp_tw_recycle
能够更快地回收TIME-WAIT套接字。缺省值是1。除非有技术专家的建议和要求,否则不应修改。

ip_forward
该文件表示是否打开IP转发。
0,禁止
1,转发
缺省设置:0

tcp_keepalive_time
该文件表示从不再传送数据到向连接上发送保持连接信号之间所需的秒数。
缺省设置:7200(2小时)

tcp_tw_reuse
该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。
缺省设置:0

tcp_max_orphans
系 统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击,你绝对不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。This limit exists only to prevent simple DoS attacks, you _must_ not rely on this or lower the limit artificially, but rather increase it (probably, after increasing installed memory), if network conditions require more than default value, and tune network services to linger and kill such states more aggressively. 让我再次提醒你:每个孤儿套接字最多能够吃掉你64K不可交换的内存。

tcp_window_scaling
一般来说TCP/IP允许窗口尺寸达到65535字节。对于速度确实很高的网络而言这个值可能还是太小。这个选项允许设置上G字节的窗口大小,有利于在带宽*延迟很大的环境中使用。
一旦内核认为它无法发包,就会丢弃这个包,并向发包的主机发送ICMP通知。

ipfrag_low_thresh
ipfrag_high_thresh
两个文件分别表示用于重组IP分段的内存分配最低值和最高值,一旦达到最高内存分配值,其它分段将被丢弃,直到达到最低内存分配值。
缺省设置:196608(ipfrag_low_thresh) 262144(ipfrag_high_thresh)

tcp_max_syn_backlog
对于那些依然还未获得客户端确认的连接请求,需要保存在队列中最大数目。对于
超过 128Mb 内存的系统,默认值是 1024,低于 128Mb 的则为 128。如果
服务器经常出现过载,可以尝试增加这个数字。警告!假如您将此值设为大于
1024,最好修改 include/net/tcp.h 里面的 TCP_SYNQ_HSIZE,以保持
TCP_SYNQ_HSIZE*16 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如
果tcp_adv_win_scale 128Mb 32768-610000)则系统将忽略所有发送给自己
的ICMP ECHO请求或那些广播地址的请求。
缺省设置:1024

tcp_wmem
该文件包含3个整数值,分别是:min,default,max
Min:为TCP socket预留用于发送缓冲的内存最小值。每个TCP socket都可以使用它。
Default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem中default的 值,一般要低于net.core.wmem中default的值。
Max:为TCP socket预留用于发送缓冲的内存最大值。该值不会影响net.core.wmem_max,今天选择参数SO_SNDBUF则不受该值影响。默认值为128K。
缺省设置:4096 16384 131072

ip_conntrack_max
tcp_frto

-----------------------------------------------------------------------

/proc/sys/net/ipv4/route/

error_burst
 用来控制何时丢弃目的不可达和错误信息。默认的配置设置为每秒钟5个消息。配合error_cost使用,用来限制从问题主机发送回来的ICMP destination unreachable消息数量。当我们试图传输数据包,而又无法到达下一跳时,会返回此消息。

gc_interval
 用来控制路由缓存垃圾回收机制的频率和行为。此参数定义了路由表垃圾回收的间隔。

max_delay
 刷新路由缓存的最大延时,默认为10秒。

error_cost
 作用见error_burst描述,此值设置的越高,允许通过的错误消息越少。

gc_min_interval
 已不再使用,并被gc_min_interval_ms取代。

gc_min_interval_ms
 用来控制路由缓存垃圾回收机制的频率和行为。此参数定义了路由表垃圾回收的最小间隔,不得小于1秒。

max_size
 路由缓存的最大值。当缓存达到该值后,老的路由表项会被清除。

flush
 写该文件会刷新路由缓存。

gc_thresh
 用来控制路由缓存垃圾回收机制的频率和行为。当cache中的路由条数超过此值时,开始垃圾回收。

min_adv_mss
 根据第一跳路由的MTU(最大传输单元)推荐设置的MSS(maximum segment size).

gc_elasticity
 用来控制路由缓存垃圾回收机制的频率和行为。当路由表项的平均长度超过此值时,会触发较为强烈的缓存缩减。

gc_timeout
 设置一个路由表项的过期时长。

min_delay
 刷新路由缓存的最小延时,默认为2秒。

redirect_number
min_pmtu
redirect_silence
edirect_load
mtu_expires
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值