套接字和交换空间

我有一个系统内存不足,有很多开放的连接。 但是我的交换空间并没有被用完。

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

这是一个Linux系统顺便说一句。

谢谢

内存不足,但没有太多的交换使用? 我想这是在这个问题的linuxatemyram.com的情况。

在快速networkingsearch之后,似乎Linux内核根本不会分页(交换)它自己的内存,这也包括套接字描述符。

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

根据套接字处于什么状态,套接字在做什么以及套接字打开了哪些进程,但是由于没有更多的信息,不可能提供build议,因此可能有解决这个问题的空间。

kubanczyk可能是对的 – 你确定你的记忆真的全部用完了吗?

关于内核交换自己的记忆:我会在这里与kubanczyk的答案。 关于内存不足的总体问题:确保运行'free'命令并观察' – / + buffers / cache'行,这将告诉你关于实际使用/释放内存的更准确的信息。

关于套接字使用情况。 在沉重的负荷下(取决于你的应用当然),它可以吃掉相当一部分的记忆。 以下是如何计算您的套接字当前的内存使用情况:

getconf PAGESIZE 

它可能会告诉你'4096'是4Kb。 现在让我们来看看有多less页面用于当前套接字:

 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