[pgsql-jp: 33997] メモリ使用量が少ないにもかかわらず、スワップが発生する
宮本 義武
miyamoto @ intellilink.co.jp
2004年 9月 17日 (金) 17:24:14 JST
宮本と申します。
現在、DBサーバにpostgreSQLを用いたシステムに対し、負荷をかけた際の性能を計測
しています。その際、DBサーバのリソース消費状況をsarコマンドにて取得していま
す。sarによる取得結果からメモリリソースの状況を見ているのですが、メモリ使用
量が実メモリの半分程度しか使用していないにもかかわらずスワップが発生していま
す。
(以下、sarによる出力結果)
Linux 2.4.21-4.ELsmp (ossdb)
15時49分27ノ kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree
kbswpused %swpused kbswpcad
(途中省略)
16時16分30ノ 18184 2043468 99.12 9328 1109376 4192924
0 0.00 0
16時16分31ノ 18364 2043288 99.11 9392 1109640 4192924
0 0.00 0
16時16分32ノ 18000 2043652 99.13 9436 1109072 4192924
0 0.00 0
16時16分33ノ 17972 2043680 99.13 9504 1108540 4192924
0 0.00 0
16時16分34ノ 18412 2043240 99.11 9556 1108112 4192924
0 0.00 0
16時16分35ノ 18040 2043612 99.12 9652 1108020 4192888
36 0.00 36
16時16分36ノ 18644 2043008 99.10 9660 1108048 4192888
36 0.00 36
16時16分37ノ 18068 2043584 99.12 9736 1108188 4192680
244 0.01 244
16時16分38ノ 18148 2043504 99.12 9800 1107620 4192624
300 0.01 300
16時16分39ノ 18060 2043592 99.12 9852 1107496 4192424
500 0.01 500
16時16分40ノ 18084 2043568 99.12 9932 1107440 4192168
756 0.02 756
16時16分41ノ 18096 2043556 99.12 9964 1106988 4192168
756 0.02 756
16時16分42ノ 18144 2043508 99.12 9972 1106404 4191988
936 0.02 936
16時16分43ノ 18024 2043628 99.13 9760 1106628 4191724
1200 0.03 1200
16時16分44ノ 18292 2043360 99.11 9776 1105708 4191460
1464 0.03 1464
16時16分45ノ 18012 2043640 99.13 9764 1105940 4190916
2008 0.05 2008
16時16分46ノ 17916 2043736 99.13 9620 1105784 4190376
2548 0.06 2548
16時16分47ノ 18060 2043592 99.12 9052 1106060 4189608
3316 0.08 3316
16時16分48ノ 18008 2043644 99.13 8884 1106236 4188840
4084 0.10 4084
16時16分49ノ 18056 2043596 99.12 8944 1105624 4188328
4596 0.11 4596
Linuxのメモリ管理として、buffersとcachedは空いているメモリ容量を確保するた
め、実際のメモリの使用量はused-(buffers+cached)と考えています。なので、ス
ワップ発生時のメモリ使用状況は、
メモリ使用量:2043512-(9662+1108020)=925830(kbyte)≒925(Mbyte)
であり、実メモリ(2G)の半分以下しかメモリを使用していないと思われます。
また、postgreSQLの設定(postgreSQL.conf)として、以下のように設定していま
す。
shared_buffer:750M
sort_mem:3M
その他の設定値はデフォルト
この設定で負荷を重くするとスワップが発生し、負荷を軽くするとスワップが起きな
いというように、負荷によってスワップの発生状況が変化していきます。APサーバで
のDBコネクションプール数の最大は250に設定しているため、sort_memを最大に使っ
たとしても以下のように実メモリ量を下回り、スワップが発生するとは思えません。
shared_buffer (750M)+sort_mem(3M×250=750M)+α<実メモリ量(2G)
動作環境は以下の通りです。
OS:RedHatLinux EnterpriseServer ES3
マシンの実メモリは2G
カーネルの共有メモリは1G
DB:postgreSQL7.4.2
メモリ使用量は実メモリに達していないのに、何故スワップが発生してしまうので
しょうか?ご教示の程、よろしくお願いいたします。
pgsql-jp メーリングリストの案内