我在 Elastic Beanstalk 中的 Linux/Nginx 上运行了一个 asp.net core 应用程序。昨天它突然停止正常工作,问题是其中一个主 javascript 文件不再提供,而是 Chrome 报告了 ERR_HTTP2_PROTOCOL_ERROR。虽然直接导航到文件确实可以正常工作,但在加载应用程序本身时,对文件的请求总是会失败并出现此错误。
我尝试了不同的浏览器(Chrome、Edge、Vivaldi)、不同的设备(PC、手机)和不同的网络连接(LAN/WIFI/移动数据),但结果在任何地方都一样。
谷歌搜索该问题后,我发现该错误可能由多种不同原因引起。经过进一步挖掘和检查 Chrome 中的网络日志后,实际错误表明问题可能出在服务器 - 它在发送所有文件之前终止了连接(与 HTTP/2 有关)。谷歌搜索后,所有信息都表明这是由于服务器(Linux/Nginx)磁盘空间不足造成的,当磁盘空间不足或完全耗尽时,Nginx 有时会这样做。
我从未收到任何有关实例磁盘空间不足的通知,也没有在任何地方看到过这种情况。经过进一步挖掘,我发现了另外两个问题,这让我相信该问题确实与磁盘空间有关。
当我尝试在 AWS 控制台中从实例请求日志时,会生成日志文件,但其大小始终为 0 字节。当我尝试将应用程序的新版本部署到实例时(使用 Visual Studio 中的 AWS 工具包),一切似乎都成功了,没有任何地方报告错误,但更改并未反映在实例上,它似乎仍在运行旧版本。当我尝试检索日志以查看某处是否有错误时……但我只得到了空的日志文件。
直到我决定对实例应用推荐的更新(Linux 2.3.5 而不是 2.3.4)这可能会完全重置环境 - 一切似乎都恢复正常,我的应用程序又正常运行。
什么鬼啊。有什么想法吗?有人遇到过类似的问题吗?我一直在考虑迁移到 Azure,这次事件让我更想继续这样做。
答案1
只是更新。这种情况再次发生。这次花了更多时间进行挖掘。设法通过 SSH 连接到我的实例以进一步检查。结果发现一些日志占用了所有磁盘空间。我修改了我的实例并增加了根卷大小,由于我现在已经启动并运行了 SSH 访问权限,因此我将来可以更轻松地监控磁盘空间并防止这种情况发生。
我觉得有点奇怪,你必须通过 SSH 进入实例才能执行诸如检查可用磁盘空间之类的普通任务。你可以在 AWS 控制台中看到有关 ELB 卷的各种信息,但看不到磁盘空间利用率。此外,当你修改卷并增加其大小时,你仍然必须通过 SSH 进入并运行几个 Linux 命令才能真正使用增加的卷大小。当你执行比真正基本的东西更高级的任务时,事情会迅速变得更加复杂,这让我有点惊讶。