X86_64 Linux 2.6.32.12
에 프로그램이 C++
으로 쓰여졌습니다. 두 개의 경우가 있습니다. 하나의 경우는 주입 된 각 파일에 대해 하나의 파일을 생성하고 발송합니다 through UDP(Version A)
; 또 다른 경우는 파일을 생성하지 않으므로 삽입 된 파일을 UDP(Version B)
을 통해 직접 보내십시오.왜 물리적 메모리가 증가하고 리눅스에서 오랜 시간이 지나면 가상 메모리 크기가 약간 증가 할 것인가
=============== 버전 A 통계 그래픽 ============= http://i.stack.imgur.com/8bxI5.png
============== 버전 B Statictic Graphic ====================== === http://i.stack.imgur.com/wEnKc.png
내가 사용 valgrind
이 두 사례를 확인이 보고서는 동일, 어떤 메모리 누수를 볼 수 없습니다. 이 문제는 Linux 커널 메모리 매핑으로 인해 발생합니까? 테스트 컴퓨터는 64G
메모리를가집니다. 이 부분은 memory leak
입니까?
업데이트 정보 : Version A
에서
, 우리는, 다른 응용 프로그램으로 원래의 파일 내용을 보내 처리 결과가 필요한 파일을 생성받을 UNIX socket
를 사용합니다. 그래픽이 보여 주듯이 실제 메모리가 증가합니다. 나는 또 다른 경우를 시도했다. 유닉스 소켓을 통해 파일을 보내지 말고, system
함수를 사용하여 다른 응용 프로그램을 호출하여 필요한 파일을 생성하면 메모리가 증가하지 않는다는 것을 알 수있다. 새로운 생성 된 파일이 문제가 아닌 것으로 보입니다. 유닉스 소켓 때문입니다. 우리는 소켓 풀을 사용하고, 나는 lsof
을 사용한다. 여분의 소켓은 열리지 않는다. Unix socket
이 메모리를 차지합니까?
버전 A에서는 UNIX 소켓을 사용하여 원본 파일 내용을 다른 응용 프로그램에 보내고 프로세스 결과를 받아 필요한 파일을 생성합니다. 그래픽이 보여 주듯이 실제 메모리가 증가합니다. 나는 다른 경우를 시도했다. 유닉스 소켓을 통해 파일을 보내지 말고, 시스템 기능을 사용하고, 다른 애플리케이션을 호출하여 필요한 파일을 생성한다. 메모리가 증가하지 않을 것임을 보여준다. 새로운 생성 된 파일이 문제가 아닌 것으로 보입니다. 유닉스 소켓 때문입니다. 우리는 소켓 풀을 사용하고, 나는 lsof를 사용한다. 여분의 소켓은 열리지 않는다. 유닉스 소켓이 메모리를 차지합니까? – robin