"RES 합계"가 "사용된 메모리 + 사용된 스왑"(Ubuntu 18.04)과 같지 않은 이유는 무엇입니까?

"RES 합계"가 "사용된 메모리 + 사용된 스왑"(Ubuntu 18.04)과 같지 않은 이유는 무엇입니까?

1GB RAM을 갖춘 VPS 서버(Digital Ocean)에서 java8 UI 애플리케이션을 호스팅하려고 합니다. Java 시작 -Xms600m -Xmx600m(시작 및 최대 메모리 사용량). 또한 VNC + 메이트 코어도 실행합니다. 내 가정은 400m가 Java가 아닌 사람들에게는 충분할 것이고 1GB나에게도 괜찮다는 것입니다.

그런데 이상한 기억력 문제가 생겼어요. 얼마 후 시스템 no swapswappiness=0CPU 사용량이 90%에 도달하고 kswapd0시스템이 정지됩니다.

500MB의 스왑 공간을 추가했습니다. 이제 거의 모든 물리적 메모리가 사용되었으며 전체 스왑 영역도 사용되었음을 보여 swappiness=0줍니다 . top무엇이 메모리를 그렇게 많이 소모하는지 확인해 보니 topRES의 합이 대략 나와 있는 것을 보니 730M예상한 대로인 것 같았습니다.

제가 이해한 바로는 이러한 메모리 사용량 스와핑이 전혀 필요하지 않지만 실제로는 전체 스왑이 500М소비된 것 같습니다. 따라서 총 메모리 소비(물리적 + 스와핑)는 거의 비슷한 것으로 보이며 1400M이 순간에도 여전히 이상하게 멈춥니다. kswapd0첫 번째는 에 있습니다 top.

그래서...

  • 내가 여기서 무슨 실수를 했나요?
  • "사용된 메모리 + 사용된 스왑"이 "RES 합계"보다 두 배 높은 이유는 무엇입니까?
  • 스왑 사용량이 왜 그렇게 높나요 swappiness=0?

top"RES"로 정렬(@TooTee의 팁 뒤에 - SWAP 및 USED 열 추가, 즉 RES+SWAP)

top - 14:12:17 up 14:13,  2 users,  load average: 1.40, 3.49, 2.99
Tasks: 115 total,   1 running,  78 sleeping,   0 stopped,   0 zombie
%Cpu(s): 17.6 us,  8.5 sy,  0.0 ni, 65.2 id,  0.2 wa,  0.0 hi,  0.2 si,  8.3 st
KiB Mem :  1009136 total,    66492 free,   881084 used,    61560 buff/cache
KiB Swap:   511996 total,     1056 free,   510940 used.    22580 avail Mem

  PID    VIRT    RES   SWAP   USED    SHR S %CPU %MEM     TIME+ COMMAND
 3271 3065936 690516 274056 964572    400 S 21.8 68.4 212:57.30 java
 1348  298512  46952  78576 125528   6476 S  6.2  4.7  62:43.95 Xvnc4
  883  496100  12328   2968  15296   7688 S  0.0  1.2   0:41.00 do-agent
 3256  633796   9728   7912  17640   6132 S  1.0  1.0   3:47.81 mate-terminal
 1475  544648   5100   5736  10836   3252 S  0.2  0.5   3:37.92 clock-applet
    1   77684   2572    116   2688    532 S  0.0  0.3   0:11.74 systemd
 1476  493176   2492   4580   7072     44 S  0.0  0.2   0:04.09 wnck-applet
 1412  442048   2340   5208   7548    704 S  0.0  0.2   0:06.59 marco
 1400  992492   1916   5924   7840    304 S  0.2  0.2   3:30.01 mate-settings-d
 1100  111460   1828    440   2268      0 S  0.0  0.2   0:00.00 (sd-pam)
 8684   23072   1644      0   1644     24 S  0.0  0.2   0:00.08 bash
  409   80244   1268   1172   2440   1152 S  0.0  0.1   0:08.14 systemd-journal
 8697   44552   1072      0   1072    388 R  0.2  0.1   0:07.14 top
 1434  700512   1024   6876   7900      0 S  0.0  0.1   0:02.43 mate-panel
  703   70756    584    524   1108    404 S  0.0  0.1   0:02.32 systemd-resolve
  865   31748    512    224    736    436 S  0.0  0.1   0:00.89 cron
 8585  107776    464    856   1320    300 S  0.2  0.0   0:00.81 sshd
 1506  323368    408   1416   1824      0 S  0.0  0.0   0:00.04 polkit-mate-aut
  891  287992    376    792   1168    288 S  0.0  0.0   0:04.66 accounts-daemon
 1359  436920    356   7596   7952      0 S  0.0  0.0   0:00.49 mate-session
  887   44640    312    780   1092     60 S  0.2  0.0   1:54.70 openvpn
  892  263036    180   1112   1292      0 S  0.0  0.0   0:03.61 rsyslogd
 1084  107776    176    844   1020      0 S  0.0  0.0   0:00.21 sshd
 1231  107776    160    868   1028      0 S  0.0  0.0   0:10.07 sshd
 1375  220776     72    716    788      0 S  0.0  0.0   0:00.05 at-spi2-registr
  776   43564     48    944    992      0 S  0.0  0.0   0:00.62 systemd-udevd
  678   71972     36    696    732      0 S  0.0  0.0   0:00.53 systemd-network
  869   50188     36    716    752      0 S  0.0  0.0   0:00.40 dbus-daemon
 1358   38572     36    376    412      0 S  0.0  0.0   0:00.10 vncconfig
  860   70580     32    692    724      0 S  0.0  0.0   0:00.37 systemd-logind
  889  170884     32   7816   7848     12 S  0.0  0.0   0:00.15 networkd-dispat
  597  141924     24    576    600      0 S  0.0  0.0   0:00.33 systemd-timesyn
  885   28332     24    192    216      0 S  0.0  0.0   0:00.00 atd
  944   16412     24    124    148      0 S  0.0  0.0   0:00.00 agetty
  925   72296     16    740    756      0 S  0.0  0.0   0:01.69 sshd
  945   14888     16    112    128      0 S  0.0  0.0   0:00.04 agetty
 1092   76772      4   1180   1184      4 S  0.0  0.0   0:00.03 systemd
 1320   63764      4    484    488      4 S  0.0  0.0   0:00.00 sudo
 1366  349216      4    784    788      4 S  0.0  0.0   0:00.00 at-spi-bus-laun
 1449  281988      4    824    828      4 S  0.0  0.0   0:00.01 gvfs-gphoto2-vo
 1460  267396      4    684    688      4 S  0.0  0.0   0:00.01 gvfs-goa-volume
 1465  269200      4    696    700      4 S  0.0  0.0   0:00.01 gvfs-mtp-volume
    2       0      0      0      0      0 S  0.0  0.0   0:00.01 kthreadd

답변1

지금까지 얻은 지식을 활용하여 내 자신의 질문에 답해 보겠습니다.

내가 여기서 무슨 실수를 했나요?

가장 큰 실수는 프로세스의 메모리 사용량이 RES열에 반영된다고 가정하는 것입니다. 이는 실제로 USED열에 반영되며 (= RES + SWAP)기본 구성에서는 열이 top표시되지 않습니다 USED(이유가 궁금합니다). f키를 입력하여 원하는 표시 열, 순서 및 정렬 순서를 구성합니다.

또 다른 주요 오류는 Java 프로세스의 메모리 사용량 추정입니다. 이는 1GB의 전체 물리적 주소 공간이 유일한 Java 프로세스에 의해 점유될 수 있음을 actual=~960MB의미합니다 .expected=~650MB

"사용된 메모리 + 사용된 스왑"이 "RES 합계"보다 두 배 높은 이유는 무엇입니까?

이제 이 페이지에서 볼 수 있듯이 top일부 프로세스는 에서보다 더 많은 공간을 차지하고 SWAP내 특별한 경우에는 전체 메모리 사용량이 과 RES에서 약 50/50으로 분할되었습니다.RESSWAP

swappiness=0일 때 왜 스왑 사용량이 그렇게 높나요?

실제 메모리 사용량이 매우 높기 때문에 프로세스가 실제 메모리에 맞지 않습니다.

관련 정보