내 실험에서는 약 200개의 프로세스를 실행하고 싶습니다. 그들 각각은 다음보다 적은 양을 필요로 합니다.GB:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24688 rinkman 20 0 6082416 335536 15680 S 116.9 0.3 77:32.92 java
25314 rinkman 20 0 6614936 379040 15700 S 116.6 0.4 73:43.02 java
25780 rinkman 20 0 6082408 348140 15664 S 116.6 0.4 72:12.34 java
25994 rinkman 20 0 6082408 350592 15656 S 114.6 0.4 71:42.34 java
30472 rinkman 20 0 6749092 441492 15664 S 108.6 0.4 64:54.38 java
27052 rinkman 20 0 6548364 403040 15692 S 106.3 0.4 66:38.30 java
29314 rinkman 20 0 6022012 393656 15660 S 105.0 0.4 65:57.09 java
28173 rinkman 20 0 6681492 427816 15660 S 104.3 0.4 66:17.47 java
6개 노드에 액세스할 수 있습니다.100GBRAM당 양입니다. 그러니 그들이 그냥 가져가면GB,문제 없습니다. 그러나 위에서 볼 수 있듯이 모두가 초과해야 합니다.6GB.
나는 다음 출력을 보고 매우 놀랐습니다 free -m
.
total used free shared buff/cache available
Mem: 96481 15396 326 75 80758 80448
Swap: 16383 2336 14047
그것은 단지 보여줍니다15.4GB사용된. 프로세스가 사용하지 않은 메모리를 공유할 수 있을까?라는 생각이 들었습니다. 예80.4GB실제로 사용 가능한가요? 안타깝게도 Google을 통해 흥미로운 정보를 찾을 수 없습니다. 방금 멀티프로세싱/스레딩과 데이터 교환, 공개 캐싱 등에 관한 기사를 우연히 발견했습니다. 제발 이 질문에 대답해 주실 수 있나요?
폴리스티렌이것이 가능하지 않은 경우 이러한 프로세스에 할당된 메모리를 줄일 수 있는 방법이 있습니까? (200개의 프로세스 중 8개만 실행했습니다.) 문제는 bash 스크립트가 다음과 같은 기능만 제공한다는 것입니다.2GB~을 위한자바(이것은 그것의 일부입니다):
java -Xms64m -Xmx2048m -Djava.library.path="$BEAST_LIB:/usr/local/lib:$LD_LIBRARY_PATH" -cp "$BEAST_LIB/beast.jar:$BEAST_LIB/beast-beagle.jar" dr.app.beast.BeastMain $*
그래서 왜 항상 필요한지 이해할 수 없습니다4~5GB더. 예를 들어 다른 Java 프로그램에서도 동일한 현상이 발생합니다.짐승 2또는트리 주석자.
답변1
잘못 읽으신 것 같습니다.
첫 번째 열은 VIRT
중요하지 않으며 대부분의 경우 완전히 무시해야 합니다.
흥미로운 점은 RSS
프로세스당 RAM이 0.5GB 미만이라는 것입니다. 당신은 훌륭한 일을했다.
이제 귀하의 질문에 답변해 드리겠습니다.
공유된 "미사용" 메모리 같은 것은 없습니다. 사용되거나 사용되지 않습니다. 일부 메모리는 실제로 공유됩니다. 이는 이라는 세 번째 열입니다 SHR
. 공유 라이브러리의 메모리입니다. 내가 올바르게 기억한다면 Linux 커널은 너무 복잡하기 때문에 올바른 값을 계산/표시하는 것을 오랫동안 중단한 것입니다.
top
PS 솔직히 말해서 Linux RAM 유틸리티( , htop
, free
등)에 VIRT 열이 표시되는 이유를 모르겠습니다 . 나는 그것을 사용하거나 관심을 기울인 적이 없으며 누군가가 그것을하는 것을 본 적이 없습니다.