다음 명령을 사용하여 Fedora 18에서 2억 행이 포함된 25GB 파일을 정렬하고 있습니다.
정렬 -S 10G -T /bigdisk 대용량 파일
메모리가 없기 때문에 프로세스가 종료됩니다. 프로세스가 죽기 전에 내 RAM(12GB 여유 공간)을 소모하지 않았으며 디스크 공간도 괜찮았습니다.
이유에 대한 제안을 주시면 감사하겠습니다. 나는 sort가 파티셔닝과 병합을 통해 이것을 관리할 수 있다고 확신합니다.
dmesg의 추가 정보
[87278.935572] Out of memory: Kill process 1971 (sort) score 258 or sacrifice child
[87278.935574] Killed process 1971 (sort) total-vm:4512168kB, anon-rss:4237040kB, file-rss:584kB
답변1
사용하지 마십시오 -S 10G
. 너무 많습니다(그리고 생각한 대로 작동하지 않을 수도 있습니다). OOMkiller 시작하다시스템이 모든 메모리를 사용하고 있음을 의미합니다.
~에 따르면사용된 알고리즘통과 sort
,사용 가능한 메모리에 따라 메모리를 사용합니다.: TotalMem/8과 AvailableMem 중 가장 큰 숫자의 절반입니다.
예를 들어, 사용 가능한 메모리가 4GB(8GB 중)인 경우 sort
2GB RAM이 사용됩니다. 또한 /bigdisk에 많은 2GB 파일을 생성하고 마지막으로 병합 정렬해야 합니다.
답변2
내 의견의 답변:
/run/shm
/bigdisk
임시 파일을 저장 하는 데 사용할 때도 sort
동일한 문제가 발생했습니다 . /run/shm
RAM 디스크이므로 정렬을 위해 결과의 일부를 디스크에 캐싱해야 하는 경우(메모리가 거의 가득 찬 경우) 메모리가 소진됩니다. 커널은 sort
가장 많은 메모리를 사용하는 프로세스이기 때문에 종료됩니다.
RAM 디스크 대신 물리적 디스크에 저장된 위치를 사용하면 이 문제가 해결됩니다.
답변3
설정해 보세요vm.overcommit_memory = 1
: «...
이 플래그가 1이면 커널은 실제로 메모리가 부족할 때까지 항상 충분한 메모리가 있는 척합니다.
…»
그리고하다스왑을 사용하세요.