问题标签 [kestrel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2519 浏览

c# - GCFrame 中的高线程数导致 CPU 使用率高

我们有一个使用 Kestrel 服务 HTTP 请求的应用程序。过去我们遇到过一些问题,高负载导致线程池产生数千个线程,此时我们会出现锁护航症状。大多数时候,线程会Monitor.Enter()在我们代码中的某个地方开始相互阻塞,导致延迟和更多的争用,直到应用程序由于上下文切换而无法响应,CPU 使用率为 100%。在我们重新启动应用程序之前,问题不会消失。

但是,我们已经消除了大多数锁并实现了限制机制,因此我们不允许超过 1000 个线程进入应用程序。我们使用System.Threading.Semaphore该类只允许一定数量的线程继续。这解决了我们的锁争用问题,但可能引入了一个新问题:

我们仍然得到 100% CPU 使用率和高线程数(500-1000 个线程)的情况,尽管这次线程没有被阻塞在Monitor.Enter(). 相反,当我们执行线程转储(使用Microsoft.Diagnostics.Runtime.ClrRuntime)时,我们会看到以下调用堆栈(用于数百个线​​程):

在这种情况下,问题会导致应用程序变得无响应,但在大多数情况下,它会在几分钟后自行解决。有时需要几个小时。

这样的调用堆栈是什么意思?这是 Kestrel 的已知问题,还是 Kestrel 的某种组合Semaphore导致了这种情况?

更新:内存转储显示HelperMethodFrame调用堆栈中的 可能Monitor.Enter()毕竟是一个调用。但是,我们仍然无法确定这是在我们的代码中还是在 Kestrel 或其他库中。当我们之前遇到锁车队问题时,我们会在调用堆栈中看到我们的代码。现在它似乎是一个Monitor.Enter()内部调用TimerQueueTimer,我们没有在我们的代码中使用它。内存转储如下所示:

.NET 堆栈跟踪:

完整的堆栈跟踪:

更新 2:WinDbgsyncblock命令给了我们这个:

更新 3:更多挖掘表明我们有大约 42000 个 Timer 对象:

检查一些 _methodPtr 引用,它们都指向:

并且 GC Traces 看起来与此类似:

0 投票
2 回答
2760 浏览

linux - Linux 1604:红隼服务找不到 dotnet 安装

我收到以下错误:

运行时:

遵循本指南: https ://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction

运行:nano /usr/bin/dotnet为我获取一个包含内容的大文件,并which dotnet返回 /usr/bin/dotnet,因此该文件确实存在(?)。

为什么我会收到此错误,解决方案是什么?

编辑:我的 /etc/systemd/system/kestrel-hellomvc.service 文件:

0 投票
3 回答
44135 浏览

c# - ASP.NET Core 中 Program.Main 中的访问环境名称

使用 ASP.NET Mvc Core 我需要将我的开发环境设置为使用 https,所以我Main在 Program.cs 中的方法中添加了以下内容:

如何访问此处的托管环境,以便有条件地设置协议/端口号/证书?

理想情况下,我会使用 CLI 来操作我的托管环境,如下所示:

但似乎没有办法从命令行使用证书。

0 投票
1 回答
1085 浏览

nginx - NGINX + Kestrel - 无法在 multipart/formdata 中上传文件

我有一个 .NET Core 应用程序,它有一个用于上传文件的表单。它在 IIS 中运行良好,但是当我在 Ubuntu 上部署到 Nginx(作为反向代理)时,文件上传超时或导致网关错误。我无法看到我可以在哪里进一步调查问题,nginx 访问日志和 Kestrel 的输出不是很有帮助。

这是我的 nginx 配置,我怀疑它没有将数据传递给 Kestrel

令人沮丧的是,尽管给出了 504 并且需要 60 秒才能完成一个小文件的上传操作,但该文件仍然可以到达服务器。

我缺少什么 nginx 配置选项?我怀疑红隼没有向 nginx 提供 http 响应。

0 投票
1 回答
2428 浏览

asp.net-core - Microsoft.AspNetCore.Server.Kestrel:错误:没有为此对象定义无参数构造函数

我正在使用Microsoft.AspNet.SignalRwithMicrosoft.AspNetCore.Server.Kestrel来托管 signalR 集线器。服务器启动成功。但是,如果客户端尝试连接到 SignalR 集线器,我会在服务器上收到以下错误。

在 Configure 方法中,以下代码用于配置 SignalR。

Hub 将服务作为构造函数参数,使用 UnityContainer 注入。

谁能弄清楚这个问题?

0 投票
4 回答
2653 浏览

c# - 我如何知道 Kestrel 何时开始收听?

我需要通知systemd我的服务已成功启动,并且它需要在启动后运行的任务要求服务器已经在侦听目标 Unix 域套接字。

IWebHost::Run用来启动服务器,这是一个阻塞调用。此外,我找不到任何明显的方法来设置成功初始化的委托或回调事件。

任何人?

0 投票
1 回答
120 浏览

asp.net - Kestrel 服务器将 Request.Host 截断为子域

标题说明了一切。我在 azure 中运行 asp 核心应用程序。我注意到 Request.Host 只返回子域部分。

无法判断这是一个天蓝色的实现问题或 Kestrel 或 asp 核心。

例如,在 [mysubdomain].azurewebsites.net 上运行的以下控制器

会回来

{ "Request.Host" : "mysubdomain" }

0 投票
1 回答
241 浏览

asp.net-mvc - 高流量启动

我刚刚将我当前的 MVC 站点转换为 aspnet 核心。我的网站流量很大。但我在部署中面临一个奇怪的问题

我正在使用 VS 2017 发布我的核心 1.1 站点。如果我将所有发布内容复制到站点文件夹并启动站点,则不会提供任何请求,并且我收到“502.3-bad gateway”错误。我检查了 perfmon 并且“活动请求”计数只会增加,在一分钟内达到 3000。但是,如果我删除站点绑定并用一个用户点击 url,然后添加站点绑定,那么站点可以正常工作,没有任何问题

因此,这导致我认为具有高流量的起始站点会导致问题。有什么设置可以避免这种情况吗?这是我的第一个核心项目,所以我不太了解。我读到红隼正在处理来自 IIS 的请求。红隼最初没有响应吗?如果 Kestrel 崩溃,它会自动启动吗?有没有办法看到红隼活动?

我正在使用下面的代码来启动我的网站

0 投票
0 回答
1139 浏览

https - Kestrel HTTPS:处理证书时发生未知错误

有 Kestrel 引发的后台错误,但不会阻止用户在 HTTPS 模式下正确使用 Web 服务器。

即使 Web 服务器上没有任何活动,这些错误大约每 20 分钟发生一次。

此 Web 服务器的依赖项

0 投票
1 回答
626 浏览

asp.net-core - 在 Kestrel 中重写后获取原始 URL

Apache 会根据重写的 URL 选择要提供的文件,但原始 URL 将被传递给脚本。

Kestrel 将重写后的 URL 沿管道传递(可通过 访问HttpContext.Request.Path)。

重写后是否可以从中间件访问原始 URL ?