该程序写在C++
上X86_64 Linux 2.6.32.12
,有两种情况,一种情况会为每个注入的文件生成一个文件,并发送出去通过UDP(Version A)
;另一种情况不会生成文件,直接通过UDP(Version B)
发送注入的文件。为什么物理内存不断增加并且虚拟内存大小会在linux上长时间增加一点点
=============== VersionA统计图形=========================== http://i.stack.imgur.com/8bxI5.png
================ VersionB Statictic图形======================== === http://i.stack.imgur.com/wEnKc.png
我使用valgrind
验证这两种情况下,该报告是一样的,看不到任何内存泄漏。 这是由linux内核内存映射引起的吗?测试机器有64G
内存。 这是memory leak
?
更新信息:
在Version A
,我们使用UNIX socket
到原来的文件内容发送到另一个应用程序,然后接收处理结果生成所需的文件。如图所示,物理内存将增加。我已经尝试了另一种情况,不要通过Unix套接字发送文件,使用system
函数,调用另一个应用程序生成所需的文件,这表明内存不会增加。看来新生成的文件不是问题,它是由Unix套接字引起的。我们使用套接字池,我使用lsof
,没有额外的套接字打开。 Unix socket
会占用内存吗?
在版本A中,我们使用UNIX套接字将原始文件内容发送到另一个应用程序,然后接收处理结果生成所需的文件。如图所示,物理内存将增加。我已经尝试了另一种情况,不要通过Unix套接字发送文件,使用系统函数,调用另一个应用程序生成所需的文件,这表明内存不会增加。看来新生成的文件不是问题,它是由Unix套接字引起的。我们使用套接字池,并使用lsof,没有额外的套接字打开。 Unix套接字是否会占用内存? – robin