shinonon301 / Bkroonga2

Groonga Plug-In Ver.2 for Becky! Ver.2
0 stars 0 forks source link

「メモリの確保に失敗」などインデクシング上の問題など #16

Open litton102 opened 1 year ago

litton102 commented 1 year ago

絶対手放せないプラグイン大変ありがとうございます。 環境:Becky!2.8104、Bkroonga2.0.6、Groonga12.0.8、xdoc2txt→アリ

以下のような現象を何とか改善できないものかと思っていますがもしアドバイス等お願いできるなら大変幸いです。

Becky!内にメールボックスは2つ(仕事、私用)あります。 ・仕事用→添付ファイルがかなり多い  メール最多は、送信済みフォルダで6万通  受信2~3万通たまったフォルダ5~6あり ・私用→2~6万通たまったフォルダ5~6あり

Bkroonga2から導入半年くらいだと思いますが、これまで10回くらい以下のような状況(特に問題1と2)を繰り返しています。

インデクシングが完了後、例えば50通ほどのメールがHITするであろう人名をキーワードで2~3通しかHITしない(←それは明らかにおかしい)→【問題1】  ↓ ならば、最初からインデクシングやり直すか  ↓ 「bkroonga2db」ごと削除  ↓ Becky!を再起動するとBkroonga2が「インデックスファイルを作ります」的なメッセージを合図に、インデクシング開始  ↓ ステータスバーの左下に、ものすごい勢い(1秒10通?)ペースでインデクシング進展  ↓ 数時間後、(おそらくB2.exeから)「メモリの確保に失敗しました」のダイアログ表示 (→同例みあたらず:https://www.google.com/search?q=becky+%E3%83%A1%E3%83%A2%E3%83%AA%E3%81%AE%E7%A2%BA%E4%BF%9D%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F) (※1OKしても即座にB2は落ちず、一次的にインデクシングも続行するが、やがて、何もエラーもなくB2が落ちる(デスクトップからフッと消える)) (※2 何度も遭遇してますが、トリガーとなるメールが存在するのかなど原因不明です) ↓ 一回この「メモリ確保失敗」病が出てしまうと、「1秒10通?」ペースが、1秒2通ペースに落ち込んでしまい、二度と直らない→【問題2】 ※特定フォルダで遅くなるのではなく、明らかに「メモリ確保失敗」の初回発生が 分岐点になってインデクシングが遅くなっているように思います。  ↓ (再)ならば、最初からインデクシングやり直すか  ↓ (再)「bkroonga2db」ごと削除   (・・・・以下、繰り返し・略)

Win再起動後にインデクシング実施したり、インデクシング中はウィルスソフト(ESET)を一次的にOFFにしたり、いろいろ切り分けは考えたのですが。

一度だけ、「メモリ確保失敗」病が出て遅くなろうが、かまわずインデクシングは完走して、いろんなキーワードがとてもよくHITするインデックスができたのですが、1カ月くらい運用していたら、何もHITしなくなる現象に遭遇してまあ最初からインデックスを作り直す(↑上記のループ)に戻っています。

あと、検索キーワード履歴がふっと全部消えてしまうということが一度ありました。

bkroonga2dbフォルダのサイズは、通常6GB程度ですが、10GB超になったこともあったと思います。

お心当たりのアドバイスなどあれば、是非よろしくお願い致します。

shinonon301 commented 1 year ago

おそらくそのメッセージは、(litton102さんのご想像通り)B2が直接出力しているメッセージだと思います。 私は、私の使っているメールサーバの仕様にもよりますが、およそ20MB以上のメールを扱ったことがないので、そのメッセージを見たことがありません。 というわけで、まずは「巨大なメールが原因か」を切り分けるために、数十~100MB以上のメールをインデクシング対象外メールボックスに移動して現象が改善されるかを試すことはできますでしょうか? ただ仮にそれで切り分けられたとしましても、今のところ回避策としては、「bkroonga2では◯MB以上のメールはインデックス対象外とする(インデックス対象メール容量を設定できるようにする?)」くらいしか思いつかないですが。。。

litton102 commented 1 year ago

早速のご返事ありがとうございました。 御礼が遅くなって失礼いたしましたが、いただいたコメントを受け、少し追試しました。

といっても、「数十~100MB以上のメールをインデクシング対象外メールボックスに移動して現象が改善されるか」というのは大変なので、以下のような手順です。

新規メールボックス「test」を作成。 続いて、別のメールボックスの60KB~250KBほどのメールを6000通ほどを、Ctrl+C→Ctrl+Vで「受信箱」にコピー。 test以外のメールボックスは、すべて「除外するメールボックス」にチェックON。 Becky!終了→「bkroonga2db」をフォルダごと削除→Becky!起動→「データベースファイルを作成します(→OK)」 【結果】10分くらいで、順当に6000通のインデクシング完了。検索HITもOK。

続いて、20~30MBの添付ファイルがついたメール5通をCtrl+C→Ctrl+Vで「受信箱」に追加。 Becky!終了→「bkroonga2db」をフォルダごと削除→Becky!起動→「データベースファイルを作成します(→OK)」 【結果】10分くらいで、順当に6000通のインデクシング完了。検索HITもOK。

というわけで、「巨大なメールが原因か」は、これだけでは検証不足かもしれませんね。

(余談)最初、20~30MBの添付ファイルがついた多数のメールをCtrl+ドラッグでtestの受信箱にコピーしようとしたら、以下のエラー窓がでました。これはこれで「正しい」挙動なのだとは思いますが…。 ――――――――― Bkroonga2 ――――――――― BkC_OnDragDrop Extention メモリが足りません ―――――――OK―

shinonon301 commented 1 year ago

100MB以上(もしかしたら1GBに近いものも?)の添付ファイルがあったりしませんかね? Bkroonga2ではBecky!のBKA_GetSourceというAPIでメールソースを取得しているのですが、この際おそらく、メール本文全体がメインメモリにいったん展開されます。そこからさらにBkroonga2がメール解析を行うので、一時的にメール容量×2以上のメモリが使用されると思われます。Becky!は32bitアプリ(当然Bkroonga2も)なので、例えば1GBのサイズのメールがあったらそれだけでメモリ不足になる可能性があります。一応Bkroonga2では、添付ファイルの展開などはメモリ上ではなくファイル上に作るようにしたりしてなるべくメモリに優しい設計にはしているつもりですが、メール容量がGB近いものの扱いはさすがに32bitアプリではなかなか厳しいものがあります。 なので、もし対策するとしたら、先の返信でも書きましたが、「bkroonga2では◯MB以上のメールはインデックス対象外とする(インデックス対象メール容量を設定できるようにする?)」くらいしかないかと思います。

litton102 commented 1 year ago

度々のコメントありがとうございます。

私のB2には、私用、仕事用、それぞれのメールボックスに、60ずつくらいフォルダがありますが、各フォルダを1つ1つ、「サイズでソート」しながら探ってみました。結果的に、30~40MBの添付ファイルがついているメールはいくつも(100以上?)見受けたものの、50MBを超えるメールは見当たりませんでした。

もし「bkroonga2では◯MB以上のメールはインデックス対象外とする」というオプション追加が容易でしたら、是非試してみたいです。よろしくお願い致します。