2009-03-20 2 views
3

아주 작은 작은 소스 코드 파일과 몇 개의 병이 들어있는 4GB 디렉토리를 보관하려면 Archive :: Tar :: Streamed를 사용하고 있습니다. 4GB RAM이있는 시스템을 사용하고 있고 Archive :: Tar :: Streamed를 사용하고 있습니다. 전체 디렉토리가 메모리 상태가되기를 원하지 않기 때문에 메모리 부족 상태가됩니다. File :: Find를 사용하고 Archive :: Tar :: Streamed의 add 메소드를 사용하여 tar 파일에 DFS 방식으로 디렉토리에서 하나씩 파일을 읽습니다. 주어진 시점에 하나의 파일 만이 메모리에 저장되고, 심지어 perl 프로세스의 % MEM이 점차 증가하고 있습니다. 최대 20 %까지 증가했습니다. 내 디렉토리에 800MB의 파일이 없습니다. 여기에 두 가지 질문이 있습니다 1) % MEM이 점차적으로 증가하는 이유는 무엇입니까? 2) 이유는 최대 20 %까지입니다. 아카이브 :: Tar이 내용을 tar 파일에 쓴 후에 메모리를 해제하지 않기 때문입니까?Archive :: Tar : Streamed를 사용하더라도 점차 % MEM이 증가하는 이유는 무엇입니까?

답변

2

스트리밍 방식으로 데이터를 처리 할 때 VSZ 메모리 봉투가 커지지는 않으며 일반적으로 응용 프로그램 종류에서 안정되어야하는 RES (% MEM)에 대해 moreso가 증가합니다.

따라서 데이터에 대한 상호 참조 (예 : 해시)가 유지되고 있거나 순환 참조가 생성되는 경우는 거의 없습니다.

이 게시물 (코드 또는 사용중인 모듈에있는 변수)을 추적하여 메모리 봉투를 늘리거나 상호 참조를 유지하는 방법에 대한 팁은 "are there any tools for finding memory leaks in my perl program"을 참조하십시오.

관련 문제