프로세스가 사용 가능한 실제 메모리보다 더 많은 가상 메모리에 멈췄습니다.

프로세스가 사용 가능한 실제 메모리보다 더 많은 가상 메모리에 멈췄습니다.

이상한 방식으로 멈춘 것 같은 프로세스가 있습니다. 상단에는 다음이 표시됩니다.

   PID USER       PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 38984 gergely    20   0  332m  276  184 S  0.7  0.0  18:13.16 Holmake
 79492 gergely    20   0 10.7g 6.5g  316 D  0.7 84.5 107:04.76 buildheap

빌드힙은 총 물리적 메모리의 84.5%와 10.7GB의 가상 메모리를 사용합니다. 이것은 8GB의 물리적 메모리가 할당된 머신에 있습니다. 그러나 프로세스 자체는 CPU 사이클의 0.7%만을 사용합니다.

아래 답변Linux: 프로세스가 너무 많이 스래싱되고 있는지 감지하는 방법은 무엇입니까?

/proc/79492/stat의 12번째 변수는 336236입니다. 너무 높은 걸까요?

$ cat /proc/79492/oom_score
333

다시 말하지만, 이것이 너무 높은지 여부는 불분명합니다.

너무 많은 충돌이 표시됩니까?

그리고 시스템 관리자에게 머신에 더 많은 물리적 메모리를 할당하도록 요청하는 것 외에 다른 솔루션이 있습니까?

답변1

메모리 부족이 문제라고 생각하지 않습니다. 그렇다면 커널 OOM(메모리 부족) 킬러나 dmesg의 페이지 할당 오류로 인해 프로세스가 종료될 것으로 예상됩니다. 또한 메모리 오버커밋과 스와핑은 성능에 명백한 영향을 미치긴 하지만 "정상"이라는 점을 기억하세요.

실제로 무슨 일이 일어나고 있는지 확인하는 가장 쉬운 방법은 strace를 사용하여 프로세스 시스템 호출을 덤프하는 것입니다.

strace -p <PID>프로세스의 PID에 "-p" 옵션을 사용하여 실행 중인 프로세스에 strace를 연결합니다.

또는 strace를 사용하여 프로그램을 직접 실행할 수 있습니다.

strace buildheap

운이 좋으면 프로세스가 액세스할 수 없는 파일을 읽으려고 시도하는 등 프로세스가 무엇을 기다리고 있는지 확인할 수 있습니다.

관련 정보