操作系统参数配置
本文档为 Nebula Graph 系统参数配置参考。
ulimit
ulimit -c
此命令调整 core dump 文件可占用空间的最大值。建议设置为 unlimited,即:ulimit -c unlimited
。
ulimit -n
此命令调整进程最大可用的文件句柄数。建议设置到 10 万以上,如: ulimit -n 130000
。
内存
vm.swappiness
内核将一段时间内 idle 的匿名页交换至磁盘的倾向性。值越大,越倾向于换出。建议设置为 0,即在内存紧张时,优先淘汰 page cache。注意,swappiness 为 0,不代表不会换出。
vm.min_free_kbytes
Linux 内核根据该选项计算内存相关水位值。如果系统物理内存较大,建议调高该值(比如,128GB 物理内存设置为 5GB)。否则,在内存紧张时,系统无法申请较大的连续物理内存。
vm.max_map_count
此选项指定进程允许的最大 vma (virtual memory area) 数量。系统默认值通常为 65530,绝大多数情况是足够的。如果在内存消耗较大时出现内存申请失败,可以适当调高。
vm.overcommit_memory
该选项指定系统中申请的内存大于可用内存时的内核行为,建议使用系统默认值 0 或 1。不要设置为 2。
vm.dirty_*
这些选项控制系统脏页(dirty page cache)落盘的激进程度。对于写入密集的场景,可以根据需要(吞吐优先还是延时优先)做适当调整。建议使用系统默认值。
Transparent Huge Page
为了更好的延时表现,建议将内存透明大页及锁片整理禁掉。选项分别为 /sys/kernel/mm/transparent_hugepage/enabled
和 /sys/kernel/mm/transparent_hugepage/defrag
。例如:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
swapoff -a && swapon -a
网络
net.ipv4.tcp_slow_start_after_idle
此选项默认值为 1,即 TCP 连接在 Idle 一段时间之后,发送窗口会被重设,并重新执行慢开始算法。建议将该选项设置为 0,尤其是长肥链路(即高延时大带宽)。
net.core.somaxconn
该选项与 listen 系统调用的 backlog 参数一起,指定“已完成三次握手但未被 accept”的最大 TCP 连接数。对于有大量突发连接建立的场景,建议设置为 1024 以上(默认值为 128)。
net.ipv4.tcp_max_syn_backlog
最大 TCP 半连接数,设置原则同 net.core.somaxconn
。
net.core.netdev_max_backlog
网卡接受队列的最大长度。对于高吞吐场景,尤其是 10G 网卡,建议设置为 10000 以上(默认值为 1000)。
net.ipv4.tcp_keepalive_*
TCP 连接的 keepalive 机制相关参数。对于使用 4 层透明 load balancer 的应用,如果出现 idle 连接意外断开的情况,可以将 tcp_keepalive_time
与 tcp_keepalive_intvl
调低。
net.ipv4.tcp_rmem/wmem
TCP 连接的最小、默认、最大接受/发送 buffer 的大小。对于长肥链路,建议调大默认值为 bandwidth * RTT。
scheduler
对于 SSD 设备,建议将 /sys/block/DEV_NAME/queue/scheduler
设置为 noop 或 none。
其他
kernel.core_pattern
建议设置为 core,并将 kernel.core_uses_pid
设置为 1。
相关命令使用说明
sysctl
sysctl conf_name
查看当前参数值sysctl -w conf_name=value
修改参数值并立即生效sysctl -p
从相关配置文件加载参数值
ulimit 使用说明
ulimit
命令用于设置当前 shell session 的资源限制阈值。需要注意的是,
ulimit
命令做出的修改仅对当前 session (及子进程)有效。ulimit
不能将某个资源的(soft)阈值调整至大于当前 hard 值。- 普通用户不能通过该命令调整 hard 阈值(包括
sudo
方式)。 - 若要从系统层面修改,或者调整 hard 阈值,需要编辑
/etc/security/limits.conf
文件。但该方式需要重新登录才能生效。
prlimit
prlimit
命令可以修改某个特定进程的资源限制阈值。结合 sudo
命令可以修改 hard 阈值。例如, prlimit --nofile=130000 --pid=$$
可将当前进程最大允许打开的文件数调整至 14000,并立即生效。请注意该命令仅在 RedHat 7u 或更新版本 OS 可用。