2

複数のファイルのアップロードを行うためにサーブレットを使用しています (Apache Commons FileUploadを使用)。私のコードの一部を以下に掲載します。私の問題は、ファイルを何度もアップロードすると、アプリサーバーのメモリ消費量が大幅に増加することです。Apache Tomcat サーバーはメモリにハングアップしているようで、決してメモリを返しません。ヒープ領域がメモリ不足です。時々、メモリ不足の例外が発生し、スローされjava heap space errorます。

すべての入力ストリームを閉じました。問題は にあると思いますServletFileUpload。閉じる方法を教えてください。

ServletContext context=this.getServletConfig().getServletContext();
DiskFileItemFactory factory = new DiskFileItemFactory();
FileCleaningTracker fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(context);
factory.setFileCleaningTracker(fileCleaningTracker);

if (isMultiPart) {
    upload = new ServletFileUpload(factory);

    try {
        itr = upload.getItemIterator(request);
        while (itr.hasNext()) {

        item = itr.next();
        if (item.isFormField()) {
        ...
4

1 に答える 1

0

FileCleaningTrackerを使用しています。そのコンポーネントにバグがある Apache commons FileUpload のバージョンがあります (これを参照してください: http://blog.novoj.net/2012/09/19/commons-file-upload-contains-a-severe -メモリリーク/ )

すでに修正されているようです: https://issues.apache.org/jira/browse/FILEUPLOAD-189

そのため、利用可能な最後のバージョンを使用してみてください。

于 2013-06-30T09:31:12.653 に答える