环境将会降级,并且无法发送任何消息。
平台是使用 dockerrun.aws.json 的 Docker。容器是 Django 应用程序。我尝试了两种实例类型(我从 EC2 仪表板确认了这一点)t2.micro t2.small
有时,部署后,SQS 守护程序会不断重复初始化,CPU 使用率将达到最大值
2022-03-23T07:47:51Z init: initializing aws-sqsd 3.0.3 (2020-11-04)
2022-03-23T07:47:56Z init: initializing aws-sqsd 3.0.3 (2020-11-04)
2022-03-23T07:48:01Z init: initializing aws-sqsd 3.0.3 (2020-11-04)
2022-03-23T07:48:07Z init: initializing aws-sqsd 3.0.3 (2020-11-04)
2022-03-23T07:48:12Z init: initializing aws-sqsd 3.0.3 (2020-11-04)
2022-03-23T07:48:18Z init: initializing aws-sqsd 3.0.3 (2020-11-04)
2022-03-23T07:48:23Z init: initializing aws-sqsd 3.0.3 (2020-11-04)
2022-03-23T07:48:28Z init: initializing aws-sqsd 3.0.3 (2020-11-04)
2022-03-23T07:48:33Z init: initializing aws-sqsd 3.0.3 (2020-11-04)
要修复它,我需要重新部署应用程序,但这并不总能修复它。我以为是内存问题,但它确实在 t2.micro 中工作过一次。我想做一个内存分析,但看起来工作量太大了。
我试过了:
- 使用先前的平台版本
- 从头开始重建环境
答案1
这是因为 SQS Daemon 找不到 pid 文件。我遇到了同样的问题并已修复。
- 像下面这样编辑 /etc/systemd/system/sqsd.service 文件。
[Unit]
Description=This is sqsd daemon
PartOf=aws-eb.target
[Service]
User=sqsd
Type=forking
ExecStartPre=/bin/sh -c "mkdir -p /var/run/aws-sqsd"
ExecStart=/bin/sh -c "/opt/elasticbeanstalk/lib/ruby/bin/aws-sqsd start"
ExecStartPost=/bin/sh -c "systemctl show -p MainPID sqsd.service | cut -d= -f2 > /var/run/aws-sqsd/default.pid"
ExecStartPost=/bin/sh -c "ln -s /var/run/aws-sqsd/default.pid /var/pids/sqsd.pid"
ExecStopPost=/bin/sh -c "rm -f /var/run/aws-sqsd/default.pid"
ExecStopPost=/bin/sh -c "rm -f /var/pids/sqsd.pid"
Restart=always
EnvironmentFile=/opt/elasticbeanstalk/config/private/ruby_common_env
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=sqsd
[Install]
WantedBy=multi-user.target
- 重新加载 SQS 守护进程:systemctl daemon-reload
- 重新启动 SQS 守护进程:systemctl restart sqsd