Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

多摄像头同时推流,cpu占用接近100,导致卡死 #8

Open
zhongren opened this issue Jun 20, 2019 · 7 comments
Open

多摄像头同时推流,cpu占用接近100,导致卡死 #8

zhongren opened this issue Jun 20, 2019 · 7 comments

Comments

@zhongren
Copy link

目前单个摄像头单通道可以稳定直播,cpu占用也还行,
目前我的服务器是16核的,同时15个通道一起推流,用top看 cpu占用到了90%,然后各种卡顿了,请问有什么解决方案吗?是需要FFmpeg调用gpu去推流还是什么?

@glaciall
Copy link
Owner

你CPU占用很高的时候,你有没有看是谁占用的CPU高?ffmpeg还是java进程?应该不会是java进程,java这里的实现全是异步IO,这个问题你先确定一下。

另外,我刚刚试了一下,在我们的服务器上,阿里云8核16G的配置,同时16路的系统负载表现,FFMPEG进程CPU最高0.7%,内存占用最高0.1%,java进程CPU占用9%,内存占用1.4%,系统总负载:0.35、0.26、0.16,毫无压力(注意,我们服务器上的是非阻塞IO版本,不是异步IO版的)。

所以可能是你系统的什么配置导致了处理性能的低下。。。。

@glaciall
Copy link
Owner

对了,你说你的CPU达到了90%,而不是说1500%,我估计着,你现在应该是使用的WSL进行的推流,WSL在IO上性能较原生的差了上百倍,你还是换成物理机或是虚拟机来进行并发推流的性能测试,WSL只应用于测试调试阶段,不应该用于生产环境。。。。

@zhongren
Copy link
Author

谢谢回复,cpu占用的问题顺利解决了 现在还有一个问题 就是purge这个方法里面
Process.destroy()之后 boolean exited = process.waitFor(30, TimeUnit.SECONDS);
好像process关闭不了,jdk用的是1.8的 .我kill-9 项目之后,
image
推流的进程好像还在

@glaciall
Copy link
Owner

直接强杀主进程,子进程会成为僵尸进程的,top的时候看一眼,有几个zombie呢,VideoServerApp的第34行,注册了kill信号处理器,你杀进程的时候,别使用kill -9 {PID},应该直接kill {PID}或是kill -TERM {PID},这将让应用程序比较和谐的退出,但是我在VideoServerApp的shutdown方法里,没有加上PublisherManager的进程清理工作,你可以先看一眼。

另外,你是怎么解决CPU占用的问题的????

@glaciall
Copy link
Owner

@zhongren 我刚刚提交了一些代码,用于和谐退出时,清理ffmpeg子进程的,你可以瞅一下。

@zhongren
Copy link
Author

cpu的占用是我这边整合进公司框架的时候出了问题, T-T,我们这边自己的问题

@glaciall
Copy link
Owner

呃。。。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants