goo blog サービス終了のお知らせ 

ttt

getttyent

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

2008-09-12 23:36:15 | デジタル・インターネット

しばらく前から、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


コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。