以下内核参数未做相关优化,均使用系统默认值
net.ipv4.tcp_mem = 196608 262144
net.core.wmem_max = 131071
net.core.rmem_max = 131071
net.ipv4.tcp_wmem = 4096
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_retries2 = 15
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_max_tw_buckets = 180000
net.ipv4.ip_local_port_range = 32768
net.core.somaxconn = 128
kernel.sem = 250 32000 32 128
net.ipv4.conf.lo.arp_accept = 0
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.all.arp_accept = 0
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.all.arp_filter = 0
net.ipv4.neigh.default.gc_thresh1 = 128
net.ipv4.neigh.default.gc_thresh2 = 512
net.ipv4.neigh.default.gc_thresh3 = 1024
net.ipv4.ip_conntrack_max = 65536
net.ipv4.netfilter.ip_conntrack_max = 65536
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 432000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_max_retrans = 300
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 10
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120
kernel.sem = 250 32000 32 128
下面是各个参数详细配置情况及其含义:
内存&缓存
vm.swappiness = 10
配置方式:
在文件/etc/rc.local配置 echo 10 > /proc/sys/vm/swappiness
含义:
swappiness的值的大小对如何使用swap分区是有着很大的联系的。
swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,
swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到 swap空间里面。
两个极端,对于centos linux 5的默认设置,这个值等于60,建议修改为10
kernel.shmmax = 68719476736
配置方式:
在/etc/sysctl.conf配置kernel.shmall = 4294967296
含义:
定义了共享内存段的最大尺寸(以字节为单位)
kernel.shmall = 4294967296
配置方式:
在/etc/sysctl.conf配置kernel.shmall = 4294967296
含义:
表示系统一次可以使用的共享内存总量(以页为单位)。缺省值就是2097152,通常不需要修改。
net.ipv4.tcp_mem = 196608 262144
系统默认值,SA未优化
含义
net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力.
net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段.
net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket
net.core.wmem_max = 131071
系统默认参数,SA未优化
含义:
最大socket写buffer
net.core.rmem_max = 131071
系统默认参数,SA未优化
含义:
最大socket读buffer
net.ipv4.tcp_wmem = 4096
系统默认参数,SA未优化
含义:
TCP写buffer
net.ipv4.tcp_rmem = 4096 87380 4194304
系统默认参数,SA未优化
含义:
TCP读buffer
kernel.msgmnb = 65536
配置方式:
在/etc/sysctl.conf配置kernel.msgmnb = 65536
含义:
每个消息队列的最大字节限制
kernel.msgmax = 65536
配置方式:
在/etc/sysctl.conf配置kernel.msgmax = 65536
含义:
每个消息的最大size
TCP/IP相关
net.ipv4.tcp_syncookies = 1
配置方式:
在/etc/sysctl.conf配置net.ipv4.tcp_syncookies = 1
含义:
表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_synack_retries = 3
在/etc/sysctl.conf配置net.ipv4.tcp_synack_retries = 3
含义:
为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。
net.ipv4.tcp_syn_retries = 2
在/etc/sysctl.conf配置net.ipv4.tcp_syn_retries = 2
含义:
在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_tw_reuse = 0
系统默认值,SA未优化
含义:
表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 0
系统默认值,SA未优化
含义:
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 6
配置方式:
内核源码中修改相关参数
含义:
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1800
配置方式:
内核中做了修改(与httpd和nginx等web 应用程序有关)
含义:
表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为30分钟。
net.ipv4.tcp_max_syn_backlog = 20480
配置方式:
在文件/etc/sysctl.conf中设置net.ipv4.tcp_max_syn_backlog = 20480
含义:
进入SYN包的最大请求队列.默认1024.对重负载服务器,增加该值显然有好处.
net.ipv4.tcp_retries2 = 15
系统默认值,SA未修改
含义:
TCP失败重传次数,默认值15,意味着重传15次才彻底放弃.可减少到特定值,以尽早释放内核资源.
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
系统默认配置,SA未配置
含义:
如果某个TCP连接在idle 30分钟后,内核才发起探测(probe).如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效.
net.ipv4.tcp_max_tw_buckets = 180000
系统默认值,SA未配置
含义:
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
随机端口
net.ipv4.ip_local_port_range = 32768
系统默认参数,SA未优化
含义:
表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为10240到65000。
core
net.core.somaxconn = 128
系统默认设置,SA未配置
含义:
listen()的默认参数,挂起请求的最大数量.默认是128.对繁忙的服务器,增加该值有助于网络性能.
net.core.netdev_max_backlog = 1000
配置方式
内核中修改
含义:
进入包的最大设备队列.默认是300,对重负载服务器而言,该值太低,可调整到2000.
kernel.core_pattern = core-%e-%p-%s-%t
配置方式:
在文件/etc/sysctl.conf中设置kernel.core_pattern = core-%e-%p-%s-%t
含义:
当系统中的一些程序在遇到一些错误以及crash时,系统会自动产生core file记录crash时刻系统信息包括内存和寄存器信息,用以程序员日后debug时可以使用
文件描述符
ulimit -Hn 10240
ulimit -n 10240
配置方式:
在文件/etc/rc.local中设置,开机启动时设置
ARP
net.ipv4.conf.lo.arp_accept = 0
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.all.arp_accept = 0
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.all.arp_filter = 0
开启arp响应,在使用lvs开源负载均衡时候,需要关闭server的arp响应,因公司使用F5设备,vip与server的IP在不同网段,故不需要关闭arp响应
net.ipv4.neigh.default.gc_thresh1 = 128
系统默认设置,SA未配置
含义:
存在于ARP高速缓存中的最少层数,如果少于这个数,垃圾收集器将不会运行。缺省值是128。
net.ipv4.neigh.default.gc_thresh2 = 512
系统默认设置,SA未配置
含义:
保存在 ARP 高速缓存中的最多的记录软限制。垃圾收集器在开始收集前,允许记录数超过这个数字 5 秒。缺省值是 512。
net.ipv4.neigh.default.gc_thresh3 = 1024
系统默认设置,SA未配置
含义:
保存在 ARP 高速缓存中的最多记录的硬限制,一旦高速缓存中的数目高于此,垃圾收集器将马上运行。缺省值是1024。
iptables
net.ipv4.ip_conntrack_max = 65536
net.ipv4.netfilter.ip_conntrack_max = 65536
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 432000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_max_retrans = 300
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 10
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120
以上iptables参数均是系统默认参数,因为目前系统不使用iptables,故可以不考虑
信号量相关
kernel.sem = 250 32000 32 128
系统默认值,SA未优化
含义:
# ipcs -ls
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
SEMMNI
SEMMNI定义了max number of arrays的大小,表示系统内的最大semaphore set大小,这个缺省值128差不多了.
SEMMSL
SEMMSL 定义了max semaphores pre array的大小,表示每个semaphore set的最大semaphore数.oracle进程获得系统的一个semaphore set,oracle进程内的每个线程需要一个semaphore,假如你的系统内只有一个oracle实例,你的SEMMSL的值需要等于或稍大于 (oracle中定义的最大PROCESSES数+10),如果是MTS模式,可以适当放小.
SEMMNS
SEMMNS定义 了max semaphores system wide的大小,表示系统内允许的最大semaphore set大小,系统缺省大小为(SEMMNI*SEMMSL),oracle推荐的设置为系统内所有数据库的PROCESSES参数的总和,加上最大的的那个PROCESSES,然后加上10.
SEMOPM
SEMOPM定义了每个semop系统调用能够操作的最大semaphore数,semop系统调用主要是一个semaphore set的semaphore操作,这个值系统缺省为32,建议设置等于SEMMSL.
另:
Httpd重启失败,信号量过多,是因为我们关闭apache的时候使用了kill -9 来关闭程序来造成的,后续优化改进。