3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CodeDeployエージェントのメモリ問題

Last updated at Posted at 2021-06-21

事象

codepipelineから「変更をリリース」したところ、CodeDeployでコケた。

エラー

2021-06-16 09:47:03 ERROR [codedeploy-agent(2559)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Error during perform: Errno::ENOMEM - Cannot allocate memory - rm -rf /opt/codedeploy-agent/deployment-root/b59fab18-5d0f-41bf-92e8-60410f9c6597/d-HCQHTD03B 2>&1 - /opt/codedeploy-agent/lib/instance_agent/platform/linux_util.rb:95:in

メモリを割り当てられないらしい。

原因

デプロイ先のEC2インスタンスのメモリが80%を超えていた。

プロセスのメモリ使用率の割合を調べてみると、CodeDeployエージェントが異常にメモリ使っていた。53.8%

ps aux --sort -rss
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2559  0.0 53.8 1508016 1098544 ?     Sl    5月13  23:05 codedeploy-agent: InstanceAgent::Plugins::CodeDepl

対応

CodeDeployエージェント再起動をすることでメモリ使用率が53.8%から2.7%になった。

今後の対応

CodeDeployエージェント再起動後にCodeDeploy実行を複数回行い、プロセスのメモリ使用率の上り具合を確認する。
codedeployエージェントメモリ使用率: 2.7 → 13.6 → 22.1 → 22.2 → 23.0 → 23.5 → 25.2 ...

結果
CodeDeploy実行する度にプロセスのメモリ使用率が大きく上がっていくことがわかった。
現状、定期的にCodeDeployエージェントの再起動を行わなければ、今回のようにメモリを割り当てられなくなり、CodeDeploy実行時にエラーになる。

こちらの参考サイトを元に以下対応
https://github.com/aws/aws-codedeploy-agent/issues/32

対応1

参考サイトによると、デプロイメントバンドルの解凍に使用されているサードパーティのメモリ内ライブラリが原因。unzipがインストールされていればメモリ使用量を小さくすることが出来るらしい。

しかし当サーバーではunzipはインストール済みだった。
確認コマンドyum info unzip

対応2

参考サイトによると、根本解決ではないが以下で回避はできる。

appspec.ymlファイルのValidateServiceフックから実行されるスクリプトにCodeDeployエージェントの再起動をスケジュールする行を追加

at -M now + 2 minute <<< $'service codedeploy-agent restart'

処理内容:CodeDeploy実行の2分後にCodeDeployエージェントの再起動を行う。
(atコマンドのオプション-Mに関して探しても出てこなかったのでつけないで設定)

AppSpecのフックセクション

appspec.yml (編集)

version: 0.0
os: linux

files:
  - source: src
    destination: /var/www/html/

permissions:
  - object: /var/www/html
    owner: apache
    group: apache

hooks:
  ValidateService: // 追加
    - location: deploy/codedeploy-restart.sh // 追加
runas: root

deploy/codedeploy-restart.sh (新規作成)

at now + 2 minute <<< $'service codedeploy-agent restart'

動作確認

CodeDeployログでシェルが実行されていることを確認

less /opt/codedeploy-agent/deployment-root/deployment-logs
[2021-06-16 14:49:04.709] [d-N7S12UG4B]Script - deploy/codedeploy-restart.sh

複数回デプロイを実行してCodeDeployエージェントのメモリ使用率が上がらないことを確認

ps aux --sort -rss
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     16779  0.2  2.7 331548 55792 ?        SNl  14:52   0:00 codedeploy-agent: InstanceAgent::Plugins::CodeDeploy
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?