공유 원격 컴퓨터에서 일부 코드를 실행하고 있습니다. 여러 인스턴스가 병렬로 실행되면 상대적으로 빠르게 종료되는 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)
- 교환을 추가합니다. 메모리를 과도하게 사용하면 몇 번이나 버그가 발생하고 디버깅하기가 매우 어렵기 때문에 오늘은 단순히 스왑을 더 추가하는 것을 선호합니다. 시스템이 엉망이 되어 개처럼 느려진다면 적어도 그 이유는 알 수 있습니다.