我有一个软件,它有一个HTTP
服务器侦听端口20001
并在计算机上运行Unix
。服务器的日志文件HTTP
显示当前有 600 多个活动HTTP
连接,但是netstat -an | grep 20001
在运行服务器的同一台计算机上,显示2
当前仅打开 TCP 连接。服务器是由另一家公司提供的,他们将大量HTTP
会话归咎于我们的客户。我相信他们只是没有正确地结束会议。
据我所知
number of active HTTP sessions = number of open TCP connections on the listening TCP port
它是否正确?如果不是,那什么时候不是这样呢?
编辑
以下是日志文件中可用信息的示例:
New Session F865432C-3enOjJetUTlIoBEtfYS9yNM0l+c
New Session F865432C-HJ71n4/nCda5o3WaxqlmKNUZH48
New Session F865432C-VOWUYv/wtr7QXvxGqWPFyr/JI1o
New Session F865432C-icsmvyEcsmhM0zbzPTAepfQWc4U
New Session F865432C-K+iPSJswA85YnAJNEzSa9VIdpAQ
New Session F865432C-6L5Rp+net1JEgZeX2QSiLLW9U2g
New Session F865432C-WnVQC/9ROqO50LacYDorNgB+PVk
New Session F865432C-X81QIytjaLCtLioVvqRTJYOHqtk
New Session F865432C-qIkjOoMbmr9FVWDZuZwdBA//rxs
New Session F865432C-N05q4gAjPJll6qRqxbFK09C6fNc
New Session F865432C-JC3B3mkuCnJTDFML2tTv7FPdpw8
New Session F865432C-UOGwlKaQmOawOFnBIIPRoU91GWI
New Session F865432C-Z5dWyXkfx7SsLKmujrl/3vfPYh8
New Session F865432C-w9iKm2QkDQeqZynM7hUtk/t/5Yg
New Session F865432C-uwYNGT7HcOLvuUv9F/KPCYnx3WU
New Session F865432C-b5wcRmaXMZhSPU0h6aDdPmiUdv8
New Session F865432C-I6uVQ914c7ZT+rnD5/LxA593pHg
New Session F865432C-HhUrc/IkIbM+kYXOW3sb9SqvYuo
End Session F865432C-n2VSOhW0ewjf2RnIyu2z5TkN+I8
End Session F865432C-dtvl9+4n7U+CBtS4oYAdKv4XSgM
New Session F865432C-0WCqPy9jx/ThzjoMk60wAtzRDeI
New Session F865432C-FUpkDVUqS8Zbj7CTy0Pak8/R5AE
New Session F865432C-/Nr/q60cezrsSCXaE/aJDHiAkGM
New Session F865432C-oie/wfNvpglo6UTOPNDpobkE5bI
New Session F865432C-FUO7GmbEm7gfRDmt1YRQFUgnQmg
End Session F865432C-d5jf2n9HlEheraUDu0bKR9FXb5w
End Session F865432C-d9ev8S+du/IcBr8GRyVyeWONdy4
End Session F865432C-s/d3x+vZKQ8Tnp1tHp0hfpmE6Is
End Session F865432C-xuOj1wPjVa/SFn5Sx3qvFZHW1Uo
End Session F865432C-pdZgBzd4aurZzj6it48AkA+kkbU
End Session F865432C-BW8/9/Nxp83drQh19AV96dH1SGE
New Session F865432C-2AOjAIe6lHTChy1uk2hqhM7WNRg
New Session F865432C-KkIUP6Fa0HNjyrfhfhlNvBq6Rv4
New Session F865432C-aSRpOiGNQxmW48QwanqzCQ+/ixU
New Session F865432C-KujVjcb0npH1ODXkGdLXKu70Qmo
New Session F865432C-GXB9itx4CmV9I4sUYi2y6V4qw+U
您无疑会注意到,“新会话”比“结束会话”多得多!
答案1
根据这一页,HTTP 会话以对服务器的 HTTP 请求开始,并以服务器的应答结束。 TCP 会话中可能有多个请求-应答对,但是是按顺序进行的,而不是同时进行。因此,根据这个定义,您应该:
number of TCP sessions >= number of HTTP sessions
(这可能是>
因为一旦从 HTTP 服务器收到应答,TCP 会话可能会保持打开状态)
也就是说,您的日志文件显示的不是 HTTP 会话。这些是应用程序会话。由于 HTTP 是无状态协议,您的 HTTP 服务器会在用户的浏览器中设置一个 cookie,以便当用户返回时,应用程序可以从停止的地方继续。 BTW,F865432C-b5wcRmaXMZhSPU0h6aDdPmiUdv8
可能是浏览器中设置的cookie的内容。
每个 cookie 对应一个打开的会话。每个cookie都有相关的数据;它们存储在磁盘上、服务器上。为了防止磁盘被填满,您的 HTTP 服务器(更准确地说是您的应用程序)应定期清理其 cookie jar 以删除死会话(在特定时间段内未从浏览器接收到的 cookie)。
因此,当您的应用程序告诉您有 600 多个活动会话时,它告诉您的是磁盘上有 600 多个 cookie 和关联数据,而不是有 600 多个并发 TCP 连接。
如果该数字持续增长,则意味着 cookie 没有被垃圾收集:即没有任何东西在服务器端清理过时的会话数据。