Solarisでスワップ領域の使用を制限する方法は?

Solarisでスワップ領域の使用を制限する方法は?

マイOracle Solaris 11.3メモリ(RAM)は128 GB、スワップスペースは80 GBです。

スワップスペースの使用量を制限したい(サイズではなく使用量のみ)。

Ubuntu、、、Fedora...などの最新のLinuxディストリビューションには、0から100までの数字を編集して変更できるCentOsファイルがあることがわかります。 0 は使用量が少ないことを意味し、100 はスワップ空間使用量が多いことを意味します。/proc/sys/vm/swappinessただし、残念ながら(Solaris 10および11.3では) /procという名前のディレクトリはありません。sys

今:
どこで探す/proc/sysswappiness提出する必要がありますか?このファイルがSolarisにない場合は、スワップの使用をどのように制限する必要がありますか?

PS:
現在、私のメモリ使用量は約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などの実装ではこれらの機能を使用します。)

実行可能ファイルや共有オブジェクトなどのメモリマップファイルは通常、ディスク上の物理ファイルをバックアップストアとして使用するため、スワップ領域はまったく使用されません。他のほとんどのメモリ使用にはバックアップストレージが必要です。たとえば、プロセスがカーネルから2 GBのヒープを要求しているが実際には使用しない場合、Solarisはプロセスがメモリを要求したときにそれを解放することを保証するので、スワップスペースのために2 GBが予約されます。どのOOMキラーも、本番データベースサーバーのデータベースプロセスまたは顧客注文を処理するオンラインWebサーバーのWebサーバーをシャットダウンできません。

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ですべてのスワップスペースを使用したくないために新しいプロセスを開始できない場合は、プロセスが実際に使用していないメモリを要求しないようにしてください。

または、より大きなスワップパーティションを作成します。

おすすめ記事