Hang一小时后报错
➢ 问题
hang 1 小时后报错
analyze 相比之前慢一个小时
残留 qe 的栈 hang 在 receiveChunksUDP SendChunkUDP SendEosUDP
➢ 解答
- 通过 hawq SSH 执行 ps -ef | grep postgres 查看当时 qe 的残留情况
- 通过残留 qe 进程号查找 segment 的 hawq 日志中所有相关日志,重点关注 cancel 和 error 字眼,若是当时 qe 已经不在,可以搜索“ailed to send packet”
- 当有 qe 栈 hang 在 SendChunkUDP 或 SendEosUDP 可以找是否有 qe hang 在 receiveChunksUDP,同理若是有 qe 栈 hang 在 SendEosUDP 或者 SendChunkUDP。
- 若排查 udp 丢包问题,分为两种情况:(1) QE 进程还没退出。先通过 netstat -anup | grep qe 的进程号,获取 ic-udp 的端口号, 再执行 tcpdump -i 网卡 port 端口号 查看收发的报文, 若观察到 hang 在发送端的机器有发包, 接收端机器收不到包,就说明 udp 报文丢了。(2)QE 进程已经退出了。我们想模拟复现来判断网络环境是否会导致丢包,执行: mtr -u 接受端 ip, -u 指定发送 udp 包,loss% 列即丢包率,非零可能有异常,过高一定是异常。