Doesn't Instrument help you find what object cause the allocating issue?

Az iPhone készülékemről küldve

2011.07.20. dátummal, 14:03 időpontban Adrian Ward 
<[email protected]> írta:

> 
> Hey vade
> 
> Thanks for the thoughts - most appreciated.
> 
> No image ports to/from the actual QTZ, just lots of images coming from custom 
> plugins, and going through JavaScript patches before being spat out in other 
> structures for rendering. The biggest potential culprit is a Data Loader 
> plugin that scans a folder hierarchically and returns a massive NSDictionary 
> filled with strings, images and structures of strings and images (etc). I'm 
> fairly certain there's no leaks in that plugin (having watched Object 
> Allocations carefully) but I'm convinced there's a leak somewhere internal to 
> QC, or OpenGL, or the NVIDIA/ATI drivers as a result of what it's doing. 
> Maybe 30% of the time I have crashes, I've also seen lots of malloc error 12s 
> in the log, so I know I'm pushing capacity (yes, the app is 32 bit).
> 
> With NSZombies, the problem happens much quicker but it's still the same. 
> Very often the last thing the app spits out before SIGBUS'ing is "Could not 
> allocate register file: 12", which I'm finding it hard to know what this 
> means, other than it's another malloc error 12 (out of memory).
> 
> Another potential culprit is a different plugin (StyledTextPlugin, one that 
> you've helped me with before) that uses WebKit to render a HTML string. It 
> uses an NSAttributedString which is created from a chunk of HTML using 
> WebKit, but this has to be done on a separate thread to avoid corrupting QC's 
> rendering pipeline. Because WebKit doesn't seem to be thread-safe, on some 
> crashes the backtrace is convoluted to say the least - and I'm not convinced 
> this isn't causing the problem either.
> 
> Oh, I've also seen QC crash in the same way - so it's nothing to do with my 
> app specifically.
> 
> Currently my not-so-ideal solution is to allow the app to crash quietly and 
> focus on relaunching it as quickly and seamlessly as possible - not ideal.
> 
> Is it worth me sharing an Instruments trace, or is that mostly a useless 
> gesture?
> 
> Thanks and all the best
> 
> 
> Ade.
> 
> 
> 
> On 18 Jul 2011, at 18:22, vade wrote:
> 
>> Are you feeding images into published input image ports, or pulling images 
>> out of published image ports, or is everything handled internally a single 
>> QTZ?
>> 
>> Try enabling NSZombies and see if you can re-create the crash or leak of 
>> objects. Does this happen consistently at the same point in your code, on 
>> app launch for example, or is it totally inconsistent? Is your app 32 bit? 
>> are you hitting a memory limit? Have you checked for leaks at all?
>> 
>> Does yoru 3rd party plugin handle image processing? 
>> 
>> The thread overhead is afaik "well known" for quicktime, especially AIC and 
>> modern codecs that can use multiple decode threads. I often see tons of 
>> threads in apps like VDMX, because of pre-rolling, etc, and I dont think 
>> they get cleaned up quickly either. 
>> 
>> 
>> 
>> On Jul 18, 2011, at 12:05 PM, Adrian Ward wrote:
>> 
>>> 
>>> Hi all,
>>> 
>>> I'm starting to see an increase in sporadic crashes of an app we've written 
>>> that uses a QCView that has loaded a large and complex QTZ. This set up has 
>>> been running for quite a long time and the only significant change is the 
>>> content that the QTZ loads. We've been through the content repeatedly to 
>>> see if we can find a culprit but there is nothing immediately obvious.
>>> 
>>> Now, I know better than to expect anyone here to give me a solution, but I 
>>> thought if I posted a crash report someone might be able to suggest an area 
>>> I should be looking at. The below report tells me Thread 0 has crashed 
>>> whilst QCImageManager was optimising its caches, and I'm guessing it's 
>>> likely that a resource somewhere got over-released. So I know I need to be 
>>> careful about memory allocation. I'm fairly certain I have been in the 
>>> custom plugins that are loaded. I'm also aware that the app is loading LOTS 
>>> of content - object allocations during the load phase peak at about 600MB 
>>> so maybe I'm just being greedy?
>>> 
>>> The 32 QCDatagramReceiver threads are not a surprise - I have 32 Network 
>>> Receiver patches somewhere deep in the QTZ.
>>> 
>>> However, whats with the ~68 threads that are in QuickTimeH264.scalar and 
>>> AppleIntermediateCodec?! I don't have that many Movie Importers running at 
>>> the same time! I might have some sitting idle that sometimes get used to 
>>> load video, but not all at the same the time. Generally I'd only ever have 
>>> a maximum of two Movie Importers loading a video at the same time, and the 
>>> rest of the time the others would have their Movie Location set to blank so 
>>> they wouldn't have loaded any video. I know we use both H264 and AIC for 
>>> video content so this is a point of concern.
>>> 
>>> So, does this suggest that QC isn't freeing resources (or killing old 
>>> threads...) used by Movie Importer? And is it plausible that this could be 
>>> pushing my app to a EXC_BAD_ACCESS?
>>> 
>>> Sorry I can't post a QTZ demonstrating this in action, nor reduce the 
>>> project to reproduce the issue reliably.
>>> 
>>> All suggestions welcome! Unless they involve phone hacking, please.
>>> 
>>> Thanks,
>>> 
>>> 
>>> Ade.
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> Process:         Performer [16964]
>>> Path:            /IWM/UIMain/Performer.app/Contents/MacOS/Performer
>>> Identifier:      uk.co.clayinteractive.performer
>>> Version:         ??? (3.2 (20110518))
>>> Code Type:       X86 (Native)
>>> Parent Process:  launchd [110]
>>> 
>>> Date/Time:       2011-07-18 14:50:03.675 +0100
>>> OS Version:      Mac OS X 10.6.7 (10J869)
>>> Report Version:  6
>>> 
>>> Anonymous UUID:                      7BE221EF-6350-4AD4-A24F-9C9308A6BB3C
>>> 
>>> Exception Type:  EXC_BAD_ACCESS (SIGBUS)
>>> Exception Codes: KERN_PROTECTION_FAILURE at 0x000000000000002e
>>> Crashed Thread:  0  Dispatch queue: com.apple.main-thread
>>> 
>>> Application Specific Information:
>>> objc_msgSend() selector name: backingReleaseCallback
>>> 
>>> 
>>> Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
>>> 0   libobjc.A.dylib                   0x95448ed7 objc_msgSend + 23
>>> 1   com.apple.QuartzComposer          0x99792939 -[QCCache(Private) 
>>> _applyFunctionOnAllResources:userInfo:] + 86
>>> 2   com.apple.QuartzComposer          0x99791d90 -[QCImageManager 
>>> optimizeCaches] + 1418
>>> 3   com.apple.QuartzComposer          0x99791693 -[QCImageManager 
>>> reclaimResources] + 141
>>> 4   com.apple.QuartzComposer          0x9979f800 -[QCGraphicsContext 
>>> renderPatch:time:arguments:] + 170
>>> 5   com.apple.QuartzComposer          0x9979e764 -[QCOpenGLContext 
>>> renderPatch:time:arguments:] + 614
>>> 6   com.apple.QuartzComposer          0x9979e4f6 -[QCPatch(Runtime) 
>>> render:arguments:] + 92
>>> 7   com.apple.QuartzComposer          0x997df7de -[QCView 
>>> render:arguments:] + 738
>>> 8   com.apple.QuartzComposer          0x9980a653 -[QCView _renderTimer] + 
>>> 160
>>> 9   com.apple.QuartzComposer          0x997e4d3a _TimerCallback + 240
>>> 10  com.apple.CoreFoundation          0x98226adb __CFRunLoopRun + 8059
>>> 11  com.apple.CoreFoundation          0x98224464 CFRunLoopRunSpecific + 452
>>> 12  com.apple.CoreFoundation          0x98224291 CFRunLoopRunInMode + 97
>>> 13  com.apple.HIToolbox               0x942fbe04 RunCurrentEventLoopInMode 
>>> + 392
>>> 14  com.apple.HIToolbox               0x942fbbb9 ReceiveNextEventCommon + 
>>> 354
>>> 15  com.apple.HIToolbox               0x942fba3e 
>>> BlockUntilNextEventMatchingListInMode + 81
>>> 16  com.apple.AppKit                  0x9066c78d _DPSNextEvent + 847
>>> 17  com.apple.AppKit                  0x9066bfce -[NSApplication 
>>> nextEventMatchingMask:untilDate:inMode:dequeue:] + 156
>>> 18  com.apple.AppKit                  0x9062e247 -[NSApplication run] + 821
>>> 19  com.apple.AppKit                  0x906262d9 NSApplicationMain + 574
>>> 20  ...o.clayinteractive.performer    0x00002c12 main + 2584 (main.m:128)
>>> 21  ...o.clayinteractive.performer    0x000021ce start + 54
>>> 
>>> Thread 1:  Dispatch queue: com.apple.libdispatch-manager
>>> 0   libSystem.B.dylib                 0x94613922 kevent + 10
>>> 1   libSystem.B.dylib                 0x9461403c _dispatch_mgr_invoke + 215
>>> 2   libSystem.B.dylib                 0x946134f9 _dispatch_queue_invoke + 
>>> 163
>>> 3   libSystem.B.dylib                 0x9461329e _dispatch_worker_thread2 + 
>>> 240
>>> 4   libSystem.B.dylib                 0x94612d21 _pthread_wqthread + 390
>>> 5   libSystem.B.dylib                 0x94612b66 start_wqthread + 30
>>> 
>>> Thread 2:
>>> 0   libSystem.B.dylib                 0x945ed09a mach_msg_trap + 10
>>> 1   libSystem.B.dylib                 0x945ed807 mach_msg + 68
>>> 2   com.apple.opengl                  0x978d71d9 glcDebugListener + 426
>>> 3   libSystem.B.dylib                 0x9461a7fd _pthread_start + 345
>>> 4   libSystem.B.dylib                 0x9461a682 thread_start + 34
>>> 
>>> Thread 3:
>>> 0   libSystem.B.dylib                 0x945ed09a mach_msg_trap + 10
>>> 1   libSystem.B.dylib                 0x945ed807 mach_msg + 68
>>> 2   com.apple.CoreFoundation          0x9822537f __CFRunLoopRun + 2079
>>> 3   com.apple.CoreFoundation          0x98224464 CFRunLoopRunSpecific + 452
>>> 4   com.apple.CoreFoundation          0x9822a3a4 CFRunLoopRun + 84
>>> 5   com.apple.QuartzComposer          0x997f6929 -[QCRunLoopPatch 
>>> _runLoopThread:] + 449
>>> 6   com.apple.Foundation              0x9699fad0 -[NSThread main] + 45
>>> 7   com.apple.Foundation              0x9699fa80 __NSThread__main__ + 1499
>>> 8   libSystem.B.dylib                 0x9461a7fd _pthread_start + 345
>>> 9   libSystem.B.dylib                 0x9461a682 thread_start + 34
>>> 
>>> Thread 4:
>>> 0   libSystem.B.dylib                 0x9460c066 select$DARWIN_EXTSN + 10
>>> 1   com.apple.QuartzComposer          0x9987e7e0 -[QCDatagramReceiver 
>>> receiveDataWithTimeOut:] + 246
>>> 2   com.apple.QuartzComposer          0x9987e619 -[QCDatagramReceiver 
>>> receiveStringWithTimeOut:] + 49
>>> 3   com.apple.QuartzComposer          0x998ab95a -[QCNetworkReceiver 
>>> _receiverThread:] + 97
>>> 4   com.apple.QuartzComposer          0x9988f52e -[QCThreadPatch _thread:] 
>>> + 341
>>> 5   com.apple.Foundation              0x9699fad0 -[NSThread main] + 45
>>> 6   com.apple.Foundation              0x9699fa80 __NSThread__main__ + 1499
>>> 7   libSystem.B.dylib                 0x9461a7fd _pthread_start + 345
>>> 8   libSystem.B.dylib                 0x9461a682 thread_start + 34
>>> 
>>> Thread 5:
>>> 0   libSystem.B.dylib                 0x9460c066 select$DARWIN_EXTSN + 10
>>> 1   com.apple.QuartzComposer          0x9987e7e0 -[QCDatagramReceiver 
>>> receiveDataWithTimeOut:] + 246
>>> 2   com.apple.QuartzComposer          0x9987e619 -[QCDatagramReceiver 
>>> receiveStringWithTimeOut:] + 49
>>> 3   com.apple.QuartzComposer          0x998ab95a -[QCNetworkReceiver 
>>> _receiverThread:] + 97
>>> 4   com.apple.QuartzComposer          0x9988f52e -[QCThreadPatch _thread:] 
>>> + 341
>>> 5   com.apple.Foundation              0x9699fad0 -[NSThread main] + 45
>>> 6   com.apple.Foundation              0x9699fa80 __NSThread__main__ + 1499
>>> 7   libSystem.B.dylib                 0x9461a7fd _pthread_start + 345
>>> 8   libSystem.B.dylib                 0x9461a682 thread_start + 34
>>> 
>>> Thread 6:
>>> 0   libSystem.B.dylib                 0x9460c066 select$DARWIN_EXTSN + 10
>>> 1   com.apple.QuartzComposer          0x9987e7e0 -[QCDatagramReceiver 
>>> receiveDataWithTimeOut:] + 246
>>> 2   com.apple.QuartzComposer          0x9987e619 -[QCDatagramReceiver 
>>> receiveStringWithTimeOut:] + 49
>>> 3   com.apple.QuartzComposer          0x998ab95a -[QCNetworkReceiver 
>>> _receiverThread:] + 97
>>> 4   com.apple.QuartzComposer          0x9988f52e -[QCThreadPatch _thread:] 
>>> + 341
>>> 5   com.apple.Foundation              0x9699fad0 -[NSThread main] + 45
>>> 6   com.apple.Foundation              0x9699fa80 __NSThread__main__ + 1499
>>> 7   libSystem.B.dylib                 0x9461a7fd _pthread_start + 345
>>> 8   libSystem.B.dylib                 0x9461a682 thread_start + 34
>>> 
>>> Thread 7:
>>> 0   libSystem.B.dylib                 0x9460c066 select$DARWIN_EXTSN + 10
>>> 1   com.apple.QuartzComposer          0x9987e7e0 -[QCDatagramReceiver 
>>> receiveDataWithTimeOut:] + 246
>>> 2   com.apple.QuartzComposer          0x9987e619 -[QCDatagramReceiver 
>>> receiveStringWithTimeOut:] + 49
>>> 3   com.apple.QuartzComposer          0x998ab95a -[QCNetworkReceiver 
>>> _receiverThread:] + 97
>>> 4   com.apple.QuartzComposer          0x9988f52e -[QCThreadPatch _thread:] 
>>> + 341
>>> 5   com.apple.Foundation              0x9699fad0 -[NSThread main] + 45
>>> 6   com.apple.Foundation              0x9699fa80 __NSThread__main__ + 1499
>>> 7   libSystem.B.dylib                 0x9461a7fd _pthread_start + 345
>>> 8   libSystem.B.dylib                 0x9461a682 thread_start + 34
>>> 
>>> Thread 8:
>>> 0   libSystem.B.dylib                 0x9460c066 select$DARWIN_EXTSN + 10
>>> 1   com.apple.QuartzComposer          0x9987e7e0 -[QCDatagramReceiver 
>>> receiveDataWithTimeOut:] + 246
>>> 2   com.apple.QuartzComposer          0x9987e619 -[QCDatagramReceiver 
>>> receiveStringWithTimeOut:] + 49
>>> 3   com.apple.QuartzComposer          0x998ab95a -[QCNetworkReceiver 
>>> _receiverThread:] + 97
>>> 4   com.apple.QuartzComposer          0x9988f52e -[QCThreadPatch _thread:] 
>>> + 341
>>> 5   com.apple.Foundation              0x9699fad0 -[NSThread main] + 45
>>> 6   com.apple.Foundation              0x9699fa80 __NSThread__main__ + 1499
>>> 7   libSystem.B.dylib                 0x9461a7fd _pthread_start + 345
>>> 8   libSystem.B.dylib                 0x9461a682 thread_start + 34
>>> 
>>> Thread 9:
>>> 0   libSystem.B.dylib                 0x9460c066 select$DARWIN_EXTSN + 10
>>> 1   com.apple.QuartzComposer          0x9987e7e0 -[QCDatagramReceiver 
>>> receiveDataWithTimeOut:] + 246
>>> 2   com.apple.QuartzComposer          0x9987e619 -[QCDatagramReceiver 
>>> receiveStringWithTimeOut:] + 49
>>> 3   com.apple.QuartzComposer          0x998ab95a -[QCNetworkReceiver 
>>> _receiverThread:] + 97
>>> 4   com.apple.QuartzComposer          0x9988f52e -[QCThreadPatch _thread:] 
>>> + 341
>>> 5   com.apple.Foundation              0x9699fad0 -[NSThread main] + 45
>>> 6   com.apple.Foundation              0x9699fa80 __NSThread__main__ + 1499
>>> 7   libSystem.B.dylib                 0x9461a7fd _pthread_start + 345
>>> 8   libSystem.B.dylib                 0x9461a682 thread_start + 34
>>> 
>>> Thread 10:
>>> 0   libSystem.B.dylib                 0x9460c066 select$DARWIN_EXTSN + 10
>>> 1   com.apple.QuartzComposer          0x9987e7e0 -[QCDatagramReceiver 
>>> receiveDataWithTimeOut:] + 246
>>> 2   com.apple.QuartzComposer          0x9987e619 -[QCDatagramReceiver 
>>> receiveStringWithTimeOut:] + 49
>>> 3   com.apple.QuartzComposer          0x998ab95a -[QCNetworkReceiver 
>>> _receiverThread:] + 97
>>> 4   com.apple.QuartzComposer          0x9988f52e -[QCThreadPatch _thread:] 
>>> + 341
>>> 5   com.apple.Foundation              0x9699fad0 -[NSThread main] + 45
>>> 6   com.apple.Foundation              0x9699fa80 __NSThread__main__ + 1499
>>> 7   libSystem.B.dylib                 0x9461a7fd _pthread_start + 345
>>> 8   libSystem.B.dylib                 0x9461a682 thread_start + 34
>>> 
>>> Thread 11:
>>> 0   libSystem.B.dylib                 0x9460c066 select$DARWIN_EXTSN + 10
>>> 1   com.apple.QuartzComposer          0x9987e7e0 -[QCDatagramReceiver 
>>> receiveDataWithTimeOut:] + 246
>>> 2   com.apple.QuartzComposer          0x9987e619 -[QCDatagramReceiver 
>>> receiveStringWithTimeOut:] + 49
>>> 3   com.apple.QuartzComposer          0x998ab95a -[QCNetworkReceiver 
>>> _receiverThread:] + 97
>>> 4   com.apple.QuartzComposer          0x9988f52e -[QCThreadPatch _thread:] 
>>> + 341
>>> 5   com.apple.Foundation              0x9699fad0 -[NSThread main] + 45
>>> 6   com.apple.Foundation              0x9699fa80 __NSThread__main__ + 1499
>>> 7   libSystem.B.dylib                 0x9461a7fd _pthread_start + 345
>>> 8   libSystem.B.dylib                 0x9461a682 thread_start + 34
>>> 
>>> Thread 12:
>>> 0   libSystem.B.dylib                 0x9460c066 select$DARWIN_EXTSN + 10
>>> 1   com.apple.QuartzComposer          0x9987e7e0 -[QCDatagramReceiver 
>>> receiveDataWithTimeOut:] + 246
>>> 2   com.apple.QuartzComposer          0x9987e619 -[QCDatagramReceiver 
>>> receiveStringWithTimeOut:] + 49
>>> 3   com.apple.QuartzComposer          0x998ab95a -[QCNetworkReceiver 
>>> _receiverThread:] + 97
>>> 4   com.apple.QuartzComposer          0x9988f52e -[QCThreadPatch _thread:] 
>>> + 341
>>> 5   com.apple.Foundation              0x9699fad0 -[NSThread main] + 45
>>> 6   com.apple.Foundation              0x9699fa80 __NSThread__main__ + 1499
>>> 7   libSystem.B.dylib                 0x9461a7fd _pthread_start + 345
>>> 8   libSystem.B.dylib                 0x9461a682 thread_start + 34
>>> 
>>> Thread 13:
>>> 0   libSystem.B.dylib                 0x9460c066 select$DARWIN_EXTSN + 10
>>> 1   com.apple.QuartzComposer          0x9987e7e0 -[QCDatagramReceiver 
>>> receiveDataWithTimeOu
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Quartzcomposer-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/quartzcomposer-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to