Linux系统内核优化

写在最前面的话:

最近由于项目的要实现无限级代理的模式,加上要实时统计业绩等等一些业务逻辑,导致对性能这块要求比较高一些,所以趁着这个机会呢,也分享一下实践后和综合一些资料之后的笔记,写得不一定很完美,但是也希望对有需要的朋友一丝丝的帮助。

分析:

大多数MySQL都部署在linux系统上,所以操作系统的一些参数也会影响到MySQL性能,以下对linux内核进行适当优化。

一、防止TCP存在大量的TIME_WAIT状态的连接

1、查看连接数netstat -na|awk '/^tcp/ {++S[$NF]} END {for(i in S) print i,S[i]}'

2、查找whereis sysctl.cnf


3、执行命令 sysctl -a 查看当前系统中生效的所有参数
4、修改vim /etc/sysctl.conf

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000

TCP参数说明:

net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。默认是60s。

net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。

net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。

net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_max_tw_buckets = 5000表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。

4、然后执行以下命令让参数生效:/sbin/sysctl -p

二、 在linux系统中,如果进程打开的文件句柄数量超过系统默认值1024,就会提示“too many files open”信息,所以要调整打开文件句柄限制,linux下ulimit参数调整。

1、修改vim /etc/security/limits.conf * 代表所有用户,也可以指定用户,重启系统生效

* soft nofile 65535
* hard nofile 65535

2、重启

ulimit -SHn 65536
ulimit -n

你可能感兴趣的:(Linux系统内核优化)