$ sudo netstat -ap | grep postg
tcp 0 0 localhost:postgresql 0.0.0.0:* LISTEN 1567/postgres
udp 0 0 localhost:57504 localhost:57504 ESTABLISHED 1567/postgres
unix 2 [ ACC ] STREAM LISTENING 27116 1567/postgres /var/run/postgresql/.s.PGSQL.5432
为什么postgresql服务器有一个localhost:57504
UDP localhost:57504
“连接”?这意味着什么?
谢谢。
答案1
稍微挖掘一下这是统计收集器。显然统计数据发布在本地环回(又名本地主机)UDP 上。看这里:http://www.neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf。本质上,PostgreSQL 的不同(后端)子进程正在使用此 UDP 端口将统计信息发送到统计收集器。您所看到的是等待接收消息的“监听”套接字。
端口 57504 是临时端口。这意味着没有人选择它,它是在运行时随机分配的。此处注明: https://www.postgresql.org/message-id/[电子邮件受保护]
请注意,UDP 与 TCP 有很大不同,因为它不关心连接。 UDP 套接字的行为更像是一个邮箱;接受来自任何地方的消息并将其发送到每个消息的地址。所以远程主机和远程端口往往可以被忽略。
UDP也不关心是否收到数据包。我怀疑选择 UDP 是因为即使统计收集器被淹没,后端也永远不会等待统计收集器。