0

大きなblobファイルでエンティティを永続化しようとしていますが、JBossログに「メモリ不足」エラーが発生しました。

いくつかの構成でテストしましたが、常に同じ結果が得られます。jBoss6とMySQLを使用しています。

この例...エンティティ:

@Entity
@Table(name="ficheros")
public class Fichero implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(unique=true, nullable=false)
    private int idfichero;

    @Lob()
    @Column(nullable=false)
    private Blob fichero;

    public Fichero() {
    }

    public int getIdfichero() {
        return this.idfichero;
    }

    public void setIdfichero(int idfichero) {
        this.idfichero = idfichero;
    }

    public Blob getFichero() {
        return this.fichero;
    }

    public void setFichero(Blob fichero) {
        this.fichero = fichero;
    }   
}

クラス:

public Integer insertaFichero(Fichero fich) {
    ficheroDAO.create(fich);

    return fich.getIdfichero();
}

それを行う別の方法はありますか?

4

1 に答える 1

1

このエラーの問題は、オペレーティングシステムがスレッドスタックにそれ以上のメモリを割り当てることができないため、新しいスレッドのインスタンス化に失敗することです。おそらくそれはJBossの問題ではありません。各スレッドが使用するメモリの量を減らす必要があります。JBossスレッドの細かいサイズは128kまたは256kです。

この記事はJBossのドキュメントから見ることができます

https://community.jboss.org/wiki/OutOfMemoryExceptions?_sscc=t

https://community.jboss.org/wiki/OutOfMemoryExceptionWhenCannotCreateThread

スタックオーバーフローの質問も参照してください: 安全なスレッドスタックサイズ?

このメモリ量を減らすために、Linuxで次のコマンドを見つけました。

ulimit -s 256
于 2012-11-15T13:37:27.883 に答える