说明:文中单引号用markdown写出来格式不对!请自行改为单引号!
1.vm.overcommit_memory
查看当前值:sysctl -a | grep vm.overcommit_memory,默认值为0,
可选值有0、1、2
0:计算是否有足够的可用内存,计算过程比较复杂,有兴趣的自行查阅资料,如果有足够的内存,就分配成功,否则分配失败
1:直接分配成功,不做任何判断,直到用完为止
2:计算内存总量 * vm.overcommit_ratio/100 + SWAP的总量,如果申请空间超过此值,则申请失败,否则申请成功
建议修改为1
修改:
echo ‘vm.overcommit_memory=1’ >> /etc/sysctl.conf
sysctl -p 刷新
2.vm.swappiness
控制进程的swap行为。OS会把一部分磁盘空间作为swap区域,操作系统会把当前不活跃的进程调整为睡眠状态,然后把进程数据从内存转移到磁盘上的swap区域,腾出内存空间给其他活跃进程使用。
查看当前值:sysctl -a | grep vm.swappiness,默认值为60
可选值为0-100,数字越小,表示操作系统尽可能将进程都使用物理内存而不是转移到磁盘swap区域去。
设置为0,就表示尽量让进程都常驻物理内存,不转移到磁盘swap区域。
设置为100,就表示尽量将一些进程转移到磁盘swap区域中,腾出内存供其他活跃进程使用。
生产环境建议将这个数值调低一些,尽量让进程都使用物理内存
修改:
echo ‘vm.swappiness=10’ >> /etc/sysctl.conf
sysctl -p 刷新
3.ulimit
最大文件句柄,就是一个进程最多能打开多少个文件。磁盘读写,网络通信都跟这个参数有关,默认值为1024,太小了,建议调整。
查看当前值:ulimit -n
修改:
echo ‘ulimit -n 1000000’ >> /etc/profile
source /etc/profile 刷新
4.tcp backlog
tcp连接队列
半连接状态:服务器处于Listen状态时收到客户端SYN报文时放入半连接队列中,即SYN queue(服务器端口状态为:SYN_RCVD)
全连接状态:TCP的连接状态从服务器(SYN+ACK)响应客户端后,到客户端的ACK报文到达服务器之前,则一直保留在半连接状态中;当服务器接收到客户端的ACK报文后,该条目将从半连接队列搬到全连接队列尾部,即 accept queue (服务器端口状态为:ESTABLISHED)
linux内核2.2之后,分别用两个backlog分别限制半连接队列大小和全连接队列大小
半连接队列长度由 /proc/sys/net/ipv4/tcp_max_syn_backlog 指定
全连接队列长度由 /proc/sys/net/core/somaxconn 指定 或者由/etc/sysctl.conf的参数net.core.somaconn指定
建议增大至1024以上
增大半连接队列长度: echo 1024 > /proc/sys/net/ipv4/tcp_max_syn_backlog
增大全连接队列长度: echo 1024 > /proc/sys/net/core/somaxconn 或者 echo ‘net.core.somaconn=1024’ >> /etc/sysctl.conf 然后 sysctl -p 刷新