시스템이 내 메모리를 제한하고 있나요?

시스템이 내 메모리를 제한하고 있나요?

공유 원격 컴퓨터에서 일부 코드를 실행하고 있습니다. 여러 인스턴스가 병렬로 실행되면 상대적으로 빠르게 종료되는 std::bad_alloc반면 단일 인스턴스는 훨씬 더 오래 걸립니다(어쨌든 인스턴스당 스레드 1개). 이로 인해 사용자로서 고정된 양의 메모리만 사용할 수 있는지 궁금합니다. 물론 이것은 의미가 있습니다. 이런 경우인지 확인할 수 있는 방법이 있습니까(관리자에게 문의하는 것 외에)?

편집 : 출력은 다음과 ulimit -a같습니다

-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-m: resident set size (kbytes)      unlimited
-u: processes                       2063129
-n: file descriptors                1024
-l: locked-in-memory size (kbytes)  66029704
-v: address space (kbytes)          unlimited
-x: file locks                      unlimited
-i: pending signals                 2063129
-q: bytes in POSIX msg queues       819200
-e: max nice                        0
-r: max rt priority                 0
-N 15:                              unlimited

답변1

나는 소프트웨어가 많은 양의 메모리를 보유하고 있지만 실제로는 사용하지 않는 것을 본 적이 있습니다.

두 가지 해결책을 찾았습니다.

  • 과도한 메모리 사용. 메모리가 없더라도 "메모리가 더 있어야 합니다"라고 Linux 커널에 요청할 수 있습니다. (/proc/sys/vm/overcommit_memory = 1)
  • 교환을 추가합니다. 메모리를 과도하게 사용하면 몇 번이나 버그가 발생하고 디버깅하기가 매우 어렵기 때문에 오늘은 단순히 스왑을 더 추가하는 것을 선호합니다. 시스템이 엉망이 되어 개처럼 느려진다면 적어도 그 이유는 알 수 있습니다.

관련 정보