下面均为过往面试经历中面试官可能会问到的问题

~此初始化部分已有文档 见:ubuntu18.04通用初始化~

检测是否为 root 用户
检测 IP 是否存在
设置DNS
验证节点是否可以连接外网
配置 ssh
请手动确认 AllowUsers 是否配置正确, 重启 ssh 服务, 并验证
设置主机名
设置/etc/hosts
设置ulimit
关闭 swap 
配置内核参数
设置 apt 源
安装常用软件, 需等待几分钟

一台刚装完的linux(ubuntu/centos...)系统 或者你在使用virsh-install制作镜像的过程中会对镜像初始化做那些步骤?

ssh部分

  • 设置ssh白名单

  • 设置不允许root用户登陆

其他

  • 关闭selinux(centos)

基础设置

  • 修改ulimit(最大文件数最大字符数)

  • 设置apt/yum源 设置dns

  • 安装常用软件(python sshpass telnet vim wget curl unzip git gcc make lrzsz nmon smartmontools nt关闭swap

  • net.ipv4.ip_forward = 1开启 IP 转发

    这是 Kubernetes (Pod 网络)、Docker 容器网络或软路由的**必备条件。允许本机作为路由器转发数据包。**

  • net.ipv4.ip_local_port_range = 1024 65535

    扩大本地 ephemeral ports(临时端口)的范围

    在高并发 outbound 连接(如网关访问后端服务)时,防止端口耗尽导致 Cannot assign requested address 错误。

  • net.core.rmem_max / wmem_max

    内存缓冲区优化 (TCP Buffer) 允许 TCP 窗口自动调整到更大,适应高带宽延迟积(BDP)的网络,提升大文件传输吞吐量。

    net.ipv4.tcp_rmem / tcp_wmem 设置 TCP 接收/发送缓冲区的 min default max 三个值。

    这里的数值非常大(最大约 8MB+),旨在让高负载下的连接拥有更大的缓冲区,减少丢包重传。

  • TCP 协议栈行为优化 (关键高并发参数)

    net.ipv4.tcp_tw_reuse = 1

    • 作用**:允许重用处于** TIME_WAIT 状态的 socket 用于新的出站连接。

    • 用途**:极其重要。在高并发短连接场景下,防止大量** TIME_WAIT 占用端口资源。

  • net.ipv4.tcp_fin_timeout = 30

    • 作用**:缩短** FIN_WAIT_2 状态的超时时间(默认 60s)。

    • 用途**:更快释放无效连接。**

  • net.core.somaxconn = 65535

    • 作用**:监听队列的最大长度。**

    • 用途**:防止突发流量导致连接被丢弃(**SYN drop)。Nginx/K8s Ingress 通常需要调大此值。

  • net.ipv4.tcp_syncookies = 0

    • 作用**:关闭** SYN Cookie 保护。

    • 风险**:通常建议开启 (=1)** 以防 SYN Flood 攻击。这里设为 0 可能是为了在某些极端性能测试中减少 CPU 开销,或者配置者认为内网安全无需防护。**生产环境建议改为 1。**

  • net.ipv4.tcp_max_orphans / tcp_max_syn_backlog

    • 作用**:增加孤儿 socket 数量和 SYN 队列长度。**

    • 用途**:应对大规模并发握手,防止队列溢出。**

  • net.ipv4.tcp_max_orphans / tcp_max_syn_backlog

    • 作用**:增加孤儿 socket 数量和 SYN 队列长度。**

    • 用途**:应对大规模并发握手,防止队列溢出。**

  • 系统资源限制

    • vm.overcommit_memory = 1

      • 作用**:允许内核过度分配内存。**

      • 用途**:防止 Redis、Java 等应用在申请内存时因检查过于严格而被 OOM Killer 误杀。**

    • vm.max_map_count = 262144

      • 作用**:增加进程可拥有的 VMA (虚拟内存区域) 数量。**

      • 用途**:Elasticsearch** 和某些 Java 应用的硬性要求,否则无法启动。

    • fs.file-max / fs.inotify.max_user_watches

      • 作用**:提高系统级文件描述符上限和文件监控上限。**

      • 用途**:防止高并发下出现** Too many open files 错误,以及支持大量文件监控(如 Prometheus, IDE, K8s kubelet)。

  • 配置

    # --- 网络转发 ---
    net.ipv4.ip_forward = 1
    ​
    # --- 端口范围 ---
    net.ipv4.ip_local_port_range = 1024 65535
    ​
    # --- 缓冲区大小 (单位:字节) ---
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    # TCP 缓冲区 (min default max),单位:字节
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_wmem = 4096 65536 16777216
    # TCP 全局内存 (单位:页,4KB/page),根据内存自动调整通常更好,这里给个经验值
    # 假设 16GB 内存,约为 4000000 页。如果不确定,可以注释掉让内核自动管理
    # net.ipv4.tcp_mem = 378000 504000 756000 
    ​
    # --- TCP 协议优化 (关键!) ---
    net.ipv4.tcp_fin_timeout = 30
    # 开启时间戳 (有助于 RTT 计算)
    net.ipv4.tcp_timestamps = 1
    # 开启窗口缩放 (高性能必须!)
    net.ipv4.tcp_window_scaling = 1
    # 开启 SACK (丢包恢复必须!)
    net.ipv4.tcp_sack = 1
    # 开启 SYN Cookies (防攻击)
    net.ipv4.tcp_syncookies = 1
    ​
    # --- 队列与 backlog ---
    net.core.netdev_max_backlog = 30000
    net.core.somaxconn = 65535
    net.ipv4.tcp_max_syn_backlog = 8192
    net.ipv4.tcp_max_orphans = 65536
    net.ipv4.tcp_synack_retries = 2
    net.ipv4.tcp_syn_retries = 2
    ​
    # --- 内存与文件限制 ---
    vm.overcommit_memory = 1
    vm.max_map_count = 262144
    fs.file-max = 2000000
    fs.inotify.max_user_watches = 2000000
    ​
    # --- TIME_WAIT 复用 ---
    net.ipv4.tcp_tw_reuse = 1
    ​
    # --- Keepalive (快速检测死链) ---
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.tcp_keepalive_probes = 3
    net.ipv4.tcp_keepalive_intvl = 15

文章作者: 楚少爱看雪
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 楚少爱看雪
学习 Study
喜欢就支持一下吧