메모리가 소진되었습니다. 이유는 무엇입니까?

메모리가 소진되었습니다. 이유는 무엇입니까?

수치 계산 부하가 심한 콘솔 응용 프로그램을 실행하고 있습니다. 여러 번 성공적으로 실행되었지만 현재 "메모리 소진" 메시지와 함께 충돌이 발생하고 있습니다. 다음은 충돌 사고에서 가장 중요한 두 가지 스냅샷입니다.

top - 19:22:32 up 10:33,  4 users,  load average: 1.05, 1.06, 1.05  
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie  
%Cpu(s):  8.3 us,  0.1 sy,  0.0 ni, 91.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st  
KiB Mem:  13195763+total, 97249256 used, 34708380 free,   137332 buffers  
KiB Swap:        0 total,        0 used,        0 free.   973400 cached Mem
  
  PID ... USER ... PR ... NI ... VIRT ... RES ... SHR ... S ... %CPU ... %MEM ... TIME+ ...  COMMAND  
 3591 .. hexi ...... 20 .... 0 ... 92.976g  0.089t  18720 .. R ... 99.9 ........ 72.2 ...   614:50.72 . RobustPure+
  
top - 19:22:35 up 10:33,  4 users,  load average: 0.97, 1.05, 1.04  
Tasks:   0 total,   0 running,   0 sleeping,   0 stopped,   0 zombie  
%Cpu(s):  3.6 us,  1.2 sy,  0.0 ni, 95.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st  
KiB Mem:  13195763+total,  1827172 used, 13013046+free,   137332 buffers  
KiB Swap:        0 total,        0 used,        0 free.   973400 cached Mem  
  
  PID ... USER ... PR ... NI ... VIRT ... RES ...  SHR ... S ... %CPU ... %MEM ... TIME+ ... COMMAND

위의 첫 번째 스냅샷에서는 모든 것이 원활해 보이며 27% 이상의 메모리가 사용 가능한 것으로 표시됩니다. 그러나 두 번째 스냅샷에 표시된 것처럼 3초 이내에 애플리케이션이 충돌하여 PID가 사라졌습니다. 이 시간 동안 프로세스 수나 상태는 변경되지 않습니다. 장소는 Mint 17.3이고 커널은 3.19입니다. (다른 플랫폼에서는 실행할 수 있는 옵션이 없습니다.) 다음은 ulimit -a 명령의 출력입니다.

hexi@mint17 ~ $ ulimit -a  
core file size          (blocks, -c) ...0  
data seg size           (kbytes, -d) ...unlimited  
scheduling priority             (-e) ...0  
file size               (blocks, -f) ...unlimited  
pending signals                 (-i) ...515091  
max locked memory       (kbytes, -l) ...64  
max memory size         (kbytes, -m) ...unlimited  
open files                      (-n) ...1024  
pipe size            (512 bytes, -p) ...8  
POSIX message queues     (bytes, -q) ...819200  
real-time priority              (-r) ...0  
stack size              (kbytes, -s) ...8192  
cpu time               (seconds, -t) ...unlimited  
max user processes              (-u) ...515091  
virtual memory          (kbytes, -v) ...unlimited  
file locks                      (-x) ...unlimited**  

메모리는 memtest86으로 테스트되었으며 완벽한 거위 알을 얻었습니다. 기본 조건(XMP 없음)에서 실행됩니다. 이 사고의 가능한 원인이 무엇인지 말해 줄 수 있는 사람이 있나요?

일부 하드웨어 세부 정보. 4개의 메모리 모듈(각각 32GB)이 있습니다. free, top, memtest86은 모든 메모리를 볼 수 있지만 어떤 이유로 커널이 할당하지 못하는 경우도 있나요?

문제를 발견했습니다.https://stackoverflow.com/questions/30173133/linux-cannot-allocate-more-than-32-gb-64-gb-of-memory-in-a-single-process-due-t, 이것은 내가 가지고 있는 커널에서는 작동하지만 내 문제에만 해당되는 것은 아닙니다. 포함된 테스트 코드를 사용하여 124GB RAM 할당을 테스트할 수 있었습니다. 누군가 다른 좋은 지혜를 가지고 있지 않는 한, 소스의 메모리 할당 방법에 뭔가가 차단을 일으키는 것으로 가정하겠습니다. 누구든지 의견이 있으면 이에 대해 약간의 정보를 제공하고 싶습니다.

관심을 가져주셔서 감사합니다.

関連情報