内核相关参数(/etc/sysctl.conf)
net.core.somaxconn = 65535 决定每个端口监听队列的长度
net.core.netdev_max_backlog = 65535 允许发送到队列包的最大的数目
net.ipv4.tcp_max_syn_backlog = 65535 还未获得链接的请求保存的最大数目,超过的会被抛弃
加快tcp的回收
net.ipv4.tcp_fin_timeout = 10 tcp处理等待状态的时间,减少timeout的时间
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fw_recycle = 1
决定tcp缓冲区接受和发送默认值和最大值
net.core.wmem_default = 87380
net.core.wmem_max = 16777216
net.core.rmem_default = 87380
net.core.rmem_max = 16777216
决定失效链接所占用的tcp系统资源的数量,加快资源回收的效率
net.ipv4.tcp_keepalive_time = 120 表示tcp发送keepalive消息的时间的间隔单位为秒,用于确认tcp链接是否有效
net.ipv4.tcp_keepalive_intvl = 30 表示当探测消息未获得响应时重复该时间的间隔,单位是秒
net.ipv4.tcp_keepalive_probes = 3 表示鉴定失效前发送多少次keepalive
内存相关的参数
kernel.shmmax = 4294967295 linux内核参数中最重要的参数之一,用于定义单个内存段的最大值。
1注意:这个参数应该设置的足够大,以便能在一个共享内存段下容纳下整个的Innodb缓冲池的大小。
这个参数如果设置的过低,可能需要设置多个内存段,可能会导致系统的性能下降。
这个值的大小对于64位linux系统,可取的最大值为物理内存值-1 byte,建议值为大于物理内存的一半,一般取值大于Innodb 缓冲池的大小即可,可以取物理内存-1 byte。
4294967295 = 4G
vm.swappiness = 0 这个参数当内存不足时会对性能产生比较明显的影响
linux的内存交换区:在linux安装时都会有一个特殊的磁盘分区,称之为系统交换分区。
如果我们使用free-m在系统中查看可以看到类似下面的内容其中swap就是交换分区。
swap的作用:当操作系统因为没有足够的内存时就会将一些虚拟内存写到磁盘的交换分区中,这样就会发生内存交换。内存交换对数据库是透明的 ,只有操作系统知道特定的虚拟内存地址是物理内存还是在硬盘中,一旦发生这种内存交换呢,对mysql就会产生灾难性的影响。vm.swappiness = 0 就是告诉linux内核,除非虚拟内存完全满了,否则不要使用交换区。
/sbin/sysctl -p 配置后立即生效
增加资源限制(/etc/security/limit.conf)
这个文件实际上是Linx PAM 也就是插入式认证模块的配置文件。打开文件数的限制。
* soft nofile 65535
* hard nofile 65535
把打开文件的数量增加到65535保证能打开足够多文件,文件修改后需要系统重启才能生效。
磁盘调度策略(/sys/block/sda/queue/scheduler)
查看磁盘调度策略: cat /sys/block/sda/queue/scheduler
cfq策略-不适合mysql,会导致很差的响应时间。
noop 电梯式调度策略:noop实现了一个fifo队列,它像电梯的工作方法一样对I/O请求进行组织,当有一个新的请求到来时,它将请求合并到最近的请求之后,以此来保证请求同一介质。noop倾向饿死读而不利于写,因此noop对于闪存设备、RAM及嵌入式系统是最好的选择。
deadline 调度策略:deadline确保了一个截止时间内服务请求,这个戒指时间是可调的,而默认读期限短于写期限。这样就防止了写操作因为不能被读取而饿死的现象,deadline对数据库类应用是最好的选择。
anticipatory 预料I/O调度策略:本质上与deadline一样,但在最后一次读操作要等待6ms,才能继续进行对其它I/O请求进行调度。用写入延时换取最大的写入吞吐量。AS适合于写入较多环境,比如文件服务器,AS对数据库环境表现很差。
echo deadline > /sys/block/sda/queue/scheduler 改变系统策略为 deadline