[Red5] About the Fix of FLV and FLVReader in regards with OutOfMemoryError when playing large FLVs
Daniel Daley
dan at chameleoncode.jp
Mon Nov 20 19:34:20 EST 2006
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?
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
More information about the Red5
mailing list