2018年6月27日水曜日

とりあえず、データ変換

 とりあえず、データを加工してごっそり変換するプログラムをつくった。
 DBに格納しておいてそれをあとで利用しようというわけ。
 ところが変換中、元々残りわずかだったMacBookAirのディスクスペースが満杯になってしまった。あわてて中断したけれど、いかんじゃないか、これは。
 まいった。
 あれだな、これはPostgreSQLを別のパソコンに持っていくのが吉か。
 そう思って全然、使っていないBeelink S1のUbuntuにPostgreSQLをインストールした。psqlも。基本になるデータをpg_dumpでつっこんでリモートアクセスできるように設定して。
 動かした。
 MacBookAirのCommonLispから。20年分近いデータだ。時間がかかるだろうなぁ、と思っていたらBeelink S1が固まった——固まったと思った。terminalが反応しなくなったのだ。
 これだから安物は。
 熱暴走か——Beelink S1は熱が溜りやすいとか、なんとかいう噂を耳にしていたのだ。たしかに筐体は熱くなっていた。けれど、何度か、試してみているうちに、原因はBeelink S1ではないことに気づいた。
 topコマンドでみると、「kswapd0」というプロセスで固まっている——ように見える。「kswapd0」とはなんぞ。ググってみてページングプロセスらしいことがわかる。そうやってtopコマンドの出力を見直してみると、たしかにswapメモリが0になっていた。Linuxのせいかよ!
 いやこんなに簡単に固まるようじゃ、世間様が使うわけはない1
 固まっているように見えるが、実は非常にレスポンスが悪くなっているだけで——何もできないけど。もしかしたら自分のせいじゃね?
 組んだプログラムが悪いんじゃね?
 でも。
 毎回、commitするようにしても固まるし。
 毎回、connectしなおすようにしたらsocketを取得できなくなってCommonLisp側がハングアップしてしまうし。
 あかんじゃないか。
 そりゃあ、プログラムを動かさなければ、固まらないさ。それじゃ、意味がない。swapを拡張しても1年分ほどで固まっているから問題の解決にはならんだろうし。

 たぶん状況から考えてリモート接続していると、PostgreSQLがメモリを食い潰しているのだろう(ローカルで動かしたpg_dumpはうまくいっているのだから)。そこでUbuntuにCommonLispの環境をつくってローカル接続からデータ変換するようにしたところ。
 うまくいった。
 swapメモリはまったく消費せずに2

Footnotes:

1

一瞬、FreeBSDをインストールしなおそうか、とは思ったけど。

2

腹立たしいことにそのあと、MacBookAirに変換したデータをつっこんでもディスクが満杯になるようなことはなかった。