메모리 제한을 준수하지 않는 Unix SORT

메모리 제한을 준수하지 않는 Unix SORT

과도한 메모리 사용으로 인해 종료되는 문제에 직면해 있는데 sort왜 주어진 한도를 크게 초과하는지 이해할 수 없습니다.

Context: 
Available physical RAM: 8GB 
Memory in use by system: <500MB (FreeBSD 13) 
Free memory: ~7.5GB 
Swap: 2G
No system hard limit on mem usage ($ ulimit -> unlimited)
File being sorted: 300+ GB 
HDD space: 1Tb+ free both on target or temporary dir.

사용 가능한 리소스 제한을 지정하여 정렬을 실행하는 경우에도 마찬가지입니다. 또는 명시적인 인수(사용 가능한 값의 90%로 자동 설정되어야 함)가 없으면 결국 사용량 초과로 인해 종료됩니다.

[mario@casa-server ~/pjy]$ sort -S 7G -T /filesWD-WMAY03648941/tmp/ -o /filesWD-WMAY03648941/pjA-sorted.txt pjyA.txt

Killed
[mario@casa-server ~/pjy]$
[mario@casa-server ~/pjy]$ sort -T /filesWD-WMAY03648941/tmp/ -o /filesWD-WMAY03648941/pjA-sorted.txt pjyA.txt

Killed
[mario@casa-server ~/pjy]$

분명히 자원 제한을 사용하는 것은 실제로 끝났습니다. -S 3G로 실행하면 가끔 약 5G의 사용량을 볼 수 있습니다.

# ~5G USAGE EVEN WITH EXPLICIT -S 3G LIMIT


  [mario@casa-server ~]$ sudo procstat -r 3183
  PID COMM             RESOURCE                          VALUE        
 3183 sort             user time                    00:27:51.849171   
 3183 sort             system time                  00:03:28.220262   
 3183 sort             maximum RSS                          5423072 KB
 3183 sort             integral shared memory              10505728 KB
 3183 sort             integral unshared data               1910064 KB
 3183 sort             integral unshared stack             30560128 KB
 3183 sort             page reclaims                        8172561   
 3183 sort             page faults                             1724   
 3183 sort             swaps                                      0   
 3183 sort             block reads                            24296   
 3183 sort             block writes                           17719   
 3183 sort             messages sent                              0   
 3183 sort             messages received                          0   
 3183 sort             signals received                           0   
 3183 sort             voluntary context switches              5868   
 3183 sort             involuntary context switches           30700   
[mario@casa-server ~]$ 


# TOP excerpt
 PID USERNAME    THR PRI NICE   SIZE    RES STATE    C   TIME    WCPU COMMAND
 3183 mario         1 103    0  4657M  4603M CPU3     3  38:23  99.88% sort -S 3G -T /filesWD-WMAY03648941/tmp/ -o /files



# NO SO LIMIT ON USAGE
[mario@casa-server ~]$ sudo procstat -l 3183
  PID COMM             RLIMIT                  SOFT             HARD     
 3183 sort             cputime             infinity         infinity     
 3183 sort             filesize            infinity         infinity     
 3183 sort             datasize               32768 MB         32768 MB  
 3183 sort             stacksize             524288 KB        524288 KB  
 3183 sort             coredumpsize        infinity         infinity     
 3183 sort             memoryuse           infinity         infinity     
 3183 sort             memorylocked           65536 B          65536 B   
 3183 sort             maxprocesses           12186            12186     
 3183 sort             openfiles             234576           234576     
 3183 sort             sbsize              infinity         infinity     
 3183 sort             vmemoryuse          infinity         infinity     
 3183 sort             pseudo-terminals    infinity         infinity     
 3183 sort             swapuse             infinity         infinity     
 3183 sort             kqueues             infinity         infinity     
 3183 sort             umtxp               infinity         infinity     
[mario@casa-server ~]$
[mario@casa-server ~]$ ulimit 
unlimited

이는 7G 제한(7.5 사용 가능)으로 실행하거나 제한이 자동으로 설정된 경우 종료되는 이유를 설명합니다. 실제로 모든 mem+swap 사용이 초과되었습니다(예상대로 OS에 의해 종료됨).

그런데 내가 여기서 무엇을 놓치고 있는 걸까요? man sort:

 -S size, --buffer-size=size
         Use size for the maximum size of the memory buffer.  Size
         modifiers %,b,K,M,G,T,P,E,Z,Y can be used.  If a memory limit is
         not explicitly specified, sort takes up to about 90% of available
         memory.  If the file size is too big to fit into the memory
         buffer, the temporary disk files are used to perform the sorting.

설정된 경우 -S 3GHDD 임시 폴더가 아닌 RAM 사용이 종료되는 이유는 무엇입니까?

추신: 다른 '메모리 부족으로 인해 종료되는 정렬'과 관련된 질문을 하려고 했지만 일부 중재자가 잘못 관리했습니다. 나는 그것이 관련된 질문이라고 생각합니다(관련되지 않은 질문으로 표시하면 솔루션이 조각화될 뿐입니다). 또한 다른 가능한 솔루션을 많이 읽었지만 이 경우에는 적합하지 않습니다.

모두 감사합니다

관련 정보