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

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

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

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 할당을 테스트할 수 있었습니다. 누군가 다른 좋은 지혜를 가지고 있지 않는 한, 소스의 메모리 할당 방법에 뭔가가 차단을 일으키는 것으로 가정하겠습니다. 누구든지 의견이 있으면 이에 대해 약간의 정보를 제공하고 싶습니다.

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

ベストアンサー1

おすすめ記事