繁体   English   中英

Owin.Websocket超过消息大小会导致CPU使用率过高

[英]Owin.Websocket exceeding message size causes high CPU usage

我正在使用Owin.WebSocket库来接收Asp.Net WebAPI应用程序的图像流。 我使用Owin.Websocket.WebSocketConnection创建了一个websocket来接收来自我的前端的消息。

 public class MyWebScoket : WebSocketConnection
 {
    protected MyWebScoket(int maxMessageSize = 65536) : base(maxMessageSize)
    {
       //logic
    }

    public override void OnClose(WebSocketCloseStatus? closeStatus, string closeStatusDescription)
    {
        //logic
    }

    public override Task OnMessageReceived(ArraySegment<byte> message, WebSocketMessageType type)
    {
        //logic
    }

    public override void OnOpen()
    {
        //logic
    }

    public override void OnReceiveError(Exception error)
    {
        //logic
    }
}

当消息大小低于设置的消息大小时,API的CPU使用率是正常的,并且一切都正常运行,但是当消息大小超过限制时,API的CPU使用率急剧增加,导致我的机器甚至停止响应鼠标点击。

这看起来很奇怪,因为消息发送速率总是相同的。

这种行为的原因是什么?

我在所有重写的方法中添加了断点,但没有达到它们,我想如果超出了消息限制大小,执行应该转到OnReceiveError。

欢迎任何变通方法/想法或替代方案。

在测试时我一直在努力解决这个问题,因为我不专业。 似乎,如果你没有超过消息大小,owin web套接字将不会大量使用CPU使用率,而是依赖于RAM内存,这样,当不超过 - cpu使用率为2-4%时最高,10%,我的公羊在5-8%之间,并且上升到13-14%。

但是,如果超出大小,owin Web套接字会产生意外行为,导致Web套接字使用空闲CPU。

我在我的个人电脑上尝试过它 - i7 -7700k 4个8线程,每个线程100%使用,我的记忆保持在2-3%左右,每两分钟左右跳跃到10-14%。

我不知道这种行为的原因,只知道你现在不应该超过消息大小,因为它会导致一个非常不可能的行为,我也试图看看是否有人发布了关于它的官方问题。

我可以(逻辑上)看到这种行为的一个原因是,当消息超出大小时,owin机制“担心”RAM内存不足以运行操作并且压碎因此它依靠cpu来处理虽然这只是我的假设。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM