温馨提示×

CentOS延迟怎么解决

小樊
32
2025-12-09 18:29:30
栏目: 智能运维

CentOS 延迟定位与优化清单

一、先快速定位延迟来源

  • 明确是系统命令卡顿、SSH 登录慢、应用访问慢还是网络链路慢,按场景用对应工具验证:
    • 系统命令卡顿:用 top、free -m、df -h、iostat -x 1 检查 CPU、内存、磁盘 IO、磁盘空间 是否异常。
    • SSH 登录慢:执行 ssh -vvv 目标IP 观察卡在哪一阶段(如 GSSAPI、DNS 反查)。
    • 应用访问慢:用 curl -w 打印各阶段耗时,定位是 DNS 解析、TCP 建连 还是 服务端处理 慢。
    • DNS 解析慢:用 time host $(hostname)time dig $(hostname) 测试解析耗时;必要时用 strace -f -o dns.log your_app 追踪解析调用栈。

二、常见高延迟场景与修复

  • SSH 登录慢
    • 在服务端编辑 /etc/ssh/sshd_config:设置 UseDNS no(关闭反向 DNS 查询)、GSSAPIAuthentication no(关闭 GSSAPI 认证),然后重启 sshd
    • 客户端也可在 /etc/ssh/ssh_config 设置 GSSAPIAuthentication no 减少握手往返。
  • DNS 解析慢或卡顿
    • 修正 /etc/hosts/etc/nsswitch.conf,确保本机名能快速解析;必要时在 /etc/resolv.conf 调整 timeout/attempts 降低重试等待。
    • 若业务不需要 IPv6,可在 /etc/sysctl.conf 禁用:net.ipv6.conf.all.disable_ipv6=1、net.ipv6.conf.default.disable_ipv6=1 并执行 sysctl -p(变更前评估对业务影响)。
    • 若 DNS 返回 AAAA 的 SERVFAIL 导致并行 A/AAAA 查询重试耗时,优先修复 DNS;临时方案可用 ping -4、或在容器内强制 IPv4
  • Java/应用获取本机名慢
    • 现象常见于 InetAddress.getLocalHost().getHostName() 触发 DNS 反向解析;可通过 缓存主机名、使用 静态配置,或在容器/启动参数中设置 -Djava.net.preferIPv4Stack=true -Dsun.net.inetaddr.ttl=60 缓解。

三、网络与内核参数优化(适用于高并发/长链路)

  • 建议先备份并在测试环境验证,再分批上线:
    • 连接与端口
      • 调大监听队列与本地端口范围:net.core.somaxconn=65535net.ipv4.ip_local_port_range=“1024 61999”
      • 复用 TIME_WAIT 端口:net.ipv4.tcp_tw_reuse=1(注意与业务协议兼容性)。
    • TCP 栈与超时
      • 减少重试降低握手耗时:net.ipv4.tcp_syn_retries=2net.ipv4.tcp_synack_retries=2net.ipv4.tcp_retries2=5
      • 开启 TCP Fast Opennet.ipv4.tcp_fastopen=3(需服务端/客户端共同支持)。
      • 调整 Keepalivenet.ipv4.tcp_keepalive_time=1200net.ipv4.tcp_keepalive_intvl=10net.ipv4.tcp_keepalive_probes=6
    • 拥塞控制
      • Linux 内核 ≥ 4.9 且链路存在丢包/抖动时,可启用 BBRnet.core.default_qdisc=fqnet.ipv4.tcp_congestion_control=bbr,并通过 sysctl -p 使配置生效;用 sysctl net.ipv4.tcp_available_congestion_controllsmod | grep bbr 验证。

四、验证与回退

  • 验证
    • SSH:再次登录应明显减少等待;必要时用 ssh -vvv 确认不再卡在 DNS/GSSAPI。
    • DNS:time host $(hostname)time dig $(hostname) 的耗时显著下降;应用侧 InetAddress.getLocalHost().getHostName() 接近 毫秒级
    • HTTP/业务:用 curl -w 对比 DNS、TCP、首包 各阶段耗时是否改善。
  • 回退
    • 逐项撤销最近变更(如恢复 UseDNS yes、移除新增 sysctl 项、关闭 BBR),每步变更后复测,定位引入延迟的具体项。

0