当我在 Google Compute Engine 上运行我的代码到看似是 Google 的服务器时,出现了文件泄漏:
php 3630 www-data 873u IPv4 34632 0t0 TCP xxxx.internal:43328->vu-in-f139.1e100.net:https (CLOSE_WAIT)
php 3630 www-data 874u IPv4 34640 0t0 TCP xxxx.internal:39500->vh-in-f139.1e100.net:https (CLOSE_WAIT)
php 3630 www-data 875u IPv4 34648 0t0 TCP xxxx:43336->vu-in-f139.1e100.net:https (CLOSE_WAIT)
我没有直接调用这些服务器。我相信 Google 的 API 库可能正在调用这些调用,但它似乎没有关闭它。我在裸机服务器上运行了相同的代码,没有发现这些文件泄漏。
有人知道这是什么原因造成的吗?
答案1
关闭等待是由于 TCP 会话在远程端关闭,但本地套接字尚未关闭。操作系统将继续跟踪连接,直到达到操作系统的 TCP 套接字时间限制或您“关闭”它。这通常是由于未在连接后进行清理造成的。(即,当您使用完套接字后,您没有正确关闭它或销毁对象)您可能在使用完 google 的 API 对象后没有清理它们。如果没有更多详细信息(代码?),我们真的只能猜测。