[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 メーリングリストの案内