GCSにあるファイルを取得してそのままStreamとして使ったときにOutOfMemoryが発生した
一つの対策案としてGCSにあるファイルを一度AppEngineのサーバーのローカルに置いて、そのローカルのファイルを読んで使うとどうなるかという案がでたので試したい
このとき、AppEngineにおける一時ファイルの置き場所がどこなのか調べた
公式ドキュメントを見つけた
cloud.google.com
一時ファイルの書き込みだけが必要な場合は、標準の Java 11 メソッドを使用して、/tmp
という名前のディレクトリにファイルを書き込むことができるみたい
実装するとこんな感じになる
Blob blob = storage.get(BlobId.of(properties.getGcs().getBucketName(), fileName)); blob.downloadTo(Path.of("/tmp", fileName)); Path path = Path.of("/tmp", fileName); BufferedReader bufferedReader = Files.newBufferedReader(path, StandardCharsets.UTF_8);
ただ、これでもダメで、以下のエラーが出てしまったので別の手を考える
Exceeded hard memory limit of 512 MB with 592 MB after servicing 0 requests total. Consider setting a larger instance class in app.yaml.