Solaris에서 스왑 영역 사용을 제한하는 방법은 무엇입니까?

Solaris에서 스왑 영역 사용을 제한하는 방법은 무엇입니까?

Oracle Solaris 11.3메모리(RAM)는 128GB이고 스왑 공간은 80GB입니다.

스왑 공간 사용량을 제한하고 싶습니다(크기가 아니라 사용량만).

Ubuntu, Fedora, ... 와 같은 최신 Linux 배포판에는 숫자를 0에서 100까지 편집하고 변경할 수 있는 CentOs파일이 있다는 것을 알고 있습니다. 0은 사용량이 적다는 것을 의미하고 100은 스왑 공간 사용량이 많다는 것을 의미합니다. /proc/sys/vm/swappiness그러나 불행하게도 (Solaris 10 및 11.3에서는) /proc로 명명된 디렉토리가 없습니다 .sys

지금:
어디서 찾 /proc/sys거나 swappiness제출해야 합니까? 이 파일이 솔라리스에 없으면 스왑 사용을 어떻게 제한해야 합니까?

추신:
현재 내 메모리 사용량은 약 30%입니다. 하지만 새 프로세스를 시작할 때마다 스왑 공간이 할당되고 프로세스가 올바르게 시작되지 않습니다.

echo "::memstat" | mdb -k결과는 다음과 같습니다.

Page Summary                 Pages             Bytes  %Tot   
----------------- ----------------  ----------------  ----   
Kernel                      852964              6.5G    5%   
ZFS Metadata                156226              1.1G    1%   
ZFS File Data              2675261             20.4G   16%   
Anon                       4342304             33.1G   26%   
Exec and libs                 1764             13.7M    0%   
Page cache                   28121            219.6M    0%   
Free (cachelist)             18607            145.3M    0%   
Free (freelist)            8687248             66.2G   52%   
Total                     16777216              128G   

결과 swap -l:

swapfile             dev    swaplo   blocks     free   
/dev/zvol/dsk/rpool/swap 303,1        16  8388592  8388592

결과 prstat -Z:

ZONEID    NPROC  SWAP   RSS MEMORY      TIME  CPU  ZONE
 0        96     97G    33G    26%  26:29:09  0.3% global

답변1

스왑 공간 사용량을 제한하고 싶습니다(크기가 아니라 사용량만).

Solaris에서는 스왑 예약을 제한할 수 없습니다.

프로세스에서 사용하는 거의 모든 RAM 바이트는보장하다Solaris는 일종의 영구 백업 저장소를 제공합니다. (Solaris에는 스왑 아웃이 불가능하기 때문에 스왑 예약이 필요하지 않은 특정 유형의 공유 메모리와 같은 몇 가지 예외가 있습니다. Oracle Database SGA와 같은 구현에서는 이러한 기능을 사용합니다.)

실행 파일 및 공유 개체와 같은 메모리 매핑된 파일은 일반적으로 디스크의 실제 파일을 백업 저장소로 사용하므로 스왑 공간을 전혀 사용하지 않습니다. 대부분의 다른 메모리 사용에는 백업 스토리지가 필요합니다. 예를 들어, 프로세스가 커널에서 2GB의 힙을 요청하지만 실제로는 사용하지 않는 경우 Solaris는 프로세스가 메모리를 요청하면 이를 확보할 것을 ​​보장하므로 스왑 공간을 위해 2GB가 예약됩니다. 어떤 OOM 킬러도 프로덕션 데이터베이스 서버의 데이터베이스 프로세스나 고객 주문을 처리하는 온라인 웹 서버의 웹 서버를 종료할 수 없습니다.

Solaris에서는 메모리를 요청하고 커널이 메모리를 가질 수 있다고 말하면 사용자는 메모리를 얻습니다. 실제로 훨씬 나중에 사용하지 않더라도 말이죠. 이는 사용자가 요청하면 향후 어떤 이유로든 교체해야 하는 경우 커널이 이를 넣을 장소가 있는지 확인해야 함을 의미합니다.

"이 기억을 가질 수 있다고 말하는데, 그건 당신이~ 할 것이다어쨌든 접근할 수 있다' 패러다임이 아니라 '이 메모리를 가질 수 있다고 말했지만 거짓말을 했고, 이제 당신이 그것을 사용하려고 했으니 내가 당신을 죽일 것이다' 패러다임, 그리고 비용은 교환 사용량을 보는 것입니다. 너무 높습니다.

프로세스의 스왑 공간 사용량을 보려면 다음 pmap -S명령을 사용할 수 있습니다.

bash-4.1$ pmap -S $$
4622:   /usr/bin/bash
         Address     Kbytes       Swap Mode Mapped File
0000000000400000       1412          - r-x----  bash
0000000000571000         40         40 rw-----  bash
000000000057B000         24         24 rw-----  bash
0000000EC09E6000        236        236 rw-----    [ heap ]
00007FF0C8590000        304          - r-x----  libcurses.so.1
00007FF0C85EC000         20         20 rw-----  libcurses.so.1
00007FF0C85F1000         16         16 rw-----  libcurses.so.1
00007FF0C8600000       6756          - r-x----  en_US.UTF-8.so.3
00007FF0C8CA9000          8          8 rw-----  en_US.UTF-8.so.3
00007FF0C8CD0000         32          - r-x----  libgen.so.1
00007FF0C8CE8000          4          4 rw-----  libgen.so.1
00007FF0C8CF0000         64         64 rwx----    [ anon ]
00007FF0C8D10000         64         64 rwx----    [ anon ]
00007FF0C8D2D000          4          - rwxs---    [ anon ]
00007FF0C8D30000         64          - r-x----  methods_unicode.so.3
00007FF0C8D40000          4          4 rw-----  methods_unicode.so.3
00007FF0C8D50000         24         24 rwx----    [ anon ]
00007FF0C8D60000       1816          - r-x----  libc.so.1
00007FF0C8F36000         68         68 rw-----  libc.so.1
00007FF0C8F47000          8          8 rw-----  libc.so.1
00007FF0C8F50000         64         64 rw-----    [ anon ]
00007FF0C8F6C000        352          - r-x----  ld.so.1
00007FF0C8FD4000         16         16 rwx----  ld.so.1
00007FF0C8FD8000          4          4 rwx----  ld.so.1
FFFF80E6271AF000         20         20 rw-----    [ stack ]
---------------- ---------- ----------
        total Kb      11424        684

다음 줄을 확인하세요.

0000000000400000       1412          - r-x----  bash

Swap열은 특정 메모리 맵에서 스왑을 전혀 사용할 필요가 없음을 나타냅니다. 이는 bash디스크 파일 자체가 지원하는 실행 파일의 일부 입니다 /usr/bin/bash.

하지만 이 줄은:

0000000000571000         40         40 rw-----  bash

40kb의 스왑 공간을 사용하십시오. 이는 매핑된 데이터 세그먼트에서 나올 수 있지만 /usr/bin/bash수정 가능한 데이터(권한 참고)이므로 rw백업 저장소는 수정 불가능한 /usr/bin/bash디스크 파일이 될 수 없으므로 40kb 스왑 예약을 얻습니다.

모든 heap및 매핑 anonstack스왑 공간으로 지원됩니다.

요점:

Solaris에서 모든 스왑 공간을 사용하고 싶지 않고 새 프로세스를 시작할 수 없는 경우 프로세스가 실제로 사용하지 않는 메모리를 요청하지 못하게 하십시오.

또는 더 큰 스왑 파티션을 만드세요.

관련 정보