[Red5] About the Fix of FLV and FLVReader in regards with OutOfMemoryError when playing large FLVs
Daniel Daley
dan at chameleoncode.jp
Tue Nov 21 13:23:33 EST 2006
I spoke too soon. Once the connections starting picking up today we
went back to the previous errors. This one was at 100 connected viewers:
2006-11-21 13:17:59.572534500 [ERROR] 194490 pool-1-thread-4:
( org.red5.io.flv.impl.FLVReader.error ) FLVReader :: FLVReader ::
>
2006-11-21 13:17:59.572539500
2006-11-21 13:17:59.572541500 java.io.IOException: Cannot allocate
memory
2006-11-21 13:17:59.572543500 at sun.nio.ch.FileChannelImpl.map0
(Native Method)
2006-11-21 13:17:59.572545500 at sun.nio.ch.FileChannelImpl.map
(FileChannelImpl.java:742)
2006-11-21 13:17:59.572548500 at
org.red5.io.flv.impl.FLVReader.<init>(FLVReader.java:106)
2006-11-21 13:17:59.572550500 at org.red5.io.flv.impl.FLV.getReader
(FLV.java:172)
2006-11-21 13:17:59.572733500 at
org.red5.server.stream.provider.FileProvider.init(FileProvider.java:179)
2006-11-21 13:17:59.572737500 at
org.red5.server.stream.provider.FileProvider.pullMessage
(FileProvider.java:87)
2006-11-21 13:17:59.572739500 at
org.red5.server.messaging.InMemoryPullPullPipe.pullMessage
(InMemoryPullPullPipe.java:72)
2006-11-21 13:17:59.572742500 at
org.red5.server.stream.PlaylistSubscriberStream$PlayEngine.pullAndPush
(PlaylistSubscriberStr
eam.java:869)
2006-11-21 13:17:59.572789500 at
org.red5.server.stream.PlaylistSubscriberStream$PlayEngine.play
(PlaylistSubscriberStream.jav
a:703)
2006-11-21 13:17:59.572792500 at
org.red5.server.stream.PlaylistSubscriberStream.play
(PlaylistSubscriberStream.java:127)
2006-11-21 13:17:59.572795500 at
org.red5.server.stream.StreamService.play(StreamService.java:175)
2006-11-21 13:17:59.572797500 at
org.red5.server.stream.StreamService.play(StreamService.java:183)
2006-11-21 13:17:59.572821500 at
sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
2006-11-21 13:17:59.572823500 at
sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
2006-11-21 13:17:59.572826500 at java.lang.reflect.Method.invoke
(Method.java:585)
2006-11-21 13:17:59.572828500 at
org.red5.server.service.ServiceInvoker.invoke(ServiceInvoker.java:161)
2006-11-21 13:17:59.572830500 at
org.red5.server.net.rtmp.RTMPHandler.invokeCall(RTMPHandler.java:287)
2006-11-21 13:17:59.572840500 at
org.red5.server.net.rtmp.RTMPHandler.onInvoke(RTMPHandler.java:469)
2006-11-21 13:17:59.572842500 at
org.red5.server.net.rtmp.RTMPHandler.messageReceived(RTMPHandler.java:
147)
2006-11-21 13:17:59.572844500 at
org.red5.server.net.rtmp.RTMPMinaIoHandler.messageReceived
(RTMPMinaIoHandler.java:78)
2006-11-21 13:17:59.572847500 at
org.apache.mina.common.support.AbstractIoFilterChain$2.messageReceived
(AbstractIoFilterChain
.java:189)
2006-11-21 13:17:59.572856500 at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageRece
ived(AbstractIoFilte
rChain.java:502)
2006-11-21 13:17:59.572858500 at
org.apache.mina.common.support.AbstractIoFilterChain.access$1000
(AbstractIoFilterChain.java:
52)
2006-11-21 13:17:59.572861500 at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl
$1.messageReceived(AbstractIoF
ilterChain.java:777)
2006-11-21 13:17:59.572876500 at
org.red5.io.filter.ExecutorFilter.processEvent(ExecutorFilter.java:231)
2006-11-21 13:17:59.572879500 at org.red5.io.filter.ExecutorFilter
$ProcessEventsRunnable.run(ExecutorFilter.java:279)
2006-11-21 13:17:59.572882500 at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask
(ThreadPoolExecutor.java:650)
2006-11-21 13:17:59.572885500 at
java.util.concurrent.ThreadPoolExecutor$Worker.run
(ThreadPoolExecutor.java:675)
2006-11-21 13:17:59.572952500 at java.lang.Thread.run(Thread.java:595)
On Nov 20, 2006, at 5:58 PM, Steven Gong wrote:
>
>
> On 11/21/06, Daniel Daley <dan at chameleoncode.jp> wrote:
> Looks like it actually just crashes when it reaches whatever amount
> of ram the process is limited to. Being 32 bit if I leave all limits
> off once red5 allocates 2 gigs it crashes. Oddly though since this
> patch the ram just seems to grow endlessly until it dies rather than
> fluctuating like it did before. Could there be something that is not
> releasing memory after each connection?
>
> It's quite strange that your result is different from that of Bill's.
>
> Could you please try to disable the buffer by setting the type as
> "none"? And use NoCacheImpl please.
>
> Thanks,
>
> --Dan--
>
>
> On Nov 20, 2006, at 3:01 PM, Daniel Daley wrote:
>
> > Looks like mine is crashing much more frequently now with this patch
> > but with the same errors each time. What's odd is the server does
> not
> > in the least seem to be out of memory when it happens. Here's the
> > output in my log:
> >
> > 2006-11-20 16:58:39.560730500 [ERROR] 437909 pool-1-thread-4:
> > ( org.red5.io.flv.impl.FLVReader.error ) FLVReader :: FLVReader ::>
> > 2006-11-20 16:58:39.560735500
> > 2006-11-20 16:58:39.560737500 java.io.IOException: Cannot allocate
> > memory
> > 2006-11-20 16:58:39.560739500 at sun.nio.ch.FileChannelImpl.map0
> > (Native Method)
> > 2006-11-20 16:58:39.560741500 at sun.nio.ch.FileChannelImpl.map
> > (FileChannelImpl.java:742)
> > 2006-11-20 16:58:39.560744500 at
> > org.red5.io.flv.impl.FLVReader.<init>(FLVReader.java:106)
> > 2006-11-20 16:58:39.560746500 at
> org.red5.io.flv.impl.FLV.getReader
> > (FLV.java:172)
> > 2006-11-20 16:58:39.560917500 at
> > org.red5.server.stream.provider.FileProvider.init(FileProvider.java:
> > 179)
> > 2006-11-20 16:58: 39.560920500 at
> > org.red5.server.stream.provider.FileProvider.pullMessage
> > (FileProvider.java:87)
> > 2006-11-20 16:58:39.560922500 at
> > org.red5.server.messaging.InMemoryPullPullPipe.pullMessage
> > (InMemoryPullPullPipe.java:72)
> > 2006-11-20 16:58:39.560925500 at
> > org.red5.server.stream.PlaylistSubscriberStream
> $PlayEngine.pullAndPush
> > (PlaylistSubscriberStream.java:869)
> > 2006-11-20 16:58: 39.560937500 at
> > org.red5.server.stream.PlaylistSubscriberStream$PlayEngine.play
> > (PlaylistSubscriberStream.java:703)
> > 2006-11-20 16:58:39.560940500 at
> > org.red5.server.stream.PlaylistSubscriberStream.play
> > (PlaylistSubscriberStream.java:127)
> > 2006-11-20 16:58:39.560943500 at
> > org.red5.server.stream.StreamService.play(StreamService.java:175)
> > 2006-11-20 16:58:39.560945500 at
> > org.red5.server.stream.StreamService.play (StreamService.java:183)
> > 2006-11-20 16:58:39.560960500 at
> > sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
> > 2006-11-20 16:58:39.560962500 at
> > sun.reflect.DelegatingMethodAccessorImpl.invoke
> > (DelegatingMethodAccessorImpl.java:25)
> > 2006-11-20 16:58:39.560965500 at java.lang.reflect.Method.invoke
> > (Method.java:585)
> > 2006-11-20 16:58:39.560967500 at
> > org.red5.server.service.ServiceInvoker.invoke
> (ServiceInvoker.java:161)
> > 2006-11-20 16:58:39.560969500 at
> > org.red5.server.net.rtmp.RTMPHandler.invokeCall(RTMPHandler.java:
> 287)
> > 2006-11-20 16:58:39.560978500 at
> > org.red5.server.net.rtmp.RTMPHandler.onInvoke (RTMPHandler.java:469)
> > 2006-11-20 16:58:39.560980500 at
> > org.red5.server.net.rtmp.RTMPHandler.messageReceived
> (RTMPHandler.java:
> > 147)
> > 2006-11-20 16:58:39.560982500 at
> > org.red5.server.net.rtmp.RTMPMinaIoHandler.messageReceived
> > (RTMPMinaIoHandler.java:78)
> > 2006-11-20 16:58:39.560985500 at
> > org.apache.mina.common.support.AbstractIoFilterChain
> $2.messageReceived
> > (AbstractIoFilterChain.java:189)
> > 2006-11-20 16:58: 39.560993500 at
> >
> org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageRe
> > ce
> > ived(AbstractIoFilterChain.java:502)
> > 2006-11-20 16:58:39.560996500 at
> > org.apache.mina.common.support.AbstractIoFilterChain.access$1000
> > (AbstractIoFilterChain.java:52)
> > 2006-11-20 16:58:39.560998500 at
> > org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl
> > $1.messageReceived(AbstractIoFilterChain.java:777)
> > 2006-11-20 16:58: 39.561012500 at
> > org.red5.io.filter.ExecutorFilter.processEvent(ExecutorFilter.java:
> > 231)
> > 2006-11-20 16:58:39.561015500 at org.red5.io.filter.ExecutorFilter
> > $ProcessEventsRunnable.run(ExecutorFilter.java :279)
> > 2006-11-20 16:58:39.561017500 at
> > java.util.concurrent.ThreadPoolExecutor$Worker.runTask
> > (ThreadPoolExecutor.java:650)
> > 2006-11-20 16:58:39.561019500 at
> > java.util.concurrent.ThreadPoolExecutor$Worker.run
> > (ThreadPoolExecutor.java:675)
> > 2006-11-20 16:58:39.561028500 at java.lang.Thread.run(Thread.java:
> > 595)
> >
> >
> > On Nov 18, 2006, at 2:48 AM, Steven Gong wrote:
> >
> >> Hi Paul,
> >> I have just committed some codes to fix the OutOfMemoryError. The
> >> related revision numbers are 1555, 1556 and 1557.
> >>
> >> The OutOfMemoryError is mainly due to the buffer in FLVReader so I
> >> added a new static oroperty 'maxBufferSize' to constrain the buffer
> >> size and also added a way to disable the buffer if none of 'auto',
> >> 'direct' and 'heap' buffer type is configured. The property can
> >> also be configured in red5-common.xml.
> >>
> >> Another improvement is to let ICacheStore create ICacheable
> >> instances so that in the case of NoCacheImpl, no instances will be
> >> created thus we won't create byte array in this case.
> >>
> >> Could you please have a review? Thanks. :-)
> >>
> >> As the OutOfMemoryError bug gives rise to many complaints of our
> >> users, I also cc this mail to red5 list for notification purpose.
> >>
> >> --
> >> I cannot tell why this heart languishes in silence. It is for small
> >> needs it never asks, or knows or remembers. -- Tagore
> >>
> >> Best Regards
> >> Steven Gong
> >> _______________________________________________
> >> Red5 mailing list
> >> Red5 at osflash.org
> >> http://osflash.org/mailman/listinfo/red5_osflash.org
> >
> >
> > _______________________________________________
> > Red5 mailing list
> > Red5 at osflash.org
> > http://osflash.org/mailman/listinfo/red5_osflash.org
>
>
> _______________________________________________
> Red5 mailing list
> Red5 at osflash.org
> http://osflash.org/mailman/listinfo/red5_osflash.org
>
>
>
> --
> I cannot tell why this heart languishes in silence. It is for small
> needs it never asks, or knows or remembers. -- Tagore
>
> Best Regards
> Steven Gong
> _______________________________________________
> Red5 mailing list
> Red5 at osflash.org
> http://osflash.org/mailman/listinfo/red5_osflash.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://osflash.org/pipermail/red5_osflash.org/attachments/20061121/8305b069/attachment.htm
More information about the Red5
mailing list