当我使用会话管理器连接到 Amazon EC2 实例时,为什么会收到 "Plugin with name Standard_Stream not found" 错误?
我尝试使用会话管理器(AWS Systems Manager 的一项功能)连接到我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例。但是,我收到了 "Plugin with name Standard_Stream not found" 错误消息。
简短描述
如果 AWS Systems Manager Agent (SSM Agent) 无法创建建立会话所需的文件,您会收到以下错误消息:
"Your session has been terminated for the following reasons: Plugin with name Standard_Stream not found.Step name: Standard_Stream"
如果您的实例上的存储空间不足,或者您同时打开的文件过多,则通常会出现此问题。
要确定出现问题的原因,请检查您的系统日志以查找特定的错误消息。然后,根据您查找到的错误,执行以下故障排除操作。
解决方法
对 "No space left on device" 错误进行故障排除
根分区上必须具有足够的空间,以供 SSM Agent 创建启动会话所需的临时数据。如果您收到 "No space left on device" 错误消息,则必须增加根文件系统上的可用空间。首先,从根分区中移除未使用的文件。如果空间仍然不足,则可以使用弹性卷来增加 Amazon Elastic Block Store (Amazon EBS) 卷的大小。或者,使用以下方法之一在操作系统 (OS) 级别扩展根文件系统。
使用 SSH 或 EC2 Serial Console 扩展根文件系统
完成以下步骤:
-
使用 SSH 或 EC2 Serial Console 连接到您的实例。
**注意:**要使用 EC2 Serial Console,必须配置对 EC2 Serial Console 的访问权限。有关要求的更多信息,请参阅 EC2 Serial Console 的先决条件。 -
要检查根分区上的可用空间,请运行以下命令:
df -Th输出示例:
$ df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs tmpfs 1.6G 440K 1.6G 1% /run /dev/nvme0n1p1 xfs 8.0G 2.0G 6.0G 25% / tmpfs tmpfs 3.9G 0 3.9G 0% /tmp /dev/nvme0n1p128 vfat 10M 1.3M 8.7M 13% /boot/efi tmpfs tmpfs 782M 0 782M 0% /run/user/1000 -
要查看块设备和根分区的名称和文件系统类型等详细信息,请运行以下 lsblk 命令:
lsblk -f输出示例:
$ lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT nvme0n1 ├─nvme0n1p1 xfs / abcd123-abcd-1234-abcd-abcdef1234 / └─nvme0n1p128 -
要扩展分区,请运行以下命令:
sudo growpart /dev/nvme0n1 1**注意:**请将 nvme0n1 替换为分区名称。
-
要验证是否已扩展分区,请重新运行 lsblk 命令。在输出中,确保分区大小与卷大小相同。
-
要扩展文件系统,请根据您的文件系统类型运行以下命令之一。
ext4 卷:sudo resize2fs /dev/nvme0n1p1**注意:**请将 nvme0n1p1 替换为分区名称。
XFS 卷:sudo xfs_growfs -d /
使用救援实例扩展根文件系统
如果您无法使用 SSH 连接到无法访问的实例,则在与无法访问的实例相同的可用区中创建一个救援实例。有关说明,请参阅**如何对因资源过度使用而未通过状态检查的 EC2 Linux 实例进行故障排除?**上的对 "No space left on device" 错误进行故障排除将根卷挂载到救援实例后,扩展文件系统。
对 "Too many open files" 错误进行故障排除
如果超出 inotify 资源的最大限制,则 SSM Agent 无法创建建立会话所需的新文件描述符。如果同时打开的文件或文件描述符过多,或者内核的 inotify 子系统超出其最大实例或监视配额,则会出现此问题。有关更多信息,请参阅 man7 网站上的 inotify。
要对此问题进行故障排除,请执行以下操作。
重启或重新启动您的实例
要重启所有进程并释放正在使用的 inotify 资源,请重启或停止并启动实例。
**注意:**当停止或启动某个实例时,该实例的公有 IP 地址将发生变化。最佳做法是使用弹性 IP 地址(而不是公有 IP 地址)将外部流量路由到您的实例。如果您使用的是 Amazon Route 53,则在公有 IP 地址发生变化时可能需要更新 Route 53 DNS 记录。
在停止并启动实例之前,请执行以下操作:
- 如果您的实例使用实例存储,则将实例存储上的卷数据保存到永久存储。例如,您可以将数据保存到 Amazon EBS 卷或 Amazon Simple Storage Service (Amazon S3) 存储桶。
**重要事项:**当您停止实例时,Amazon EC2 会删除实例存储数据。 - 创建 Amazon EBS 卷的快照。如果您遇到问题,则可以使用该快照来还原您的实例。
- 暂时将实例从其 Amazon EC2 Auto Scaling 组中移除,以免在停止实例时意外终止该实例。
**注意:**EC2 Auto Scaling 可能会根据您的缩减保护设置终止自动扩缩组中已停止的实例。使用 Amazon EMR、AWS CloudFormation 或 AWS Elastic Beanstalk 启动的实例可能位于自动扩缩组中。 - 将实例关闭行为设置为 Stop(停止),确保实例在您停止时不会终止。
增加您的 inotify 配额
如果在重启或重新启动后仍然遇到问题,请完成以下步骤以增加实例上的 inotify 配额:
- 运行以下命令检查 inotify 配额:
**注意:**默认情况下,max_user_watches 为 8192,max_user_instances 为 128。cat /proc/sys/fs/inotify/max_user_watches cat /proc/sys/fs/inotify/max_user_instances - 要临时增加最大配额值,请运行以下命令:
**注意:**请将 newwatchesquota 替换为 max_user_watches 的新配额,并将 newinstancesquota 替换为 max_user_instances 的新配额。上述命令会更新配额,在下次重启实例之前有效。最佳做法是先通过临时更改来测试更新后的值。sudo sysctl fs.inotify.max_user_watches=newwatchesquota sudo sysctl fs.inotify.max_user_instances=newinstancesquota - 要使配额更新永久生效,请将以下参数添加到 /etc/sysctl.conf 文件中:
**注意:**请将 newwatchesquota 替换为 max_user_watches 的新配额,并将 newinstancesquota 替换为 max_user_instances 的新配额。echo "fs.inotify.max_user_watches = newwatchesquota" >> /etc/sysctl.d/20-fs-inotify.conf echo "fs.inotify.max_user_instances = newinstancesquota" >> /etc/sysctl.d/20-fs-inotify.conf - 重启实例以应用更改。
**注意:**最佳做法是在修改实例后监控系统性能,验证更新后的配额是否符合您的系统要求。
相关信息
相关内容
AWS 官方已更新 5 个月前