マイ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/sys
かswappiness
提出する必要がありますか?このファイルが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
とマッピングanon
はstack
スワップスペースとしてサポートされています。
ポイント:
Solarisですべてのスワップスペースを使用したくないために新しいプロセスを開始できない場合は、プロセスが実際に使用していないメモリを要求しないようにしてください。
または、より大きなスワップパーティションを作成します。