原创

従来の Google App Engine 1.9.x で Blobstore にファイルをアップロードすると OutOfMemoryError が発生し、Google App Engine 上の Gunicorn ワーカーがランダムに SIGKILL を送信して TIMEOUT が発生します。何が起こっているのか?

温馨提示:
本文最后更新于 2024年04月12日,已超过 47 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

私は、ファイルを Blobstore にアップロードするために Google App Engine (GAE) のレガシー 1.9.x ライブラリを使用する Java アプリケーションに置いてあります。java.lang.OutOfMemoryError: Java heap spaceエラーが発生します。これは比較的小さなファイル (約 2MB) の場合でも発生します。スタック トレースの関連部分は次のとおりです。

WARNING: Error for /_ah/upload/[upload_url]
java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3236)
    at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118)
    at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
    ...
    at com.google.appengine.api.blobstore.dev.UploadBlobServlet.doPost(UploadBlobServlet.java:114)

私のテスト方法の簡略版は次のとおりです。

@Test
@OperateOnDeployment("default")
public void shouldBeAbleToUpload() throws Exception {
    String uploadUrl = RemoteBlobstoreUploader.getBlobstoreUploadUrl("demo");
    System.out.println("Upload to " + uploadUrl);

    try (InputStream sampleWebsite = getClass().getResourceAsStream("/sample.html")) {
        if (sampleWebsite == null) {
            throw new NullPointerException("InputStream is null. Make sure '/sample.html' exists in resources.");
        }

        byte[] fileContent = readFileToByteArray(sampleWebsite);
        
        HttpResponse<String> response = Unirest.post(uploadUrl)
                .field("file", fileContent, "sample.html")
                .asString();

        System.out.println(response.getStatusText());
        Assert.assertEquals("Should be HTTP OK", HttpStatus.SC_OK, response.getStatus());
    }
}

質問:

  1. メモリ管理: ファイルがメモリに読み込む方法が原因で発生している可能性がありますOutOfMemoryErrorか、当面 GAE 開発サーバーの設定に問題がある可能性が高いですか?

  2. ファイルアップロード設定: 従来の GAE 1.9.x 環境を考慮して、Blobstore にファイルをアップロードするこのアプローチに何か不足しているものや設定が間違っているものはありますか?

  3. エラー処理: スタックトレースとコードスニペットを考慮すると、この問題の根本的な原因は何ですかOutOfMemoryError?また、ファイルを通常にアップロードするにはどうすれば解決できますか?

このエラーを回避するためにテスト環境を正しく構成するか、ファイルのアップロードを最適化するかについての洞察や提案をいただければ幸いです。

正文到此结束
热门推荐
本文目录