2008年9月13日土曜日

(FreeBSD) Gdk-WARNING **: shmget failed: error 12 (Cannot allocate memory)

しばらく前から、gnomeを使うようになりました。それがきっかけだったのか不明ですが、emacsを実行すると、



(emacs:26676): Gdk-WARNING **: shmget failed: error 12 (Cannot allocate memory)



と表示されるなど、「Gdk-WARNING **: shmget failed: error 12 (Cannot allocate memory)」をときどき見かけるようになりました。gtkだかgdkだかのwarningメッセージは、昔からダラダラ大量に出たりするので、またか、くらいに思ってたんです。



今日なんとなく、ネット検索してみたところ、本当に、共有メモリが足りなくてこれが出てるんでは?と思い、対策を施してみることに。



FreeBSDの場合、root権限で、以下のコマンドを実行して、共有メモリの量を変更できます。

sysctl -w kern.ipc.shmall=32768
sysctl -w kern.ipc.shmmax=13421772

すると、「Gdk-WARNING **: shmget failed: error 12 (Cannot allocate memory)」が出なくなりました。



なんだ、オオカミ少年かと思ってたら、今度は本物か。



というわけで、FreeBSDのブート時にも自動的に設定されるようにするために、/boot/loader.confに

kern.ipc.shmall=32768
kern.ipc.shmmax=134217728

と書き加えておきました。この設定は、PostgreSQLを動かしているFreeBSDなサーバーと、同じにしただけです。



共有メモリの使用状況は、「ipcs -a」コマンドで確認できます。



# ipcs -a
Message Queues:
T           ID          KEY MODE        OWNER    GROUP    CREATOR  CGROUP                 CBYTES                 QNUM               QBYTES        LSPID        LRPID STIME    RTIME    CTIME   

Shared Memory:
T           ID          KEY MODE        OWNER    GROUP    CREATOR  CGROUP         NATTCH        SEGSZ         CPID         LPID ATIME    DTIME    CTIME   
m        65536      5432001 --rw------- pgsql    pgsql    pgsql    pgsql               4     28270592          726        58285 13:53:14  9:52:09  8:03:22
m    283181057            0 --rw------- nhh      nhh      nhh      nhh                 2      
(たくさんあるので省略)

Semaphores:
T           ID          KEY MODE        OWNER    GROUP    CREATOR  CGROUP          NSEMS OTIME    CTIME   
s        65536      5432001 --rw------- pgsql    pgsql    pgsql    pgsql              17  8:03:22  8:03:22
s        65537      5432002 --rw------- pgsql    pgsql    pgsql    pgsql              17  8:03:22  8:03:22
s        65538      5432003 --rw------- pgsql    pgsql    pgsql    pgsql              17 15:01:21  8:03:22



・・・って、あれ、この手元のFreeBSDでも、なぜかPostgreSQLが動いてるぞ?!



どうやら、テストのために動かして、そのまま止めるのを忘れていたようです。
あ、PostgreSQLを動かしたから、デフォルト設定での共有メモリの容量では足りなくなっていた、ってことですか。





共有メモリの量を増やして以来、firefoxやthunderbirdがキビキビ動くようになった気がするんですが、気のせいでしょうか。



いつのころからか、やけに画面描画がもっさりとするようになってきて、ストレスを感じていたんですが、もしかしてPostgreSQLを動かすようになって以来、画面描画がもっさりするようになっていたのかも?!



共有メモリって、フォント関係で使ってるんですかね?



firefoxもthunderbirdも、上記のwarningメッセージは見えてなかったので、共有メモリが原因だったとしても、まったく気づかず。





shared memoryを、「共有された思い出」と誤訳すると、なんか、SF小説のテーマっぽく感じる。



「地球上の人類すべては、太古から引き継がれた共通の記憶を共有している。それは・・・」みたいなノリで。



20080912



0 件のコメント:

コメントを投稿