gdbのgenerate-core-file (失敗)

物理メモリ1GB+デバイススワップ領域2GBのLinuxの上に行儀が悪いXクライアントがいて、Xサーバのサイズが1.5GBのブタになっている状況。以下がそのときのtopの出力結果。これはかなり悲惨。

 10:00am  up 14:05,  1 user,  load average: 0.50, 0.46, 0.29
78 processes: 77 sleeping, 1 running, 0 zombie, 0 stopped
CPU states:  3.6% user,  3.1% system,  0.0% nice,  8.4% idle
Mem:  1031504K av,  912668K used,  118836K free,       0K shrd,    3256K buff
Swap: 2040244K av,  742984K used, 1297260K free                   26612K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
  911 root      17   0 1542M 823M 47512 S    15.2 81.7  32:15 X
19126 xdigit    16   0  1057 1056   832 R     2.8  0.1   0:00 top
    1 root      15   0    96   72    52 S     0.0  0.0   0:04 init
    .
    .
    .

後でXサーバの内部状態を解析できるようにcoreを採取したかった。素直に kill -ABRT とせずに、敢えてgdbの generate-core-file コマンドを選択してしまった。結果は、いつまでたってもコマンドが完了しない(>_<)。所々にreadできないメモリ領域があるというワーニングメッセージが出てるのも気になる。状態を確認すると、若干余裕があったはずのデバイススワップまでも完全に使い切ってしまい、スラッシングに陥っている。ありゃりゃ。失敗したなー。やむなくgdbを kill -KILL。Xサーバはgdbから正常にデタッチされていないため停止状態。簡単に再開させる方法が思いつかなかったので、仕方なくXサーバもkill。詳細は分からずじまい。再現は簡単にできるだろうから大きな支障はないんだけど、ちょっと悔しいぞ。

  1. 物理メモリサイズを超える巨大なcoreを出力する目的には適していない?
  2. スワップアウトしたページをちゃんとスワップインさせつつcoreに書き出しているのかは確認できず。