001、大页内存管理
建议:关闭
Transparent HugePages:大页内存管理,不过他和标准的大页内存管理有区别。
Transparent HugePages是在运行时动态分配内存的,而标准的HugePages是在系统启动时预先分配内存,并在系统运行时不再改变。
因为Transparent HugePages是在运行时动态分配内存的,所以会带来在运行时内存分配延误。所以ORACLE是建议不使用Transparent HugePages功能的,如果需要大页内存管理功能来加强性能,建议使用标准的大页内存管理。
尽管Transparent HugePages的本意是为提升性能,但某些数据库厂商还是建议直接关闭(比如说Oracle、MongoDB等),否则可能导致性能下降,内存锁,甚至系统重启等问题。
比较流行的关闭方法有两种
第一种:在/etc/rc.local中加入如下两行
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >>/etc/rc.d/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >>/etc/rc.d/rc.local
第二种:
1 .编辑 /etc/default/grub,在GRUB_CMDLINE_LINUX加入选项 transparent_hugepage=never
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora/swap rd.lvm.lv=fedora/root rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
2.重新生成grub配置文件
On BIOS-based machines, issue the following command as root:
# grub2-mkconfig -o /boot/grub2/grub.cfg
On UEFI-based machines, issue the following command as root:
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
step3 重启你的系统
验证结果
重启前
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
重启后
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
002、swap内存
建议:vm.swappiness = 10
swappiness,Linux内核参数,控制换出运行时内存的相对权重。
swappiness参数值可设置范围在0到100之间。 低参数值会让内核尽量少用交换,更高参数值会使内核更多的去使用交换空间。
默认值为60(参考网络资料:当剩余物理内存低于40%(40=100-60)时,开始使用交换空间)。
对于大多数操作系统,设置为100可能会影响整体性能,而设置为更低值(甚至为0)则可能减少响应延迟。
swappiness参数值说明
vm.swappiness = 0
仅在内存不足的情况下--当剩余空闲内存低于vm.min_free_kbytes limit时,使用交换空间。
vm.swappiness = 1
内核版本3.5及以上、Red Hat内核版本2.6.32-303及以上,进行最少量的交换,而不禁用交换。
vm.swappiness = 10
当系统存在足够内存时,推荐设置为该值以提高性能。
vm.swappiness = 60
默认值
vm.swappiness = 100
内核将积极的使用交换空间。
对于内核版本为3.5及以上,Red Hat内核版本2.6.32-303及以上,多数情况下,设置为1可能比较好,0则适用于理想的情况下(it is likely better to use 1 for cases where 0 used to be optimal)
修改swappiness的值
1)临时设置(重启后失效)
sysctl -w vm.swappiness=10
sysctl -a | grep vm.swappiness
vm.swappiness = 30
2)永久生效echo 'vm.swappiness = 10' > /etc/sysctl.d/swappiness.conf
sysctl -a | grep vm.swappiness
003、net.core.somaxconn
建议:net.core.somaxconn=65535
1)net.core.somaxconn概念介绍
对于一个TCP链接,Server与Client需要通过三次握手来建立网络链接,当三次握手成功之后,我们就可以看到端口状态由LISTEN转为ESTABLISHED,接着这条链路上就可以开始传送数据了
net.core.somaxconn 是Linux中的一个内核(kernel)参数,表示socket监听(listen)的backlog上限。
backlog 是 socket的监听队列,当一个请求(request)尚未被处理或者建立时,它就会进入backlog。
而socket server可以一次性处理backlog中的所有请求,处理后的请求不再位于监听队列中。
当Server处理请求较慢时,导致监听队列被填满后,新来的请求就会被拒绝。
backlog参数主要用于底层方法int listen(int sockfd, int backlog), 在解释backlog参数之前,我们先了解下tcp在内核的请求过程,其实就是tcp的三次握手:
client发送SYN到server,将状态修改为SYN_SEND,如果server收到请求,则将状态修改为SYN_RCVD,并把该请求放到syns queue队列中。
server回复SYN+ACK给client,如果client收到请求,则将状态修改为ESTABLISHED,并发送ACK给server。
server收到ACK,将状态修改为ESTABLISHED,并把该请求从syns queue中放到accept queue。
在linux系统内核中维护了两个队列:syns queue和accept queue
syns queue
用于保存半连接状态的请求,其大小通过/proc/sys/net/ipv4/tcp_max_syn_backlog指定,一般默认值是512,不过这个设置有效的前提是系统的syncookies功能被禁用。互联网常见的TCP SYN FLOOD恶意DOS攻击方式就是建立大量的半连接状态的请求,然后丢弃,导致syns queue不能保存其它正常的请求。
accept queue
用于保存全连接状态的请求,其大小通过/proc/sys/net/core/somaxconn指定,在使用listen函数时,内核会根据传入的backlog参数与系统参数somaxconn,取二者的较小值。
如果accpet queue队列满了,server将发送一个ECONNREFUSED错误信息Connection refused到client。
标签:swappiness,vm,queue,参数,内存,优化,backlog,内核 From: https://www.cnblogs.com/suyj/p/16878901.html