2019年06月19日
川俣晶の縁側ソフトウェアその他開発日誌 total 1416 count

Mega Picturesでファイルサーバの画像ファイルをローカルに転送して処理すると落ちる

Written By: 川俣 晶連絡先

問題 §

 Mega Picturesでファイルサーバの画像ファイルのデータベースを新規作成して問題なくできる。

 同じファイルをローカルディスクに転送してからデータベースを新規作成するとエラーで落ちる or 極端にスローダウンする。他のソフトも正常動かなくなる。

原因 §

 ファイルサーバ上の画像ファイルからデータベースを作成した場合と、ローカルファイル上で作成した場合では数ギガ単位で所要メモリ量が変化する。従って、たとえ同じファイルであっても、ローカルディスクに転送して処理するとメモリ不足に陥る可能性がある。以下は全てメモリ不足で起こる現象である。

  • エラーで落ちる
  • 極端にスローダウンする
  • 他のソフトも正常動かなくなる

解決 §

 データベースの新規作成時に"Run slowly and Less Memory"のチェックを入れる。

解決についての解説 §

 データベース作成のパス2は、非常に時間が掛かるため通常はマルチスレッドでコア数分だけ並行処理させている。"Run slowly and Less Memory"のチェックを入れるとこれをシングルスレッドで処理するようになり、速度は低下するがメモリを消費しないようになる。

 しかし、この場合は速度の低下は起こらないかもしれない。なぜなら、メモリ消費量が過大になると頻繁に補助記憶とのスワップが発生して処理がスローダウンするからである。更に消費量が増えると、処理そのものが進まなくなり、永遠に完了できない。それなら、シングルスレッドでゆとりあるメモリで走った方が速い。

原因についての解説 §

 この処理は、全てOS側の問題である。

 Mega Picturesでは特にファイルサーバとローカルで処理を分けたりはしていない。

 

補足 §

 ローカルファイルを処理した際に落ちることは前々から分かっていて、どこでどういう例外が起きるか分かっていたのでこのバグをFIXしようと思って調査したところ、上記のような問題が判明した。