linux基础-运维工程师面试

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
检测是否为 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)。
  • 配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    # --- 网络转发 ---
    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