数据库版本:postgresql 9.2.1
作者:高铭杰
邮箱:[email protected]
日期:2016年7月14日
1 背景
最近在调试一个gsql灌数据时的卡死问题,问题的跟因还没有分析清楚,和社区上的一个问题十分类似:
BUG #6342: libpq blocks forever in “poll” function
Hi,
I have a big and strange problem. Sometimes, libpq remains blocked in “poll”
function even if the server has already answered to the query. If I attach
to the process using kdbg I found this stack:__kernel_vsyscall()
poll() from /lib/libc.so.6
pqSocketCheck() from /home/pg/pgsql/lib-32/libpq.so.5
pqWaitTimed() from /home/pg/pgsql/lib-32/libpq.so.5
pqWait() from /home/pg/pgsql/lib-32/libpq.so.5
PQgetResult() from /home/pg/pgsql/lib-32/libpq.so.5
PQexecFinish() from /home/pg/pgsql/lib-32/libpq.so.5
为了分析清楚这类问题,这里记录一下使用tcpdump的方式去分析pg的通信过程。
2 Tcpdump安装
下载网址:http://www.tcpdump.org/#latest-release
- 下载tcpdump-4.6.2.tar.gz libpcap-1.6.2.tar.gz
- 编译安装libpcap
- 编译安装tcpdump
或
sudo yum search tcpdump
sudo yum install tcpdump.xxx
ps. tcpdump提供了c接口:http://www.tcpdump.org/pcap.html
3 Tcpdump 参数
NAME
tcpdump - dump traffic on a network
SYNOPSIS
tcpdump [ -AbdDefhHIJKlLnNOpqRStuUvxX