質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

0回答

2089閲覧

AWS Cloud9 でボリュームを増設したにも関わらず、ファイルの保存に失敗する

hika-rakuyo

総合スコア15

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2021/08/19 07:00

編集2021/08/20 09:40

前提

開発環境 AWS cloud9 (t2.micro)
ボリューム 現在20GB
Swap領域の使用 1GB分
[参考] EC2インスタンスのSwap領域を作成する - Qiita

LaravelでのWebアプリケーション開発にCloud9を使用しております。
開発中のプロジェクト4件分のディレクトリが同一環境内に保存されています。

不具合の発生頻度は頻度としては1日につき1,2回程度です。
現状、こちらには退避策もあり致命傷には至っておりませんので、回答予定の閲覧者様には余裕のある時にご確認いただきたく思います。

発生している問題

ファイルの保存を行おうとすると時々、上部にしばらく Saving... と表示されます(通常であれば、瞬時に保存処理が終わる)。
しばらく待って All changes saved. と出る場合もありその時は安堵するのですが、
大半の場合は赤色のアラートが出現し Failed to write to '(ファイルの中身)'. Failed to retrieve resource from '[ファイルの絶対パスURL]' with code 0. と警告されます。

一度こうなってしまうと、ターミナルも固まって df -h コマンドなどが試せない状況です。

この状況でページの更新・cloud9の開き直しを行っても、良くても同様の不具合が再現されるまでで、
悪い場合は大きくConnecting… と表示されたままで、いつまで待ってもCloud9が立ち上がらなくなってしまいます。
どの道このままでは作業になりませんので、
EC2 > インスタンス > インスタンスの状態 > インスタンスの停止
と進み、インスタンスが「停止済み」になるのを確認してから再度cloud9を開くことで、
環境のリフレッシュを行った気になってやり過ごしています。

環境を操作することで解決をはかる

以下、環境の遍歴を時系列順に記します。(特にボリューム増設に関しては後戻りができないので、このような書き方をしています)

[0] ボリュームが10GBしかない環境下で、容量不足が原因と思える不具合が小出しに出始める
↓ 症状: ファイルを開くのがスムーズにできなかったり、時々保存に時間がかかると感じる程度。
[1] 講習で指定がありSwap領域を使用していたが、ボリュームを優先しSwap領域を解放する
↓ 症状: メモリが不足しファイルの保存に支障が出る
[2] ググった限りではボリュームを増設した方がストレスを軽減できそうだと判断し、10GBから20GBに増設
↓ 症状: ボリュームを増やしても同じ不具合が出る
[3] Swap領域を再度確保し、メモリの使用を安定させる
現在の症状: 頻度は減ったものの、まだ同じ不具合が出る

[ボリューム増設時に引っかかったこと]
ボリュームの増設に際して「おや?」と思ったことがありました。
EC2 > ボリューム から容量を変更したところまで済んだら、次はCloud9上で容量を割り当てるコマンドを打つ必要があるそうです。
ですが、lsblk コマンドを打って確認すると、/dev/xvda1 のサイズが既に20MBに変更済みになっていました。
それでも念のため、パーティションの拡張コマンド(sudo growpart /dev/xvda 1)とファイルシステムの拡張コマンド(sudo resize2fs /dev/xvda1)を打ち込んではみました。
パーティション拡張に対する返答: NOCHANGE: partition 1 is size 41940959. it cannot be grown
ファイルシステムの拡張に対する返答: The filesystem is already 5242619 (4k) blocks long. Nothing to do!
やはりコマンドを打つまでもなかったようでした。

ボリューム増設時に参考にしたサイトはこちらです。
【画像あり】AWS Cloud9の容量不足を解決する方法

その他

ボリューム拡張後は、Swap領域を使用し始めてから不具合の頻度が減っています。
また、Swap領域を使わないと「メモリが残り149MBしかないよ!」といったアラートが高頻度で出現するので、なんとなく心臓に悪くて外せないでいます。

話は反れますが、PCのタスクマネージャーやスマホの設定で目にする「メモリ・ディスク・ストレージ」や、AWS内での「メモリ・ボリューム」など、自分の頭の中では一括して「容量」と捉えてしまっています。どの「容量」が切迫しているのかきちんと切り分けないといけないのですが、もしこの質問における私の認識がとっ散らかっているようでしたら遠慮なくご指摘いただければ幸甚です。

ご指摘を受けて (2021/08/20 09:00 追記)

ご指摘と同時に便利なコマンドを教えていただいたので、今からでもバックグラウンドで何が起こっているのか調査することにしました。
(デフォルトで入っていると聞いて早速sarを打ってみましたが、自分で消したのかそもそも入っていなかったのか「インストールしてね!」と言われたので、sar をインストールして以後活用しようと思います)

メモリとディスクの現状を vmstat コマンドで表示してくれるので、さっそく打ってみました。
vmstat

私の場合は「メモリがネックの可能性が高い」とヒントを頂きました。
そこでメモリに着目すると、ページキャッシュ(cache)がメモリの大半を食っています。
これが邪魔をしてメモリのパフォーマンスが落ちていた、のでしょうか……。
とりあえず、 echo 3 > /proc/sys/vm/drop_caches 等と打つことでbuffとcacheの掃除ができるようで。

vmstat2

一旦これで様子を見ます。

[df -h の結果について]
df -h
こちらが現状、「ボリューム拡張後・Swap使用中」です。

記憶する限り、
ボリューム拡張前・Swap使用中 /dev/xvda1 99%
ボリューム拡張前・Swap開放後 /dev/xvda1 85%
という変化を観測しています。

[2021/08/20 17:30 追記]
現状、数字的な根拠を追っている最中ですが、負荷が強まる要因として心当たりがあるのは、次の2点です。

  • ファイルの編集・ターミナルの使用でPaneを4つ使っている
  • php artisan tinker, php artisan serve系を中断しない癖がついている

これを最初の「前提」に書けなかったのは、自分の中では「Laravelプロジェクトを効率よく組立てたくて、普通に使っているだけなのに…」という思い込みがあったからだと思います。

vmstat でリアルタイム値を計測したり sar でログを追ったりするうちに、
「負荷のかかるタイミングを見極められるのであれば、Cloud9の運用方法そのものを改善できるのでは」と気づかされました。
案件を捌くのを優先しつつ、ゆとりのある時にじっくり追ってみようと考えています。

[2021/08/20 18:30 追記]
最初にこの質問を投稿して以来、初めて同じ問題が再現されました。
本記事内のアラートメッセージの記述も修正済みです。
そのタイミングで行っていたのは、以下の2点です。

  • 1つのPaneにつき5件ほど開いていたファイルを必要に応じてクローズ
  • cd コマンドによる操作ディレクトリの移動

sar コマンドで表示された記録をスクショしました。追ってアップロードします。
(情報量が多いため、必要部分のみ抽出しておきます。)
発生日時は2021/08/20 18:00頃です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2021/08/19 07:22

> AWS内での「メモリ・ボリューム」など、自分の頭の中では一括して「容量」と捉えてしまっています。 それがわかっているのなら一つ一つ整理してください。 > Swap領域を使わないと「メモリが残り149MBしかないよ!」といったアラートが高頻度で出現するので そうだとすると、使っているインスタンスのメモリがそもそも不足しているのが原因の可能性が高いのでディスクを拡張してもあまり意味はないのでは? t2.microに4つもLaravelのプロジェクト置いたらそりゃそうなる気がしますけど。 何がネックになっているのかを調べないと、対処が正しいかわかりません。まずは切り分けられるようになってください。 ちなみに、サーバ内で各種メトリクスを確認するにはsarコマンドが便利です。 Amazon Linuxではデフォルトで入っているはずです。 https://qiita.com/makaaso-tech/items/6e27a2f0948241891667 ディスク容量とかはdfコマンドで見る必要がありますが。 df -hをした時にディスクの使用率も見られると思いますけど、それはどうなってましたかね。 見た感じメモリがネックの可能性が高いのでその推移を見てみてください。
hika-rakuyo

2021/08/19 08:27

ご指摘ありがとうございます。 >> Swap領域を使わないと「メモリが残り149MBしかないよ!」といったアラートが高頻度で出現するので >そうだとすると、使っているインスタンスのメモリがそもそも不足しているのが原因の可能性が高いのでディスクを拡張してもあまり意味はないのでは? >t2.microに4つもLaravelのプロジェクト置いたらそりゃそうなる気がしますけど。 メモリの調達はSwapで頑張って、ボリュームを増やせばプロジェクトのディレクトリをいくつ増やしても問題ないだろうと安直に考えていました...。これからもプロジェクトは増えていく予定ですし、クローズした案件はアーカイブしつつ、ケチにならず素直にt3.small以上で環境を作って出直すべきかもしれませんね。(4つあるプロジェクトは現状全部生きてます) > ちなみに、サーバ内で各種メトリクスを確認するにはsarコマンドが便利です。 sar コマンドは意識して使ったことがありません。手に負える範囲で使用して、状況を調べてみますね。 > df -hをした時にディスクの使用率も見られると思いますけど、それはどうなってましたかね。 df -h は問題が起こる前後で良く使用します。 が、こういう頭なので /dev/xvda1 のusageにしか目が行っていません。 始めに気づいたときには 99% で、Swapを解放して85%に戻せたのは記憶にあります。 たぶん見るタイミングはそういうところじゃないんでしょうけど… 残念なことに、不具合が出始めたころからしっかり記録を残しているわけではなく、記事に書いた内容は殆ど記憶頼みの曖昧なものです(参考にしたサイトのメモだけは一丁前に残っています)。 この問題が出始めたころに後戻りすることもできないので、今できることとして、ご教示いただいたコマンドを使ってしばらく調査してみます。 何がどれだけを占めていて、どう推移しているのか、それが何を意味するのか。 時間をかけて、 > 一つ一つ整理し てみます。 分かったことがあれば都度本文に追記いたします。
yu_1985

2021/08/19 09:06

sarコマンドの有用なところは一定の感覚で過去の時点の値が残っていることですね。 また、CloudWatch Agentを入れてCloudWatchにサーバメトリクスを送ってそっちで確認できるようにしてもいいですね。CloudWatch以外の監視サービスでももちろん構いません。 Swap領域はメモリ容量が恒常的に足りない時に使うものではありません。 一般にメモリへのアクセスよりもディスクに対するアクセスのほうが遅く、スワッピングが常に発生している状態だとシステムのパフォーマンスに影響することは間違いないでしょう。 また、Swap領域を消した上で85%も使用しているのであれば20GBでも足りないでしょうね。
hika-rakuyo

2021/08/19 23:37 編集

つたないコメントにお返事までいただき恐縮です。 sarコマンドについて調べたら確かに「…、ログ残してくれているようなものじゃん」と思いました。 自分がいかに無知たるか思い知った一方で、これは強力な味方になりそうだなと感じているところです。 これからできる範囲で調査をしてみます。 また、df -hの結果は後ほど本文にも追記します。10GB分のボリュームを足した後のusageはSwapなしで51%に下がりました。
yu_1985

2021/08/20 06:16

スワッピングが発生している事自体、物理メモリが不足していることの何よりの証かとは思います。 何か重い処理がある時に一時的にメモリ不足が発生するなどの対処として使うならまだしも恒常的にメモリが足りないならインスタンスタイプ変更が妥当な対応ですね。 それもあるので使用率の傾向を見てください。
hika-rakuyo

2021/08/20 08:42

はい。言及いただいた内容も参考に、swapについてもしばらく勉強させていただきます。 私はこの問題の解消をそこまで急いでいないですし、長期的に傾向を追っていきますので、その点ご理解いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問