linux基础-运维工程师面试
下面均为过往面试经历中面试官可能会问到的问题
~此初始化部分已有文档 见: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