套接字和交换空间

套接字和交换空间

我的系统内存不足,并且有很多打开的连接,但我的交换空间并没有被用掉那么多。

套接字/套接字文件描述符可以使用交换空间吗?

顺便说一下,这是用于 Linux 系统的。

谢谢

答案1

内存不足,但交换空间使用不多?我猜这是linuxatemyram.com如同这个问题

经过快速的网络搜索后,似乎 Linux 内核根本没有分页(交换)自己的内存,其中也包括套接字描述符。

答案2

套接字不会占用大量内存:它只是对内核结构的引用和用户空间中的几个缓冲区。内核必须为网络套接字维护一个传输和接收窗口,为文件系统套接字维护一个小缓冲区。但套接字的存在意味着某种具有代码和数据足迹的通信过程。但你没有说连接是什么。

可能有解决此问题的余地,具体取决于套接字所处的状态、套接字正在执行的操作以及哪些进程打开了套接字,但由于缺乏更多信息,因此无法提供建议。

kubanczyk 可能是对的 - 你确定你的内存真的全部用完了吗?

答案3

关于内核交换自己的内存:我会同意 kubanczyk 的回答。关于内存不足的总体问题:确保运行“free”命令并查看“-/+ buffers/cache”行,它将告诉您有关实际使用/可用内存的更准确信息。

关于套接字使用情况。在高负载下(当然取决于您的应用程序),它可能会占用相当多的内存。以下是计算套接字当前内存使用量的方法:

getconf PAGESIZE

它可能会告诉你“4096”,也就是 4Kb。现在让我们找出当前套接字使用了多少页:

cat /proc/net/sockstat

您将获得有关系统当前套接字使用情况的信息,如下所示(在高负载下):

sockets: used 250755
TCP: inuse 5 orphan 0 tw 0 alloc 250873 mem 895545
UDP: inuse 4 mem 2
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0

我们对“mem 895545”感兴趣,它告诉我们使用的页面数量。因此,要计算盒子上套接字的内存使用量,我们将 pagesize 乘以这个 mem 值:

4096 * 895545 ~= 3.5Gb

相关内容