Kernel 优化
内核参数一般优化的选项有:内存、信号、文件句柄、缓存、TCP队列等
Kernel优化对应的配置文件主要通过kernel和net选项中调整
[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.1syn的backlog,syn缓冲区。系统默认为128,当服务器的并发量大于128时候后续请求将无法得到服务器响应。一般将其设置为系统支持并发量的3-4倍
[root@server1 kernel]# vi/etc/sysctl.conf
net.ipv4.tcp_max_syn_backlog = 512
5.2syn的tcp_synack_retries应答重试次数,系统默认为5,一般设置为2-3次
[root@server1 kernel]# vi/etc/sysctl.conf
net.ipv4.tcp_synack_retries = 3
5.3syn的tcp_syn_retries,syn应答次数也是一样默认为5,设置为2-3。可防止攻击。
6.更多参数略.