수치 계산 부하가 심한 콘솔 응용 프로그램을 실행하고 있습니다. 여러 번 성공적으로 실행되었지만 현재 "메모리 소진" 메시지와 함께 충돌이 발생하고 있습니다. 다음은 충돌 사고에서 가장 중요한 두 가지 스냅샷입니다.
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 할당을 테스트할 수 있었습니다. 누군가 다른 좋은 지혜를 가지고 있지 않는 한, 소스의 메모리 할당 방법에 뭔가가 차단을 일으키는 것으로 가정하겠습니다. 누구든지 의견이 있으면 이에 대해 약간의 정보를 제공하고 싶습니다.
관심을 가져주셔서 감사합니다.