1

非常に単純なRestXQサービスが設定されているDebianサーバーにeXist 2.1(バージョンeXist-db-setup-2.1-rev18721)がインストールされています。

declare
    %rest:PUT("{$content}")
    %rest:path("/foo")

function init:init($content as node()*) as item()+ {
    let $log := util:log("INFO", " test")
    let $id := $content/Identifiant/text()
    let $mypath := "/db/test/"
    let $finalpath:=xmldb:store($mypath, concat($id,".xml"),$content)
    let $code := if($finalpath="") then(500) else(201) 
    return (
    <rest:response>
        <http:response status="{$status}">
            <http:header name="Content-Type" value="application/xml; charset=utf-8"/>
        </http:response>
    </rest:response>
    ,$finalpath)
};

それを使用するスクリプトを呼び出すと、問題はありません。

しかし、その後、サービスを 2,000 回呼び出すスクリプトを作成しようとしました (要するに、データベースに 2,000 個の異なるファイルを入れたいのですが、それぞれのファイルは 100 行程度のかなり小さいものです)。

一度起動すれば問題ありません。もう一度試すと、しばらくしてエラーが発生し、ダッシュボードに問題が発生します (まったく応答しません)。ただし、xmlrpc クライアントとその他のアクセスは、eXist を再起動するまで引き続き機能します。

restxq.log で、私はこれを見ました:

原因: java.io.FileNotFoundException: /tmp/_mmtfm_c1600dd8-7203-442c-986b-90328917d6b5/mmtf_141820323125911241744648192085.tmp (開いているファイルが多すぎます)。

そのため、Linux システムで eXist の pid を確認すると、lsof を使用して、eXist プロセスが 4,000 を超えるファイルを使用していることがわかります。複数の実験の後、4324 (または 4325) が問題が発生する限界のようです。

eXist を再起動すると、プロセスは 450 個のファイルを使用します。Web サービスを呼び出すたびに、exist/tools/jetty/tmp/ にファイル (およびフォルダー) が作成され、プロセスによって使用されます。

誰かがこの問題の前にいましたか? PUT が完了すると、これらのファイルがリリースされないのはなぜですか?

ありがとう、そして良いお年をお迎えください^^

4

1 に答える 1

0

@lomobob、あなたはこの質問をexist-openメーリングリストにも投稿しました。手間がかからないように、どちらかの場所で質問することをお勧めします。

于 2015-01-06T18:40:22.237 に答える