AWS EC2 终端会话因“未找到名称为 Standard_Stream 的插件”而终止

Tri*_*ran 8 amazon-ec2 amazon-web-services

我在 AWS EC2 CentOS 7 上流式传输 Kafka。我的会话管理器空闲超时设置为 60 分钟。然而,在运行的时间远低于此值后,终端被冻结,并显示My session has been terminated。当然,Kafka 流也中断了。

当我尝试使用新终端重新启动新会话时,出现此错误弹出窗口

Your session has been terminated for the following reasons: Plugin with name Standard_Stream not found. Step name: Standard_Stream
Run Code Online (Sandbox Code Playgroud)

我仍然无法重新启动终端。

这个错误是什么意思以及如何解决它?谢谢。

小智 9

  • 到目前为止,您需要使用 SSH 和 key-pem 来访问 EC2 进行调试(询问您的管理员)

运行tail -f遇到问题

tail: inotify resources exhausted
tail: inotify cannot be used, reverting to polling
Run Code Online (Sandbox Code Playgroud)
  • 重新启动 ssm-agent 服务也遇到问题No space left on device ,但这与磁盘空间无关

    [root@env-test ec2-user]# systemctl restart amazon-ssm-agent.service 错误:设备上没有剩余空间

    [root@env-test ec2-user]# df -h |grep dev devtmpfs 32G 0 32G 0% /dev tmpfs 32G 0 32G 0% /dev/shm /dev/nvme0n1p1 100G 82G 18G 83% /

  • 因此,错误本身意味着系统的 inotify 监视功能不足,使程序能够监视文件/目录的更改。查看当前设置的限制(包括我的机器上的输出)

    $ cat /proc/sys/fs/inotify/max_user_watches

    8192

检查哪些进程使用 inotify 来改进您的应用程序或增加max_user_watches

for foo in /proc/*/fd/*; do readlink -f $foo; done | grep inotify | sort | uniq -c | sort -nr
5 /proc/1/fd/anon_inode:inotify
2 /proc/7126/fd/anon_inode:inotify
2 /proc/5130/fd/anon_inode:inotify
1 /proc/4497/fd/anon_inode:inotify
1 /proc/4437/fd/anon_inode:inotify
1 /proc/4151/fd/anon_inode:inotify
1 /proc/4147/fd/anon_inode:inotify
1 /proc/4028/fd/anon_inode:inotify
1 /proc/3913/fd/anon_inode:inotify
1 /proc/3841/fd/anon_inode:inotify
1 /proc/31146/fd/anon_inode:inotify
1 /proc/2829/fd/anon_inode:inotify
1 /proc/21259/fd/anon_inode:inotify
1 /proc/1934/fd/anon_inode:notify
Run Code Online (Sandbox Code Playgroud)
  • 请注意,上面的 inotify 列表包括 ssm-agent 进程的 PID,它解释了为什么我们在 max_user_watches达到限制时遇到 SSM 问题

ps-ef | grep ssm-ag

root      3841     1  0 00:02 ?        00:00:05 /usr/bin/amazon-ssm-agent
root      4497  3841  0 00:02 ?        00:00:33 /usr/bin/ssm-agent-worker
Run Code Online (Sandbox Code Playgroud)
  • 最终解决方案:永久解决方案(重新启动后保留)

echo "fs.inotify.max_user_watches=1048576" >> /etc/sysctl.conf sysctl -p

  • 核实:

    $ aws ssm start-session --target i-123abc456efd789xx --region ap-northeast-2

使用 SessionId 启动会话:userdev-03ccb1a04a6345bf5

sh-4.2$

  • 此问题来自 EC2 实例,与 SSM 代理无关 请转到链接到不理解的 SSM 代理。

可选链接


Suj*_*amy 3

SSM 代理可以在两种情况下报告此错误。

\n
    \n
  1. 系统中打开的文件总数已达到系统范围内最大打开文件数的限制。
  2. \n
  3. 系统已达到内核中 inotify 子系统的限制
  4. \n
\n

增加最大打开文件数:

\n
$ sudo sysctl -w fs.file-max=100000\n
Run Code Online (Sandbox Code Playgroud)\n

要将其设置为永久,请将以下行附加到 /etc/sysctl.conf

\n
$ fs.file-max = 100000\n
Run Code Online (Sandbox Code Playgroud)\n

检查 inotify 子系统的限制:

\n
$ sudo cat /proc/sys/fs/inotify/max_user_instances: \n
Run Code Online (Sandbox Code Playgroud)\n
\n

这指定了每个真实用户 ID 可以创建的 inotify 实例数量的上限。默认值为 128

\n
\n
$ sudo cat /proc/sys/fs/inotify/max_user_watches:\n
Run Code Online (Sandbox Code Playgroud)\n
\n

这指定了每个真实用户 ID 可以创建的监视数量的上限。默认值为 8192

\n
\n

要检查每个进程的 inotify 资源消耗,您可以运行以下命令。

\n
$ sudo find /proc/*/fd -lname anon_inode:inotify | cut -d/ -f3 | xargs -I '{}' -- ps --no-headers -o '%p %U %c' -p '{}' | uniq -c | sort -nr\n
Run Code Online (Sandbox Code Playgroud)\n

使用 tail -f 进行测试,看看是否还有空间容纳新的 inotify 观察者。以 root 用户身份运行此命令,并查找任何类似于“tail: inotify 无法使用,恢复到轮询:打开文件太多”的消息

\n
$ sudo su -\n\n$ tail -f /var/log/syslog\n
Run Code Online (Sandbox Code Playgroud)\n

如果出现该错误,则表明系统已达到 inotify 子系统的上述限制之一。增加限制或重新启动以清除。使用 tail -f 再次测试它,看看更改后是否创建了新的观察者。

\n
$ sudo sysctl fs.inotify.max_user_watches=16384\n\n$ sudo sysctl fs.inotify.max_user_instances=256\n
Run Code Online (Sandbox Code Playgroud)\n

使此更改在重新启动后保持不变。

\n
$ echo "fs.inotify.max_user_watches = 16384\xe2\x80\x9d >> /etc/sysctl.d/20-fs-inotify.conf\n\n$ echo "fs.inotify.max_user_instances = 256\xe2\x80\x9d >> /etc/sysctl.d/20-fs-inotify.conf\n
Run Code Online (Sandbox Code Playgroud)\n