teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

情報を追記しました

2020/05/09 12:29

投稿

lyzmfeqpxs54
lyzmfeqpxs54

スコア237

title CHANGED
File without changes
body CHANGED
@@ -4,10 +4,12 @@
4
4
  AWS上でRails + Nginxでシステム運用しており、ファイルのアップロードはCarrierwave、アップロード先はAWSのS3を用いております。
5
5
  AWSはt2 micro(メモリ1G)を使用しています。
6
6
 
7
+ ページにダウンロードリンクが存在し、クリックするとS3上のファイルをそのPCにダウンロードする流れです。
7
- タイトル通りなのですが、S3上のファイルをダウンロードしようとすると「nomemoryerror (failed to allocate memory)」エラーが出てpumaがダウンし502エラーが出てします。
8
+ しかしダウンロードしようとすると502 Bad Gatewayエラーがブラウザ上には表示され、railsログには「nomemoryerror (failed to allocate memory)」エラーが出ている状況です。
8
- Railsのコントローラは下記のようにコーディングしています。
9
9
 
10
+ Railsのビューとコントローラは下記のようにコーディングしています。
10
11
 
12
+
11
13
  vmstatでメモリを見てみると初期状態でfreeは520M程度であり、300M程度の動画をダウンロードを開始すると一気に下がっていき、60M付近でエラーとなりpumaがタスクキルされてしまうような流れです。
12
14
 
13
15
  少々古い記事ですが、下記URLに大きいファイルをダウンロードする際のコードが書いてあるのですが、S3の場合どのようにすればよいのか分からずこちらに質問させていただきました。
@@ -35,7 +37,11 @@
35
37
  でメモリ不足になっていそうです。
36
38
 
37
39
  ```ruby
40
+ # ビュー
41
+ <a href="/dl/movie/id}">ダウンロード</a>
38
42
 
43
+
44
+ # コントローラー
39
45
  def download
40
46
  user = User.find_by(id: params[:user_id])
41
47
  client = Aws::S3::Client.new(

1

状況を追記しました

2020/05/09 12:29

投稿

lyzmfeqpxs54
lyzmfeqpxs54

スコア237

title CHANGED
File without changes
body CHANGED
@@ -25,6 +25,15 @@
25
25
  ELB
26
26
  S3
27
27
 
28
+
29
+ ーーーーーーーーーー 追記 ーーーーーーーーーー
30
+
31
+ 調査してみると、ダウンロード時の「data.read」ではなく
32
+ data = client.get_object(:bucket => Bucket_name,
33
+ :key => user.movie.path).body
34
+
35
+ でメモリ不足になっていそうです。
36
+
28
37
  ```ruby
29
38
 
30
39
  def download