Kernel 优化


内核参数一般优化的选项有:内存信号、文件句柄、缓存TCP队列等


Kernel优化对应的配置文件主要通过kernelnet选项中调整

[root@server1kernel]# ls /proc/sys/

abi crypto debug dev fs kernel net vm


例如:我们想禁止其他人Ping我们的服务器,可以通过修改icmp的控制文件实现

1.方法1

通过echo

[root@server1 ipv4]# echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

[root@server1 ipv4]# cat/proc/sys/net/ipv4/icmp_echo_ignore_all


2.方法2

通过sysctl进行修改(sysctl 修改的文件默认是从/proc/sys/下开始的,所以/proc/sys/这部分可以省略,后面目录链接用“.”进行连接)

[root@server1 ipv4]# sysctl -wnet.ipv4.icmp_echo_ignore_all=1

[root@server1 ipv4]# cat/proc/sys/net/ipv4/icmp_echo_ignore_all

1


3.方法3通过修改/etc/sysctl.conf进行开机加载

将修改的选项添加到sysctl.conf文件中,开机加载

net.ipv4.icmp_echo_ignore_all=1


kernel参数优化

1.内存参数设置

共享内存设置:

共享内存参数在/proc/sys/kernel/

[root@server1kernel]# ls /proc/sys/kernel/shm*

/proc/sys/kernel/shmall /proc/sys/kernel/shmmni

/proc/sys/kernel/shmmax /proc/sys/kernel/shm_rmid_forced

有关共享内存的参数

[root@server1kernel]# sysctl -a |grep shm

kernel.shmmax =68719476736 --系统中一个共享内存段可使用的最大内存数(单位字节)

kernel.shmall =4294967296 --系统中可用所有内存页(一页就是4096byte

kernel.shmmni =4096 --系统中可用最大共享内存段

kernel.shm_rmid_forced= 0

vm.hugetlb_shm_group= 0

例如:如果电脑上面进行数据库查询,一个查询条目需要的共享内存已经超过了一个共享内存段的容量,那么查询起来又有的数据就不能全部放在内存中,这样会影响效率,需要将可用内存段进行修改,一般可将可用内存段改成和电脑物理内存一样的大小或者小一点。

修改方法:vi /etc/sysctl.conf

# Controls themaximum number of shared memory segments, in pages

kernel.shmmax =68719476736


2.系统信号量的限制

过滤信号量设置:

[root@server1kernel]# sysctl -a |grep sem

kernel.sem =250 32000 32 128


kernel.sem

250

32000

32

128


信号量集合

可用最大信号量

信号量集合可用操作数

每个集合里面的信号量

一般可以将可用集合数设置为和信号量一样大,或者小一点。(大多数应用系统设置为128/256


3.文件句柄(系统同时可打开的文件个数)

文件句柄设置:

[root@server1kernel]# cat /proc/sys/fs/file-max

46935 --当前系统最大文件句柄支持数

当前系统文件句柄为:

[root@server1kernel]# cat /proc/sys/fs/file-nr

320 0 46935 --当前系统文件句柄使用量

当现在系统使用的文件句柄数非常接近系统默认支持文件句柄数的时候,需要修改file-max,参数修改应成倍的增加。

[root@server1kernel]# sysctl -w fs.file-max=93870

fs.file-max =93870

[root@server1kernel]# cat /proc/sys/fs/file-max

93870


4.缓冲区域队列

网络在传输的过程中是需要缓冲的

[root@server1kernel]# sysctl -a |grep mem

vm.overcommit_memory= 0

vm.nr_hugepages_mempolicy= 0

vm.lowmem_reserve_ratio= 256 256 32

vm.memory_failure_early_kill= 0

vm.memory_failure_recovery= 1

net.core.wmem_max= 229376

net.core.rmem_max= 229376

net.core.wmem_default= 229376

net.core.rmem_default= 229376

net.core.optmem_max= 20480

net.ipv4.igmp_max_memberships= 20

net.ipv4.tcp_mem= 44832 59776 89664

net.ipv4.tcp_wmem= 4096 16384 1912832

net.ipv4.tcp_rmem= 4096 87380 1912832

net.ipv4.udp_mem= 44832 59776 89664

net.ipv4.udp_rmem_min= 4096

net.ipv4.udp_wmem_min= 4096

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

4.1tcp接收队列缓冲区(单位字节),一般应用于下载的环境中。

net.ipv4.tcp_rmem = 4096 87380 1912832

4096最小值,87380 是平均值,1912832 最大值。

一般情况下将其改成为:

[root@server1 kernel]# vi/etc/sysctl.conf

net.ipv4.tcp_rmem =4096 87380 8388608

[root@server1 kernel]# cat/proc/sys/net/ipv4/tcp_rmem

4096 87380 8388608


4.2tcp发送缓冲区(单位字节)一般应用于发送数据的环境中

net.ipv4.tcp_wmem = 4096 16384 1912832

4096最小值,87380 是平均值,1912832 最大值

一般情况下将其改成为:

[root@server1 kernel]# vi/etc/sysctl.conf

net.ipv4.tcp_rmem =4096 87380 8388608

[root@server1 kernel]# cat/proc/sys/net/ipv4/tcp_rmem

4096 87380 8388608


4.3tcp系统缓冲区(单位为页面,以页面位4096字节)

net.ipv4.tcp_mem = 44832 59776 89664

一般设置为和物理内存相当


5.TCP连接优化

当系统发送一个请求之后,服务器段就会接收这个syn,并且将syn放到队列中,即syn的缓冲队列backlog,如果缓冲队列比较小,后续的链接就会和服务器无法连接

[root@server1kernel]# sysctl -a |grep syn

fs.quota.syncs= 0

net.ipv4.tcp_syn_retries= 5

net.ipv4.tcp_synack_retries= 5

net.ipv4.tcp_syncookies= 1

net.ipv4.tcp_max_syn_backlog= 128

net.ipv6.conf.all.max_desync_factor= 600

net.ipv6.conf.default.max_desync_factor= 600

net.ipv6.conf.lo.max_desync_factor= 600

net.ipv6.conf.eth0.max_desync_factor= 600

5.1synbacklogsyn缓冲区。系统默认为128,当服务器的并发量大于128时候后续请求将无法得到服务器响应。一般将其设置为系统支持并发量的3-4

[root@server1 kernel]# vi/etc/sysctl.conf

net.ipv4.tcp_max_syn_backlog = 512


5.2syntcp_synack_retries应答重试次数,系统默认为5,一般设置为2-3

[root@server1 kernel]# vi/etc/sysctl.conf

net.ipv4.tcp_synack_retries = 3


5.3syntcp_syn_retries,syn应答次数也是一样默认为5,设置为2-3。可防止***。


6.更多参数略.