`
iwebcode
  • 浏览: 2008453 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Linux内核参数优化

 
阅读更多

Linux内核参数优化

转自:

http://www.linuxsee.com/linux%E6%9D%82%E8%AE%B0/linux%E5%86%85%E6%A0%B8%E5%8F%82%E6%95%B0%E4%BC%98%E5%8C%96.html

我的内核心参数调整原则是,哪个遇到瓶颈调哪个,谨慎使用,不能凭想象乱调一气。看下面例子,其中default是我们公司定做的系统默认的一些参数值。add by yangjian2并非全部都要调整,我只挑几个比较重要的参数说明一下,更多TCP方面的调优请参见 man 7 tcp 。
#++++++++++++++++++default++++++++++++++++++++++++++++++
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 180000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096873804194304
net.ipv4.tcp_wmem = 4096163844194304
#++++++++++++++++++add by yangjian2++++++++++++++++++++++
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog =32768
net.core.somaxconn = 32768

net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

net.ipv4.tcp_tw_recycle = 1
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++

maxfd: 对于系统所能打开的最大文件描述符fd,可以通过以root启动程序,setrlimit()设置maxfd后,再通过setuid()转为普通用户提供服务,我用的 int set_max_fds(int maxfds); 函数是zhongying提供的。这比用ulimit来的方便的多,不晓得为什么那么多开源软件都没这样用。

net.ipv4.tcp_max_syn_backlog = 65536 : 这个参数可以肯定是必须要修改的,默认值1024,我google了一下,几乎是人云亦云,没有说的明白的。 要讲明白得从man listen说起,int listen(int sockfd, int backlog);早期的网络编程都中描述,int backlog 代表未完成队列SYN_RECV状态+已完成队列ESTABLISHED的和。但是这个意义在Linux2.2以后的实现中已经被改变了,int backlog只代表已完成队列ESTABLISHED的长度,在AF_INET协议族中(我们广泛使用的就是这个),当int backlog大于SOMAXCONN  (128 inLinux 2.0 & 2.2)的时候,会被调整为常量SOMAXCONN大小。这个常量可以通过net.core.somaxconn来修改。而未完成队列大小可以通过net.ipv4.tcp_max_syn_backlog来调整,一般遭受syn flood攻击的网站,都存在大量SYN_RECV状态,所以调大tcp_max_syn_backlog值能增加抵抗syn攻击的能力。

net.ipv4.tcp_syncookies = 1 :当出现syn等候队列出现溢出时象对方发送syncookies。目的是为了防止syn flood攻击 , 默认值是 0。不过man listen说当启用syncookies时候,tcp_max_syn_backlog的sysctl调整将失效,和这个描述不是很符合。参见下面两个描述分别是man listen和man 7 tcp:
When syncookies are enabled there is no logical maximum length and this tcp_max_syn_backlog sysctlsettingisignored.
Send outsyncookieswhen the syn backlog queue of a socket overflows.
但我可以肯定的说这个选项对你的性能不会有提高,而且它严重的违背TCP协议,不允许使用TCP扩展,除非遭受攻击,否则不推荐使用。

net.ipv4.tcp_synack_retries = 2:对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。如果你的网站SYN_RECV状态确实挺多,为了避免syn攻击,那么可以调节重发的次数。

net.ipv4.tcp_syn_retries = 2 :对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右。这个对防止syn攻击其实是没有用处的,也没必要调节。

net.ipv4.tcp_max_orphans = 3276800 : 这个最好不要修改,因为每增加1,将消耗~64k内存。即使报错 TCP: too many of orphaned sockets 也有可能是由于你的net.ipv4.tcp_mem过小,导致的Out of socket memory,继而引发的。

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

net.ipv4.tcp_rmem = 4096 87380 4194304 : 接收缓冲区,原理同上。

net.ipv4.tcp_mem = 94500000 915000000 927000000 :
low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
high:允许所有tcp sockets用于排队缓冲数据报的内存页数。

一般情况下这个值是在系统启动时根据系统内存数量计算得到的,如果你的dmesg报 Out of socket memory,你可以试着修改这个参数,顺便介绍3个修改方法:
1, echo “94500000 915000000 927000000″ > /proc/sys/net/ipv4/tcp_wmem
2, sysctl -w "net.ipv4.tcp_mem = 94500000 915000000 927000000"
3, net.ipv4.tcp_mem = 94500000 915000000 927000000(vi /etc/sysctl.conf然后sysctl -p生效)

下面命令也许能提供些信息,在你修改tcp参数时做个参考:
[sports@xk-6-244-a8 nbahttpd_beta4.0]$ cat/proc/net/sockstat
sockets: used 1195
TCP: inuse 1177 orphan 30 tw 199 alloc 1181 mem 216
UDP: inuse 0 mem 0
RAW: inuse 0
FRAG: inuse 0 memory 0

其他我就不多说了,知道这些基本就能解决绝大部分问题了。

分享到:
评论

相关推荐

    Linux内核参数优化调整

    关于cache怎么设置,linux系统内核设置优化tcp网络,另外可以参考优化内核配置

    Linux内核参数调整及ORACLE调优参数

    Linux内核参数调整及ORACLE调优参数

    linux内核tcp优化

    linux tcp 内核 优化 网络,本文档对linux的tcp优化参数做了详尽的说明。很不错,值得收藏,以便日后备用。

    linux服务优化脚本

    关闭无用的系统服务,加快系统启动速度。可根据注释自行修改

    Linux 内核参数详解-KERNEL.docx

    主要讲解Linux内核参数。kernel.wake_balance = 1 导致调度运行线程被唤醒的任何avaialble调度的CPU。而不是它的CPU的优化的基础上缓存痕迹。默认为1 kernel.suid_dumpable = 0 kernel.unknown_nmi_panic = 0 该参数...

    CATT-L#Tips#CentOS 优化 Linux 内核参数1

    CentOS 优化 Linux 内核参数在末尾追加以下内容使配置立即生效。

    Linux优化-修改内核参数.rar

    Linux优化-修改内核参数

    优化Linux的内核参数来提高服务器并发处理能力

    告诉你如何修改linux内核参数来提高系统的性能。

    linux内核配置文件说明参考

    linux内核配置文件说明参考 中英文说明 如: Kernel->user space relay support (formerly relayfs) 在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口 Initramfs source file(s) ...

    Linux内核参数调整方法

    由于Linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效。但是,当系统重新启动后,原来设置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctl.conf文件中读取内核参数,因此...

    Linux之TCPIP内核参数优化1

    第三个值是内存使的上 第三个值是接收缓冲区空 第三个值是发送缓冲区空

    教案之优化Linux的内核参数来提高服务器并发处理能力.pdf

    教案之优化Linux的内核参数来提高服务器并发处理能力.pdf

    oracle11g设置内核参数和limit的增强

    从ORACLE 11gR2 for linux版本,已经不需要DBA们手动去编辑/etc/...件和/etc/security/limits.conf文件来修改操作系统的内核参数和限额,这些工作ORACL E会生成一个脚本,DBA只需要用root用户执行一下这个脚本即可。

    linux内核调试分析指南

    linux内核调试分析指南 linux内核调试分析指南--上篇 本文档已经转到下面的网址,位于zh-kernel.org的文档停止更新,请访问新网址 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一...

    高并发nginx服务器的linux内核优化配置讲解

    由于默认的linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,是的Nginx可以拥有更高的性能; 在优化内核时,可以做的事情很多,不过,我们通常会...

    linux-操作系统优化方案.doc

    下边将分四部分介绍在Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server系统下,如何用以下几种技巧进行性能的优化: 1、Disabling daemons (关闭 daemons) 2、Shutting down the GUI (关闭GUI) 3、...

    linux下oracle优化

    下面的步骤给出了如何去校验并设置这些参数的值。 通过执行下面的命令进行校验 /sbin/sysctl -a | egrep "kernel.shmall|kernel.shmmax|kernel.shmmn|kernel.sem...有关优化内核参数更多信息请参考操作系统相关文档。

    优化Linux的内核提高服务器并发能力

    有关并发处理的技术文档,可做优化的参考。在节省成本的情况下,可以修改Linux的内核相关TCP参数,来最大的提高服务器性能。当然,最基础的提高负载问题,还是升级服务器硬件了,这是最根本的

    浅谈Nginx10m+高并发内核优化详解

    默认的Linux内核参数考虑的是最通用场景,不符合用于支持高并发访问的Web服务器,所以需要修改Linux内核参数,这样可以让Nginx拥有更高的性能; 在优化内核时,可以做的事情很多,不过,我们通常会根据业务特点来...

    web服务器部分服务器优化参数解析

    web服务器部分服务器优化参数解析

Global site tag (gtag.js) - Google Analytics