一、sysctl.conf优化

简介:Linux系统内核参数的配置文件为/etc/sysctl.conf和/etc/sysctl.d/目录。其读取顺序为:/etc/sysctl.d/下面的文件按照字母排序;然后读取/etc/sysctl.conf。

一般所有对系统对修改参数放在/etc/sysctl.d/目录,系统原有对sysctl.conf文件保存一些更加基础对配置。

sysctl.conf可优化参数如下:

fs.file-max = 65535

 

# 减少交换内存使用,默认60,建议10-30

vm.swappiness = 30

 

# 脏数据的比例和处理,根据场景不同设置

# 参考 https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/

# 如果是数据库服务器,希望数据能够尽快安全写入,可降低内存缓存比例

# vm.dirty_background_ratio = 5

# vm.dirty_ratio = 10

 

# 如果是业务服务器,对数据安全写入无要求,可加大内存缓存比例

# vm.dirty_background_ratio = 50

# vm.dirty_ratio = 80

 

# 设置为1,内核允许分配所有的物理内存,Redis常用

vm.overcommit_momory = 1

 

# 系统拥有的内存数,ElasticSearch启动必备

vm.max_map_count = 262144

 

# 设置为1

net.ipv4.tcp_no_metrics_save = 1

 

# 禁用 sysrq 功能

kernel.sysrq = 0

 

# 控制 core 文件的文件名中是否添加 pid 作为扩展

kernel.core_uses_pid = 1

 

# 设置为1, 防止 SYN FlOOD 攻击

net.ipv4.tcp_syncookies = 1

 

# 消息队列的最大消息大小,默认8k,建议64kb

kernel.msgmax = 65536

# 消息队列存放消息的总字节数

kernel.msgmnb = 163840

 

# TIME_WAIT socker的最大数目,不宜太大或者太小,nginx反向代理必备

net.ipv4.tcp_max_tw_buckets = 50000

# 打开 SACK  选项,设置为1

net.ipv4.tcp_sack = 1

# 激活窗口扩充因子,支持64kb以上数据传输

net.ipv4.tcp_window_scaling = 1

 

# TCP 缓冲区内存,连接数达到非常高时候需要配置好

net.ipv4.tcp_mem = 786432 2097152 3145728

net.ipv4.tcp_rmem = 4096 4096 16777216

net.ipv4.tcp_wmem = 4096 4096 16777216

 

# socket 缓冲区默认值和最大值

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

 

# ACCEPT 等待队列长度,适当,太大了堆积也无用

net.core.netdev_max_backlog = 65535

 

# 允许最大并发连接数,重要

net.core.somaxconn = 65535

 

# 不属于任何进程的socket数目,不宜太大,防止攻击

net.ipv4.tcp_max_orphans = 65535

 

# SYNC等待队列长度,适当,太大了排队也没用

net.ipv4.tcp_max_syn_backlog = 65535

 

# 禁用timestamp,重要,高并发下设置为0

net.ipv4.tcp_timestamps = 0

 

# 发送SYNC+ACK 的重试次数,不宜太大,5以内

net.ipv4.tcp_synack_retries = 1

# 发送SYNC的重试次数,不宜太大,5以内

net.ipv4.tcp_syn_retries = 1

 

# 允许回收TCP连接,重要,必须为1

net.ipv4.tcp_tw_recycle = 1

 

# 允许重用TCP连接,重要,必须为1

net.ipv4.tcp_tw_reuse = 1

 

# 服务端主动关闭后,客户端释放连接的超时,重要,<30

net.ipv4.tcp_fin_timeout = 5

 

# 允许TCP连接保持的空闲keepalive时长,不需要太长

net.ipv4.tcp_keepalive_time = 30

 

# 系统作为TCP客户端连接自动使用的端口(start,end),可发起并发连接数为end-start

net.ipv4.ip_local_port_range = 10240 65535

运行sysctl -p 重载配置

[tips] 常用指令:sysctl -a | grep <参数名> 可查询当前参数值

 

内核优化脚本

# 禁用大内存页面 Transparent Huge Pages for Redis/MongoDB,默认是always
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled

二、ulimits优化

设置打开文件的最大数量(文件描述符),按需修改最大数值。

编辑/etc/security/limits.conf,添加或替换下面几行代码到文件结尾:

root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

 

断开SSH并重新SSH连接服务器,输入下面的命令检查是否生效:

ulimit -a

对于进程来说,重启就能使其生效。