GCS - 上传较大文件时出现堆错误
GCS - Heap Error When File of higher size was uploaded
我想上传 400MB 的文件到 Google 云存储。以下是我用来上传 url 和在 angularjs
中发布的代码片段
Java Servlet:
UploadOptions opts = UploadOptions.Builder
.withGoogleStorageBucketName(GCS_BUCKET_NAME);
String url = blobstore.createUploadUrl("/upload", opts);
AngularJS:
$scope.formData.append('file', $scope.filename);
$http.post(uploadUrl, $scope.formData, {
withCredentials: true,
headers: {
'Content-Type': undefined
},
transformRequest: angular.identity
})
代码在文件大小为 100-150MB 左右之前工作正常,当文件大小更大时,我在浏览器控制台中收到以下错误。
Failed to load resource: the server responded with a status of 500 (Java heap space)
我需要做什么来避免这个错误?
正如你在回答我上面的问题时所说,这只发生在开发中,而不是生产中。我的猜测是 google 的 blobstore 代码将整个请求读入他们开发服务器的内存中,但这很难说,因为我们无权访问该代码。如果您需要在开发中测试更大的上传,您可以尝试配置您的开发服务器以使用更多内存启动。看起来我使用 -Xmx512M
(在 eclipse 启动配置的 "VM arguments" 部分),您甚至可以尝试更多。或者,如果它在开发中不重要,您可以只测试较小的上传并相信较大的上传会在生产中工作。 :)
仅供参考,如果您决定启动具有更多内存的开发服务器:在我的例子中,同时使用 Eclipse 和 Maven,我必须创建 Maven 自动生成的启动配置的副本并修改该副本,否则 Maven 会覆盖我的更改。这也意味着我必须不时手动更新我的副本,例如在更新 appengine SDK 时(以反映新版本号)。
我想上传 400MB 的文件到 Google 云存储。以下是我用来上传 url 和在 angularjs
中发布的代码片段Java Servlet:
UploadOptions opts = UploadOptions.Builder
.withGoogleStorageBucketName(GCS_BUCKET_NAME);
String url = blobstore.createUploadUrl("/upload", opts);
AngularJS:
$scope.formData.append('file', $scope.filename);
$http.post(uploadUrl, $scope.formData, {
withCredentials: true,
headers: {
'Content-Type': undefined
},
transformRequest: angular.identity
})
代码在文件大小为 100-150MB 左右之前工作正常,当文件大小更大时,我在浏览器控制台中收到以下错误。
Failed to load resource: the server responded with a status of 500 (Java heap space)
我需要做什么来避免这个错误?
正如你在回答我上面的问题时所说,这只发生在开发中,而不是生产中。我的猜测是 google 的 blobstore 代码将整个请求读入他们开发服务器的内存中,但这很难说,因为我们无权访问该代码。如果您需要在开发中测试更大的上传,您可以尝试配置您的开发服务器以使用更多内存启动。看起来我使用 -Xmx512M
(在 eclipse 启动配置的 "VM arguments" 部分),您甚至可以尝试更多。或者,如果它在开发中不重要,您可以只测试较小的上传并相信较大的上传会在生产中工作。 :)
仅供参考,如果您决定启动具有更多内存的开发服务器:在我的例子中,同时使用 Eclipse 和 Maven,我必须创建 Maven 自动生成的启动配置的副本并修改该副本,否则 Maven 会覆盖我的更改。这也意味着我必须不时手动更新我的副本,例如在更新 appengine SDK 时(以反映新版本号)。