`

Linux内核调优之Sysctl研究(原创)

阅读更多

sysctl 是一个用来在系统运作中查看及调整系统参数的工具,它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能。用sysctl可以读取设置超过五百个系统变量。基于这点,sysctl(8) 提供两个功能:读取和修改系统设置。有的 sysctl 参数只是用来回报目前的系统状况,例如回报目前已开机时间、所使用的操作系统版本、核心名称等等;而有的可以让我们修改参数以调整系统运作的行为,例如网 络暂存内存的大小、最大的上线人数等等。而这些可以调整的参数中必须在一开机系统执行其它程序前就设定好,有的可以在开机完后任意调整。
查看所有可读变量:
# sysctl -a
读一个指定的变量,例如 kern.maxproc:
# sysctl kern.maxproc kern.maxproc: 1044
要设置一个指定的变量,直接用 variable=value 这样的语法:
# sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000

您可以使用sysctl修改系统变量,也可以通过编辑sysctl.conf文件来修改系统变量。sysctl.conf 看起来很像 rc.conf。它用 variable=value 的形式来设定值。指定的值在系统进入多用户模式之后被设定。并不是所有的变量都可以在这个模式下设定。
sysctl 变量的设置通常是字符串、数字或者布尔型。 (布尔型用 1 来表示'yes',用 0 来表示'no')。例如
#sysctl -w kernel.sysrq=0
下面是对/etc/sysctl.conf配置文件的一些中文注释。在对服务器性能进行调整的时候可能会用得上!
#最大的待发送TCP数据缓冲区空间
net.inet.tcp.sendspace=65536

#最大的接受TCP缓冲区空间
net.inet.tcp.recvspace=65536

#最大的接受UDP缓冲区大小
net.inet.udp.sendspace=65535

#最大的发送UDP数据缓冲区大小
net.inet.udp.maxdgram=65535

#本地套接字连接的数据发送空间
net.local.stream.sendspace=65535

#加快网络性能的协议
net.inet.tcp.rfc1323=1
net.inet.tcp.rfc1644=1
net.inet.tcp.rfc3042=1
net.inet.tcp.rfc3390=1

#最大的套接字缓冲区
kern.ipc.maxsockbuf=2097152

#系统中允许的最多文件数量
kern.maxfiles=65536

#每个进程能够同时打开的最大文件数量
kern.maxfilesperproc=32768

#当一台计算机发起TCP连接请求时,系统会回应ACK应答数据包。该选项设置是否延迟ACK应答数据包,把它和包含数据的数据包一起发送,在高速网络和低负载的情况下会略微提高性能,但在网络连接较差的时候,对方计算机得不到应答会持续发起连接请求,反而会降低性能。
net.inet.tcp.delayed_ack=0

#屏蔽ICMP重定向功能
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=1
net.inet.ip.redirect=0
net.inet6.ip6.redirect=0

#防止ICMP广播风暴
net.inet.icmp.bmcastecho=0
net.inet.icmp.maskrepl=0

#限制系统发送ICMP速率
net.inet.icmp.icmplim=100

#安全参数,编译内核的时候加了options TCP_DROP_SYNFIN才可以用
net.inet.icmp.icmplim_output=0
net.inet.tcp.drop_synfin=1

#设置为1会帮助系统清除没有正常断开的TCP连接,这增加了一些网络带宽的使用,但是一些死掉的连接最终能被识别并清除。死的TCP连接是被拨号用户存取的系统的一个特别的问题,因为用户经常断开modem而不正确的关闭活动的连接
net.inet.tcp.always_keepalive=1

#若看到net.inet.ip.intr_queue_drops这个在增加,就要调大net.inet.ip.intr_queue_maxlen,为0最好
net.inet.ip.intr_queue_maxlen=1000

#防止DOS攻击,默认为30000
net.inet.tcp.msl=7500

#接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包
net.inet.tcp.blackhole=2

#接收到一个已经关闭的端口发来的所有UDP包直接drop
net.inet.udp.blackhole=1

#为网络数据连接时提供缓冲
net.inet.tcp.inflight.enable=1

#如果打开的话每个目标地址一次转发成功以后它的数据都将被记录进路由表和arp数据表,节约路由的计算时间,但会需要大量的内核内存空间来保存路由表
net.inet.ip.fastforwarding=0

#kernel编译打开options POLLING功能,高负载情况下使用低负载不推荐SMP不能和polling一起用
#kern.polling.enable=1

#并发连接数,默认为128,推荐在1024-4096之间,数字越大占用内存也越大
kern.ipc.somaxconn=32768

#禁止用户查看其他用户的进程
security.bsd.see_other_uids=0

#设置kernel安全级别
kern.securelevel=0

#记录下任何TCP连接
net.inet.tcp.log_in_vain=1

#记录下任何UDP连接
net.inet.udp.log_in_vain=1

#防止不正确的udp包的攻击
net.inet.udp.checksum=1

#防止DOS攻击
net.inet.tcp.syncookies=1

#仅为线程提供物理内存支持,需要256兆以上内存
kern.ipc.shm_use_phys=1

# 线程可使用的最大共享内存
kern.ipc.shmmax=67108864

# 最大线程数量
kern.ipc.shmall=32768

# 程序崩溃时不记录
kern.coredump=0

# lo本地数据流接收和发送空间
net.local.stream.recvspace=65536
net.local.dgram.maxdgram=16384
net.local.dgram.recvspace=65536

# 数据包数据段大小,ADSL为1452。
net.inet.tcp.mssdflt=1460

# 为网络数据连接时提供缓冲
net.inet.tcp.inflight_enable=1

# 数据包数据段最小值,ADSL为1452
net.inet.tcp.minmss=1460

# 本地数据最大数量
net.inet.raw.maxdgram=65536

# 本地数据流接收空间
net.inet.raw.recvspace=65536

#ipfw防火墙动态规则数量,默认为4096,增大该值可以防止某些病毒发送大量TCP连接,导致不能建立正常连接
net.inet.ip.fw.dyn_max=65535

#设置ipf防火墙TCP连接空闲保留时间,默认8640000(120小时)
net.inet.ipf.fr_tcpidletimeout=864000


#默认的接收TCP窗口大小

net.core.rmem_default = 256960


#最大的TCP数据接收缓冲
net.core.rmem_max = 256960


#默认的发送TCP窗口大小
net.core.wmem_default = 256960


#最大的TCP数据发送缓冲
net.core.wmem_max = 256960


#以一种比重发超时更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项
net.ipv4.tcp_timestamps = 0


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


#启用转发应答(Forward Acknowledgment),这可以进行有选择应答(SACK)从而减少拥塞情况的发生;这个选项也应该启用。

net.ipv4.tcp_fack =1


#支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为1
net.ipv4.tcp_window_scaling = 1


#确定 TCP 栈应该如何反映内存使用;每个值的单位都是内存页(通常是 4KB)。第一个值是内存使用的下限。第二个值是内存压力模式开始对缓冲区使用应用压力的上限。第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。

net.ipv4.tcp_mem= 24576 32768 49152


#为自动调优定义每个 socket 使用的内存。第一个值是为socket 的发送缓冲区分配的最少字节数。第二个值是默认值(该值会被 wmem_default 覆盖),缓冲区在系统负载不重的情况下可以增长到这个值。第三个值是发送缓冲区空间的最大字节数(该值会被 wmem_max 覆盖)。

net.ipv4.tcp_wmem= 4096 16384 131072


#与 tcp_wmem 类似,不过它表示的是为自动调优所使用的接收缓冲区的值

net.ipv4.tcp_rmem= 4096 87380 174760


#允许 TCP/IP 栈适应在高吞吐量情况下低延时的情况;这个选项应该禁用。

net.ipv4.tcp_low_latency= 0


#启用发送者端的拥塞控制算法,它可以维护对吞吐量的评估,并试图对带宽的整体利用情况进行优化;对于 WAN 通信来说应该启用这个选项

net.ipv4.tcp_westwood= 0


#为快速长距离网络启用 Binary Increase Congestion;这样可以更好地利用以 GB 速度进行操作的链接;对于 WAN 通信应该启用这个选项。

net.ipv4.tcp_bic= 1

 

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

net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0


#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) 中显示的内存用量应有显著变化,

kern.maxvnodes=8446


#最大的进程数

kern.maxproc= 964


#每个用户id允许的最大进程数

kern.maxprocperuid=867

注意,maxprocperuid至少要比maxproc少1,因为init(8) 这个系统程序绝对要保持在运作状态。


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

kern.maxfiles=2221928



参考至:http://dev.csdn.net/htmls/73/73907.html
            http://www.boear.com/article/09-08/205.html

            http://www.ibm.com/developerworks/cn/linux/l-hisock.html

            http://blog.sina.com.cn/s/blog_60359c5b0100is8y.html

本文原创,转载请注明作者、出处

如有错误,欢迎指正

邮箱:czmcj@163.com

0
1
分享到:
评论

相关推荐

    linux 内核参数调优

    Linux 内核参数调优详解 Linux 内核参数是 Linux 操作系统的核心组件之一,它控制着系统的行为和性能。通过调整 Linux 内核参数,可以提高系统的性能、安全性和稳定性。本文将详细讲解 Linux 内核参数的调整,包括...

    linux性能调优一些整合文档打包

    CPU调优主要包括进程调度策略调整(如nice值和renice命令)、内核参数优化(比如sysctl配置)以及CPU亲和性设置。通过合理分配优先级,可以改善高负载时的系统响应。 3. **内存管理**: 内存调优关注如何高效利用...

    Linux性能调优指南,IBM专家资深指导

    2. **内核参数调整**:讲解了如何通过调整内核参数(如sysctl、kernel.shmall等)来优化系统的内存管理、调度策略、网络设置等,以适应不同工作负载的需求。 3. **进程管理**:包括进程优先级设置(nice和renice...

    Linux性能调优工具

    3. **调优尝试**:根据诊断结果调整系统配置,比如通过sysctl优化内核参数,或者使用tuned-adm来针对特定的工作负载进行优化。 4. **基准测试**:调优后,使用基准测试工具验证性能提升的效果,确保达到预期目标。 ...

    通过linux sysctl调优

    这些参数控制着Linux内核的许多方面,包括内存管理、进程调度、网络配置等。通过合理的调整,可以在不重启系统的情况下改善系统的性能和稳定性。 ### 二、Sysctl参数分类 根据描述中的提示,我们将重点关注以下几...

    linux性能调优方法总结

    首先,Linux系统中的网络性能优化是调优工作的重点之一。通过调整内核参数,可以显著提高网络通信的效率。在Linux系统中,/proc接口提供了访问和修改内核参数的能力,使得我们可以直接通过读写/proc中的值来调整网络...

    Linux性能调优的几种方法

    在Linux中,可以通过编辑/etc/sysctl.conf文件来修改内核参数,或使用sysctl命令在运行时进行调整。通过这种方式,系统管理员可以根据具体的硬件配置和应用需求来定制内核的行为。 第四种方法是Tuning the ...

    Linux性能调优命令精华

    `sysctl`则用于动态查看和调整内核参数,对系统行为进行微调。 在文件系统方面,`df`和`du`分别用于查看磁盘空间使用和文件或目录所占空间。`iotop`类似于`top`,但用于监控I/O活动的进程。 最后,`bash`历史记录...

    优化Linux性能调优

    在IT领域,Linux性能调优是一项至关重要的任务,它涉及到操作系统、硬件配置、数据库和应用程序等多个层面。以下是对这些知识点的详细阐述: 首先,我们关注的是"操作系统优化"。这通常包括调整系统参数、内核参数...

    Linux内核解读入门

    Linux内核解读入门 Linux内核是开源操作系统Linux的核心部分,负责管理系统的硬件资源,提供基本的服务供上层应用程序使用。对于初学者来说,理解...希望这篇入门指南能为你的Linux内核学习之路提供一个良好的起点。

    LINUX性能调优方法总结.docx

    Linux性能调优是提高系统效率和稳定性的关键环节,尤其对于服务器环境而言至关重要。本文将深入探讨几个核心的Linux性能优化方法,重点关注网络性能和磁盘子系统的优化。 首先,我们来看网络性能调优。在Linux中,...

    Netapp NAS存储Linux NFS调优指导书v1.0.pdf

    《Netapp NAS存储Linux NFS调优指导书》是专为优化Linux系统中使用Netapp NAS存储设备进行NFS(网络文件系统)操作而设计的详细指南。随着Linux在企业环境中的广泛应用,NFS客户端的性能和稳定性变得至关重要。本...

    Red Hat Enterprise Linux在IBM xSeries服务器上的调优

    尽管直接修改或重新编译内核源代码对于大多数用户来说不是推荐的做法,但Linux内核本身提供了一种更为简便且灵活的方式来调整内核参数——即通过Proc文件系统。Proc文件系统不仅提供了运行中内核的接口,还允许系统...

    Linux-性能调优的几种方法.docx

    3. **改变内核参数**:调整内核参数可以直接通过修改`/etc/sysctl.conf`文件实现,这可以影响系统的各个方面,包括网络、内存管理和I/O调度。例如,`vm.swappiness`参数可以调整内存与交换分区的使用策略。 4. **...

    Linux+性能调优的几种方法

    内核参数是指用于控制Linux内核行为的各种变量,通过调整这些参数可以显著改善系统的性能。常见的内核参数包括但不限于文件句柄数、TCP缓冲区大小等。 ##### 3.1 常见的内核参数 - **fs.file-max**:用于设置系统...

    linux-2.6.19.x内核编译配置选项简介.pdf

    Linux内核编译是一个将源代码编译成可执行文件的过程,在这个过程中,开发者可以根据需要选择不同的配置选项来定制内核,以满足特定系统的要求。Linux 2.6.19.x内核作为一个较早期的稳定版本,其编译配置选项非常...

    LINUX调优总结

    Linux系统调优是一个复杂而关键的过程,旨在优化系统的性能,特别是在服务器环境中。本文将总结一些主要的Linux调优策略,重点关注网络和磁盘子系统的优化。 首先,我们来看网络调优。TCP(Transmission Control ...

    20个Linux服务器性能调优技巧

    1. 磁盘I/O性能调优:Linux内核中的电梯算法负责管理磁盘I/O请求,通过调整该算法参数,可以平衡系统的低延迟需求,有效组织对磁盘的读写请求,从而提升磁盘I/O性能。 2. 守护进程优化:Linux服务器上运行着许多...

    Linux操作系统调优参数.docx

    在Linux操作系统中,调优是优化系统性能的关键步骤,尤其是对于网络密集型应用而言。TCP/IP参数调优能够显著改善网络通信效率,减少延迟并提高吞吐量。这些参数主要位于`/proc/sys/net`目录下,它们允许系统管理员...

Global site tag (gtag.js) - Google Analytics