2017-04-16 1 views
-1

리눅스 커널 2.6.38을 사용하고 있으며 4GB의 메모리를 할당하는 프로세스를 실행하고 있으며 4GB의 RAM을 사용할 수 있으므로 응용 프로그램을 실행할 때 약 0.5GB를 할당합니다 스왑 공간에서. 그러나 내 응용 프로그램은 매우 오랜 시간 동안 실행되며 스왑 공간의 데이터에 여러 번 액세스합니다. 4GB의 RAM과,리눅스 스왑 공간 메모리를 공개하지 않음

  • 나는 리눅스 2.6.38를 실행하고 있습니다 :

    (편집) 내가 뭐하는 거지 명확합니다.

  • 응용 프로그램을 실행하지 않고 시스템은 약 500MB의 RAM을 차지합니다.

  • 4GB의 메모리를 할당하고 할당 된 메모리를 탐색하여 해당 메모리의 값을 여러 번 변경하는 간단한 응용 프로그램을 만들었습니다 (반복 10 회 반복).

  • 응용 프로그램을 실행하려면 스왑 공간이 필요합니다.

  • 응용 프로그램을 실행할 때 스왑 공간이 계속 누적되고 몇 번의 반복 작업 후에 프로세스가 종료되고 프로세스가 종료됩니다.

  • 프로세스가 종료 된 후 스왑 공간도 가득 찰 채로 남아 있습니다.

  • 최근 커널에서 응용 프로그램을 테스트했는데 제대로 작동하지만 스왑 공간이 누적되지 않습니다.

이 커널 버전 (2.6.38)의 버그입니까? 그것에 대한 수정이 있습니까?

+0

귀하의 질문은 분명하지 않지만 적어도 다음 중 하나 이상을 수행 할 수 있습니다 : 더 많은 메모리가있는 장치를 사용하고 한 번에 적은 메모리를 할당하고 추가 스왑 공간을 추가하십시오. 프로세스는 "swappiness"(https : //en.wikipedia.org/wiki/Swappiness) "을 사용하면 필요에 맞게 변경할 수 있습니다. – ti7

답변

0

나는 나의 대답이 당신의 질문에 대답 할 지 모르겠지만 나는 비슷한 질문을했다.

Linux가 메모리 (RAM/SWAPP)를 할당 할 때 요약하면 필요할 때만 해제됩니다. 즉, 프로세스가 종료 된 후에도 할당 된 메모리는 다른 프로세스가 공간을 필요로 할 때까지 남아있게됩니다.

그러나 당신이 SWAPP을 확보하려면 수동으로 할 수

sudo swapoff -a 

당신은 그 linkthat one

에서 자세한 정보를 찾을 수 있습니다

sudo swapon -a 

에 다시 전원을 켜 것을 잊지 마세요

1

메모리 누수가 없습니다.

응용 프로그램이 사용 가능한 것보다 많은 메모리를 필요로 할 때, 그 중 일부는 교환하도록 작성되었다고 가정하고 있습니다. 이것은 반드시 사실 일 필요는 없습니다.

시스템은 현재 사용되지 않기 때문에 전혀 관련이없는 다른 프로세스를 스왑에 쓸 수 있습니다.

이 스왑 공간은 응용 프로그램에 속하지 않으므로 응용 프로그램을 종료 한 후에도 사용됩니다.

이 스왑 공간은 사용 가능한 RAM이있을 때 Linux가 선적하지 않고 다시로드하기 때문에 오랜 기간 동안 사용 상태가 지속될 수 있습니다.

관련 문제