Linux 内核配置Graph
本文介绍与NebulaGraph相关的Linux内核配置,并介绍如何修改配置。
资源控制Graph
ulimit注意事项Graph
命令ulimit
用于为当前shell会话设置资源阈值,注意事项如下:
ulimit
所做的更改仅对当前会话或子进程生效。
- 资源的阈值(软阈值)不能超过硬阈值。
- 普通用户不能使用命令调整硬阈值,即使使用
sudo
也不能调整。
- 修改系统级别或调整硬性阈值,请编辑文件
/etc/security/limits.conf
。这种方式需要重新登录才生效。
ulimit -cGraph
ulimit -c
用于限制core文件的大小,建议设置为unlimited
,命令如下:
ulimit -c unlimited
ulimit -nGraph
ulimit -n
用于限制打开文件的数量,建议设置为超过10万,例如:
ulimit -n 130000
内存Graph
vm.swappinessGraph
vm.swappiness
是触发虚拟内存(swap)的空闲内存百分比。值越大,使用swap的可能性就越大,建议设置为0,表示首先删除页缓存。需要注意的是,0表示尽量不使用swap。
vm.min_free_kbytesGraph
vm.min_free_kbytes
用于设置Linux虚拟机保留的最小空闲千字节数。如果系统内存足够,建议设置较大值。例如物理内存为128 GB,可以将vm.min_free_kbytes
设置为5 GB。如果值太小,会导致系统无法申请足够的连续物理内存。
vm.max_map_countGraph
vm.max_map_count
用于限制单个进程的VMA(虚拟内存区域)数量。默认值为65530
,对于绝大多数应用程序来说已经足够。如果应用程序因为内存消耗过大而报错,请增大本参数的值。
vm.dirty_*Graph
vm.dirty_*
是一系列控制系统脏数据缓存的参数。对于写密集型场景,用户可以根据需要进行调整(吞吐量优先或延迟优先),建议使用系统默认值。
Transparent huge pageGraph
为了降低延迟,用户必须关闭THP(transparent huge page)。命令如下:
root# echo never > /sys/kernel/mm/transparent_hugepage/enabled
root# echo never > /sys/kernel/mm/transparent_hugepage/defrag
root# swapoff -a && swapon -a
网络Graph
net.ipv4.tcp_slow_start_after_idleGraph
net.ipv4.tcp_slow_start_after_idle
默认值为1,会导致闲置一段时间后拥塞窗口超时,建议设置为0
,尤其适合大带宽高延迟场景。
net.core.somaxconnGraph
net.core.somaxconn
用于限制socket监听的连接队列数量。默认值为128
。对于有大量突发连接的场景,建议设置为不低于1024
。
net.ipv4.tcp_max_syn_backlogGraph
net.ipv4.tcp_max_syn_backlog
用于限制处于SYN_RECV(半连接)状态的TCP连接数量。默认值为128
。对于有大量突发连接的场景,建议设置为不低于1024
。
net.core.netdev_max_backlogGraph
net.core.netdev_max_backlog
用于限制队列中数据包的数量。默认值为1000
,建议设置为10000
以上,尤其是万兆网卡。
net.ipv4.tcp_keepalive_*Graph
net.ipv4.tcp_keepalive_*
是一系列保持TCP连接存活的参数。对于使用四层透明负载均衡的应用程序,如果空闲连接异常断开,请增大tcp_keepalive_time
和tcp_keepalive_intvl
的值。
net.ipv4.tcp_wmem/rmemGraph
TCP套接字发送/接收缓冲池的最小、最大、默认空间。对于大连接,建议设置为带宽(GB)*往返时延(ms)
。
schedulerGraph
对于SSD设备,建议将scheduler
设置为noop
或者none
,路径为/sys/block/DEV_NAME/queue/scheduler
。
其他参数Graph
kernel.core_patternGraph
建议设置为core
,并且将kernel.core_uses_pid
设置为1
。
修改参数Graph
sysctl命令Graph
-
sysctl <conf_name>
查看当前参数值。
-
sysctl -w <conf_name>=<value>
临时修改参数值,立即生效,重启后恢复原值。
-
sysctl -p [<file_path>]
从指定配置文件里加载Linux系统参数,默认从
/etc/sysctl.conf
加载。
prlimitGraph
命令prlimit
可以获取和设置进程资源的限制,结合sudo
可以修改硬阈值,例如,prlimit --nofile=140000 --pid=$$
调整当前进程允许的打开文件的最大数量为140000
,立即生效,此命令仅支持RedHat 7u或更高版本。