欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

red5 cpu high red5 消耗 cpu 高 100% 从CPU性能 goole 谷歌 "red5 cpu high" 有大用

我经历大的CPU性能问题与版本1.0.3。

我开发的视频聊天应用。在这个应用我全部流到磁盘。
当应用程序开始运行时,CPU使用率很低,但当我添加客户端,视频传输,CPU使用量的增加,直到几乎100%,客户只有12-15。在这一点上,Red5的控制台开始显示一些数据包不能被处理(“rtmpminaconnection -传入消息处理失败”),我想这是因为队列已满。一旦你达到这一点,服务器无法恢复,这种错误越来越多了。

我试图解决这个通过增加“RTMP的价值。遗嘱执行人。queue_capacity”配置和“fileconsumer价值。队列大小。“我总是得到同样的问题。也许之前的几分钟或几分钟后,但我得到的总是同样的问题。这是我的red5.properties文件:pastebin.com yp8uafhg http:/ /

我测试了它只出版音频流。我试图拯救流盘出版“记录”的旗帜或使用SaveAs方法服务器端。我也试过没有储蓄流到磁盘。我总是同样的问题,加上12-15客户端CPU达到100%的使用和服务器失败。

这是我的应用程序代码:
应用pastebin.com m4xhl6i9 http:/ /
web.xml的:pastebin.com 6k58bpj4 http:/ /
red5-web.xml:pastebin.com mtzpwpng http:/ /

我运行在Windows 8中,服务器8GB内存,英特尔酷睿i5 1.70ghz。

 
@mondain
 
业主

蒙丹评论on 26 Nov 2014

你是我们的一个回调”streambroadcaststart”做了大量的处理,我建议提取上市和迭代代码转换为可执行的任务,让服务器继续快乐的方式。最快的方式,来实现我所说的意思是,这:

final IServiceCapableConnection conn = (IServiceCapableConnection) Red5.getConnectionLocal();
final String incomingStreamName = stream.getPublishedName();
new Thread(new Runnable() {
    public void run() {
        for (String streamName : streamsInRoom) {
            conn.invoke("newStreamInRoom", new Object[] {streamName});
        }
        streamsInRoom.add(incomingStreamName);
    }
}).start();

最后,你的列表应该并行:

CopyOnWriteArrayList<String> streamsInRoom = new CopyOnWriteArrayList<String>();  

修改就像我相信你的CPU的问题就会消失。

 
 
@andreslorek

我不认为里面streambroadcaststart代码要花太多的时间延迟来流的过程。

非常感谢你,我会试试这个建议。

 
@mondain
 
业主

蒙丹评论on 26 Nov 2014

发生这些回调线最终会慢下来或使CPU秒杀任何处理;这是多线程编程的乐趣。:)

来自 https://github.com/Red5/red5-server/issues/27

http://red5.5842.n7.nabble.com/Red5-Crashing-CPU-usage-at-100-memory-at-27-5000-connections-td24358....
普通分类: