我们在AWS ECS上的Linux Docker中运行的API情况很糟糕.API现在与ASP.NET Core 2.1一起运行,但我们也遇到了ASP.NET 2.0的问题(我们希望升级到2.1会修复它,但它没有).
问题:容器经常被退出代码139杀死.从我迄今为止在研究中收集到的内容来看,这意味着SIGSEGV故障或分段错误.通常在应用程序尝试访问其无权访问的内存部分时抛出.
我不希望托管代码发生这样的事情,但它可能是框架中的库或更低级别的函数触发它.
我们配置了用于在API中记录未处理的异常的中间件,但是当发生这种情况时我们不会获得任何日志.这意味着我们没有太多可以继续解决这个问题.
我知道这里没有太多东西可以继续,所以我基本上都在寻找方法来了解问题所在.
也许如果我崩溃时可以进行内存转储? - 或以某种方式从Docker或ECS获取更多详细信息?
任何建议都非常苛刻!
UPDATE
其中一位现场可靠性工程师能够对此进行更多分析.他发现了两种杀死容器的段错误:
ip-10-50-128-175内核:[336491.431816]陷阱:dotnet [14200]一般保护ip:7f7e14fc2529 sp:7f7b41ff8080错误:0在libc-2.24.so [7f7e14f8e000 + 195000]
ip-10-50-128-219内核:[481011.825532] dotnet [31035]:段错误在0 ip(null)sp 00007f50897f7658错误14在dotnet [400000 + 18000]
我不知道这意味着什么,但我想我会把它放在这里,万一有人得到一个暗示
更新2
因此,我们还无法确定问题的根本原因,但我们通过阻止其中一个内部服务调用大量端点之一来缓解崩溃的API.我们基本上复制了内部服务中的逻辑,以测试崩溃是否停止,并且它们确实停止了.这不是一个非常令人满意的解决方案,它不会真正帮助其他人遇到这个问题,但至少我们的API在整个黑色星期五和网络星期一都是稳定的:)
我在appharbor上部署的MVC 3项目中使用Ninject.我注意到我在启动应用程序时遇到异常,看起来Ninject内部的东西是原因,但我找不到任何答案 - 所以请帮助我:)
将尝试在此处添加完整的例外:
Server Error in '/' Application.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information …Run Code Online (Sandbox Code Playgroud) 我使用社区图表kube-prometheus-stack使用 Helm 在 Kubernetes 集群上安装了 Prometheus,并且在捆绑的 Grafana 实例中获得了一些漂亮的仪表板。我现在希望 Vertical Pod Autoscaler 的推荐器使用 Prometheus 作为历史指标的数据源,如此处所述。这意味着,我必须对 cAdvisor 的 Prometheus scraper 设置进行更改,这个答案为我指明了正确的方向,因为在进行更改后,我现在可以job在 cAdvisor 的指标上看到正确的标签。
不幸的是,现在 Grafana 仪表板中的一些图表已损坏。它看起来不再获取 CPU 指标 - 而是仅显示与 CPU 相关的图表的“无数据”。
因此,我认为我必须调整图表才能再次正确获取指标,但我在 Grafana 中没有看到任何明显的地方可以做到这一点?
不确定它是否与问题相关,但我正在 Azure Kubernetes 服务 (AKS) 上运行我的 Kubernetes 集群。
values.yaml这是我在安装 Prometheus 时向 Helm 图表提供的完整内容:
kubeControllerManager:
enabled: false
kubeScheduler:
enabled: false
kubeEtcd:
enabled: false
kubeProxy:
enabled: false
kubelet:
serviceMonitor:
# Diables the normal cAdvisor scraping, as we add it with the …Run Code Online (Sandbox Code Playgroud) c# ×2
amazon-ecs ×1
appharbor ×1
asp.net-core ×1
azure-aks ×1
docker ×1
grafana ×1
kubernetes ×1
ninject ×1
prometheus ×1