exception EXC_RESOURCE - WAKEUPS 分析(二)
一、问题:
直播助手在使用ReplayKit2 Extension的过程中,ReplayKit2的Upload进程工作在后台模式,苹果对处于后台的进程进行了内存和CPU资源的限制。
对于内存:
每种Extension的限制不同,ReplayKit2 Extension 的内存限制是 Active Memory limit = 50MB, 如果使用的物理内存超过这个限制,将会被系统直接干掉。(干掉之前会收到Memory Warning的警告)
对于CPU:
统计该进程一段时间内(300s)wakeup的次数,也就是线程切换调度的次数。
现象:
内存警告:
这个日志只能在Console中看到,对于用户而言,会收到一个弹框提示“某某进程中断”
CPU使用过多的现象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 | Date / Time: 2018 - 09 - 20 14 : 59 : 44.493850 + 0800 OS Version: iPhone OS 11.4 . 1 (Build 15G77 ) Architecture: arm64 Report Version: 19 Command: LABroadcastUpload Path: / private / var / containers / Bundle / Application / 62E054DE - ADDD - 4955 - BAA9 - BD4C7A487B7F / LiveAssistant.app / PlugIns / LABroadcastUpload.appex / LABroadcastUpload Version: 2.10 . 0 ( 2.10 . 0.11 ) Beta Identifier: DD6E7BB7 - 473A - 4B7F - B5AF - CEC5E48FFE9E Parent: launchd [ 1 ] PID: 437 Event: wakeups Action taken: none Wakeups: 45001 wakeups over the last 162 seconds ( 277 wakeups per second average), exceeding limit of 150 wakeups per second over 300 seconds Wakeups limit: 45000 Limit duration: 300s Wakeups caused: 45001 Duration: 162.23s Steps: 59 Hardware model: iPhone9, 2 Active cpus: 2 Powerstats for : LABroadcastUploa [ 437 ] UUID: 562B0868 - A0CA - 32D5 - 9E98 - E87676053442 Start time: 2018 - 09 - 20 15 : 01 : 39 + 0800 End time: 2018 - 09 - 20 15 : 02 : 26 + 0800 Parent: launchd Microstackshots: 59 samples ( 100 % ) Primary state: 38 samples Frontmost App, User mode, Effective Thread QoS Default, Requested Thread QoS Default, Override Thread QoS Unspecified User Activity: 0 samples Idle, 59 samples Active Power Source: 0 samples on Battery, 59 samples on AC 27 _pthread_wqthread + 859 (libsystem_pthread.dylib + 3696 ) [ 0x182167e70 ] 24 _dispatch_workloop_worker_thread$VARIANT$mp + 667 (libdispatch.dylib + 86168 ) [ 0x181e48098 ] 24 _dispatch_root_queue_drain_deferred_wlh$VARIANT$mp + 339 (libdispatch.dylib + 52424 ) [ 0x181e3fcc8 ] 24 _dispatch_queue_invoke$VARIANT$mp + 335 (libdispatch.dylib + 49916 ) [ 0x181e3f2fc ] 12 _dispatch_queue_serial_drain$VARIANT$mp + 607 (libdispatch.dylib + 47540 ) [ 0x181e3e9b4 ] 12 _dispatch_client_callout + 15 (libdispatch.dylib + 6752 ) [ 0x181e34a60 ] 12 _dispatch_call_block_and_release + 23 (libdispatch.dylib + 6816 ) [ 0x181e34aa0 ] 5 __59 - [RPBroadcastSampleHandler _processPayloadWithVideoSample:]_block_invoke + 211 (ReplayKit + 57632 ) [ 0x19e0df120 ] 4 - [RPBroadcastSampleHandler _sampleBufferFromIOSurface:timingInfo:] + 51 (ReplayKit + 58792 ) [ 0x19e0df5a8 ] 4 CVPixelBufferCreateWithIOSurface + 1131 (CoreVideo + 43776 ) [ 0x1855efb00 ] 2 IOSurfaceClientCopyAllValues + 503 (IOSurface + 16664 ) [ 0x183629118 ] 2 unserializeReplacementIOKitTypeRef + 343 (IOSurface + 17196 ) [ 0x18362932c ] 2 CFDictionaryApplyFunction + 287 (CoreFoundation + 84836 ) [ 0x182411b64 ] 2 CFBasicHashApply + 131 (CoreFoundation + 44952 ) [ 0x182407f98 ] 2 __CFDictionaryApplyFunction_block_invoke + 23 (CoreFoundation + 146620 ) [ 0x182420cbc ] 2 unserializeReplacementDictionaryKeysAndValues + 31 (IOSurface + 29096 ) [ 0x18362c1a8 ] 2 unserializeReplacementIOKitTypeRef + 343 (IOSurface + 17196 ) [ 0x18362932c ] 2 CFDictionaryApplyFunction + 287 (CoreFoundation + 84836 ) [ 0x182411b64 ] 2 CFBasicHashApply + 131 (CoreFoundation + 44952 ) [ 0x182407f98 ] 2 __CFDictionaryApplyFunction_block_invoke + 23 (CoreFoundation + 146620 ) [ 0x182420cbc ] 2 unserializeReplacementDictionaryKeysAndValues + 31 (IOSurface + 29096 ) [ 0x18362c1a8 ] 2 unserializeReplacementIOKitTypeRef + 251 (IOSurface + 17104 ) [ 0x1836292d0 ] 2 CFArrayApplyFunction + 79 (CoreFoundation + 46720 ) [ 0x182408680 ] 2 unserializeReplacementArrayValues + 19 (IOSurface + 29176 ) [ 0x18362c1f8 ] 2 unserializeReplacementIOKitTypeRef + 343 (IOSurface + 17196 ) [ 0x18362932c ] 2 CFDictionaryApplyFunction + 287 (CoreFoundation + 84836 ) [ 0x182411b64 ] 2 CFBasicHashApply + 131 (CoreFoundation + 44952 ) [ 0x182407f98 ] 2 __CFDictionaryApplyFunction_block_invoke + 23 (CoreFoundation + 146620 ) [ 0x182420cbc ] 2 unserializeReplacementDictionaryKeysAndValues + 51 (IOSurface + 29116 ) [ 0x18362c1bc ] 2 CFDictionaryGetValue + 223 (CoreFoundation + 21088 ) [ 0x182402260 ] 2 CFBasicHashFindBucket + 207 (CoreFoundation + 21324 ) [ 0x18240234c ] 2 CFHash + 232 (CoreFoundation + 33616 ) [ 0x182405350 ] 1 IOSurfaceClientCopyAllValues + 419 (IOSurface + 16580 ) [ 0x1836290c4 ] 1 IOCFUnserializeBinary + 1083 (IOKit + 7704 ) [ 0x1827a7e18 ] 1 CFDictionarySetValue + 331 (CoreFoundation + 30712 ) [ 0x1824047f8 ] 1 CFBasicHashSetValue + 863 (CoreFoundation + 31668 ) [ 0x182404bb4 ] 1 __CFStringEqual + 168 (CoreFoundation + 1047752 ) [ 0x1824fccc8 ] 1 IOSurfaceClientCopyAllValues + 367 (IOSurface + 16528 ) [ 0x183629090 ] 1 IOConnectCallMethod + 231 (IOKit + 24632 ) [ 0x1827ac038 ] 1 io_connect_method + 415 (IOKit + 433080 ) [ 0x18280fbb8 ] 1 mach_msg_trap + 8 (libsystem_kernel.dylib + 3560 ) [ 0x181fa7de8 ] 1 <Kernel mode> 1 - [RPBroadcastSampleHandler _sampleBufferFromIOSurface:timingInfo:] + 67 (ReplayKit + 58808 ) [ 0x19e0df5b8 ] 1 CMVideoFormatDescriptionCreateForImageBuffer + 635 (CoreMedia + 157804 ) [ 0x1857d786c ] 1 CMVideoFormatDescriptionCreate + 107 (CoreMedia + 157032 ) [ 0x1857d7568 ] 1 FigDerivedFormatDescriptionCreate + 415 (CoreMedia + 35360 ) [ 0x1857b9a20 ] 1 CFPropertyListCreateDeepCopy + 915 (CoreFoundation + 292876 ) [ 0x18244480c ] 1 CFDictionaryCreate + 215 (CoreFoundation + 296564 ) [ 0x182445674 ] 1 CFBasicHashCreate + 107 (CoreFoundation + 28916 ) [ 0x1824040f4 ] 1 _CFRuntimeCreateInstance + 651 (CoreFoundation + 26056 ) [ 0x1824035c8 ] 1 object_setClass + 100 (libobjc.A.dylib + 26484 ) [ 0x1816fa774 ] 2 ??? (LABroadcastUpload + 7320248 ) [ 0x102eef2b8 ] 2 ??? (LABroadcastUpload + 7322612 ) [ 0x102eefbf4 ] 2 VTCompressionSessionEncodeFrame + 99 (VideoToolbox + 50016 ) [ 0x185ccf360 ] 2 VTCompressionSessionRemote_EncodeFrame + 59 (VideoToolbox + 313336 ) [ 0x185d0f7f8 ] 2 vtCompressionSessionRemote_EncodeFrameCommon + 247 (VideoToolbox + 313596 ) [ 0x185d0f8fc ] 2 FigRemote_CreateSerializedAtomDataForPixelBuffer + 31 (CoreMedia + 1105980 ) [ 0x1858bf03c ] 2 FigRemote_CreateSerializedAtomDataAndSurfaceForPixelBuffer + 267 (CoreMedia + 1106372 ) [ 0x1858bf1c4 ] 2 sbufAtom_createSerializedDataForPixelBuffer + 547 (CoreMedia + 1107144 ) [ 0x1858bf4c8 ] 2 sbufAtom_appendAtomWithMemoryBlock + 95 (CoreMedia + 1115024 ) [ 0x1858c1390 ] 2 FigNEAtomWriterAppendData + 91 (CoreMedia + 1115568 ) [ 0x1858c15b0 ] 2 _platform_memmove + 96 (libsystem_platform.dylib + 6704 ) [ 0x18215ea30 ] 2 <Kernel mode> 1 __64 - [RPBroadcastSampleHandler _processPayloadWithAudioSample: type :]_block_invoke + 487 (ReplayKit + 58596 ) [ 0x19e0df4e4 ] 1 mvm_deallocate_pages + 75 (libsystem_malloc.dylib + 58880 ) [ 0x18200c600 ] 1 _kernelrpc_mach_vm_deallocate_trap + 8 (libsystem_kernel.dylib + 3356 ) [ 0x181fa7d1c ] 1 <Kernel mode> 1 ??? (LABroadcastUpload + 344176 ) [ 0x102848070 ] 1 ??? (LABroadcastUpload + 346144 ) [ 0x102848820 ] 1 ??? (LABroadcastUpload + 697624 ) [ 0x10289e518 ] 1 ??? (LABroadcastUpload + 9076476 ) [ 0x10309befc ] 1 _dispatch_queue_barrier_sync_invoke_and_complete + 55 (libdispatch.dylib + 42428 ) [ 0x181e3d5bc ] 1 _dispatch_client_callout + 15 (libdispatch.dylib + 6752 ) [ 0x181e34a60 ] 1 ??? (LABroadcastUpload + 9077740 ) [ 0x10309c3ec ] 1 ??? (LABroadcastUpload + 9055864 ) [ 0x103096e78 ] 1 ??? (LABroadcastUpload + 9044532 ) [ 0x103094234 ] 1 ??? (LABroadcastUpload + 9043328 ) [ 0x103093d80 ] 1 AudioConverterFillComplexBuffer + 963 (AudioToolbox + 3332076 ) [ 0x18639d7ec ] 1 BufferedAudioConverter::FillBuffer + 803 (AudioToolbox + 57712 ) [ 0x18607e170 ] 1 AudioConverterChain::RenderOutput + 119 (AudioToolbox + 56784 ) [ 0x18607ddd0 ] 1 CodecConverter::EncoderFillBuffer + 1059 (AudioToolbox + 2281600 ) [ 0x18629d080 ] 1 ProduceOutputPackets + 27 (AudioCodecs + 33200 ) [ 0x1a2b2a1b0 ] 1 ACMP4AACBaseEncoder::ProduceOutputPackets + 231 (AudioCodecs + 894872 ) [ 0x1a2bfc798 ] 1 AACEncoder::EncodeFrame + 515 (AudioCodecs + 445952 ) [ 0x1a2b8ee00 ] 1 aacEncodeFrame + 339 (AudioCodecs + 670340 ) [ 0x1a2bc5a84 ] 1 AdvanceLoopKernel + 1099 (AudioCodecs + 164132 ) [ 0x1a2b4a124 ] 1 calcBitrateNMR + 83 (AudioCodecs + 168336 ) [ 0x1a2b4b190 ] 1 EvaluateLoopChannel + 95 (AudioCodecs + 21796 ) [ 0x1a2b27524 ] 1 InvQuantizeAndEvaluateSpectrum_Neon + 184 (AudioCodecs + 1261244 ) [ 0x1a2c55ebc ] 1 invocation function for block in __CFURLCache::CreateAndStoreCacheNode + 2003 (CFNetwork + 493812 ) [ 0x182b3e8f4 ] 1 - [NSURLStorage_CacheClient addCachedResponseWithDictionary:key:] + 131 (CFNetwork + 905132 ) [ 0x182ba2fac ] 1 _NSXPCDistantObjectSimpleMessageSend2 + 63 (Foundation + 2355548 ) [ 0x1830b415c ] 1 - [NSXPCConnection _sendSelector:withProxy:arg1:arg2:] + 135 (Foundation + 228044 ) [ 0x182eacacc ] 1 - [NSXPCConnection _sendInvocation:orArguments:count:methodSignature:selector:withProxy:] + 1763 (Foundation + 71044 ) [ 0x182e86584 ] 1 - [NSXPCInterface _interfaceForArgument:ofSelector:reply:] + 231 (Foundation + 73480 ) [ 0x182e86f08 ] 1 - [NSObject isKindOfClass:] + 32 (libobjc.A.dylib + 157520 ) [ 0x18171a750 ] 1 <Effective Thread QoS Background, Requested Thread QoS Background> 1 ??? (LABroadcastUpload + 444760 ) [ 0x102860958 ] 1 __59 - [RPBroadcastSampleHandler _processPayloadWithVideoSample:]_block_invoke + 307 (ReplayKit + 57728 ) [ 0x19e0df180 ] 1 ??? (LABroadcastUpload + 444964 ) [ 0x102860a24 ] 1 ??? (LABroadcastUpload + 426324 ) [ 0x10285c154 ] 1 ??? (LABroadcastUpload + 426576 ) [ 0x10285c250 ] 1 ??? (LABroadcastUpload + 419812 ) [ 0x10285a7e4 ] 1 ??? (LABroadcastUpload + 415888 ) [ 0x102859890 ] 1 ??? (LABroadcastUpload + 410632 ) [ 0x102858408 ] 1 ??? (LABroadcastUpload + 410268 ) [ 0x10285829c ] 1 + [NSString stringWithUTF8String:] + 147 (Foundation + 28888 ) [ 0x182e7c0d8 ] 1 CFStringCreateWithBytes + 43 (CoreFoundation + 30368 ) [ 0x1824046a0 ] 1 __CFStringCreateImmutableFunnel3 + 1787 (CoreFoundation + 1053888 ) [ 0x1824fe4c0 ] 1 __CFSearchStringROM + 104 (CoreFoundation + 610268 ) [ 0x182491fdc ] 10 _dispatch_queue_serial_drain$VARIANT$mp + 279 (libdispatch.dylib + 47212 ) [ 0x181e3e86c ] 8 _dispatch_mach_invoke$VARIANT$mp + 507 (libdispatch.dylib + 102124 ) [ 0x181e4beec ] 8 _dispatch_queue_serial_drain$VARIANT$mp + 279 (libdispatch.dylib + 47212 ) [ 0x181e3e86c ] 8 _dispatch_mach_msg_invoke$VARIANT$mp + 351 (libdispatch.dylib + 99392 ) [ 0x181e4b440 ] 8 _dispatch_client_callout4 + 15 (libdispatch.dylib + 6960 ) [ 0x181e34b30 ] 6 _xpc_connection_mach_event + 983 (libxpc.dylib + 10436 ) [ 0x1821a08c4 ] 6 _xpc_connection_call_event_handler + 67 (libxpc.dylib + 20272 ) [ 0x1821a2f30 ] 5 message_handler + 239 (Foundation + 355008 ) [ 0x182ecbac0 ] 2 - [NSXPCConnection _decodeAndInvokeMessageWithEvent:flags:] + 407 (Foundation + 212724 ) [ 0x182ea8ef4 ] 2 - [NSXPCDecoder _decodeMessageFromXPCObject:allowingSimpleMessageSend:outInvocation:outArguments:outArgumentsMaxCount:outMethodSignature:outSelector:interface:] + 39 (Foundation + 217648 ) [ 0x182eaa230 ] 2 - [NSXPCDecoder __decodeXPCObject:allowingSimpleMessageSend:outInvocation:outArguments:outArgumentsMaxCount:outMethodSignature:outSelector:isReply:replySelector:interface:] + 1959 (Foundation + 82700 ) [ 0x182e8930c ] 2 _NSXPCSerializationDecodeInvocationObjectOnlyArgumentArray + 523 (Foundation + 2516308 ) [ 0x1830db554 ] 2 - [NSXPCDecoder _decodeObjectOfClasses:atObject:] + 131 (Foundation + 83796 ) [ 0x182e89754 ] 2 _decodeObject + 1023 (Foundation + 2326612 ) [ 0x1830ad054 ] 1 - [NSDictionary initWithCoder:] + 327 (Foundation + 181160 ) [ 0x182ea13a8 ] 1 - [NSDictionary initWithObjects:forKeys:] + 263 (CoreFoundation + 427020 ) [ 0x18246540c ] 1 _platform_memset + 232 (libsystem_platform.dylib + 7656 ) [ 0x18215ede8 ] 1 - [NSDictionary initWithCoder:] + 251 (Foundation + 181084 ) [ 0x182ea135c ] 1 - [NSXPCDecoder _decodeArrayOfObjectsForKey:] + 195 (Foundation + 212284 ) [ 0x182ea8d3c ] 1 _NSXPCSerializationIterateArrayObject + 179 (Foundation + 373240 ) [ 0x182ed01f8 ] 1 __44 - [NSXPCDecoder _decodeArrayOfObjectsForKey:]_block_invoke + 35 (Foundation + 373364 ) [ 0x182ed0274 ] 1 _decodeObject + 507 (Foundation + 2326096 ) [ 0x1830ace50 ] 1 _NSXPCSerializationStringForObject + 39 (Foundation + 373576 ) [ 0x182ed0348 ] 1 _getStringAtMarker + 351 (Foundation + 373960 ) [ 0x182ed04c8 ] 1 CFStringCreateWithCharacters + 55 (CoreFoundation + 170392 ) [ 0x182426998 ] 1 __CFStringCreateImmutableFunnel3 + 2023 (CoreFoundation + 1054124 ) [ 0x1824fe5ac ] 1 _CFRuntimeCreateInstance + 299 (CoreFoundation + 25704 ) [ 0x182403468 ] 1 malloc_zone_malloc + 159 (libsystem_malloc.dylib + 5596 ) [ 0x181fff5dc ] 1 nano_malloc + 43 (libsystem_malloc.dylib + 76192 ) [ 0x1820109a0 ] 1 OSAtomicDequeue$VARIANT$mp + 24 (libsystem_platform.dylib + 26896 ) [ 0x182163910 ] 2 - [NSXPCConnection _decodeAndInvokeMessageWithEvent:flags:] + 2427 (Foundation + 214744 ) [ 0x182ea96d8 ] 2 __NSXPCCONNECTION_IS_CALLING_OUT_TO_EXPORTED_OBJECT_S2__ + 19 (Foundation + 2316640 ) [ 0x1830aa960 ] 1 - [RPBroadcastSampleHandler processPayload:completion:] + 95 (ReplayKit + 59156 ) [ 0x19e0df714 ] 1 __58 - [NSXPCConnection _decodeAndInvokeMessageWithEvent:flags:]_block_invoke + 155 (Foundation + 2312336 ) [ 0x1830a9890 ] 1 - [_NSXPCConnectionRequestedReplies endTransactionForSequence:completionHandler:] + 211 (Foundation + 2353748 ) [ 0x1830b3a54 ] 1 _sendReplyArgumentsOnly + 307 (Foundation + 2312688 ) [ 0x1830a99f0 ] 1 _xpc_dispose + 63 (libxpc.dylib + 9008 ) [ 0x1821a0330 ] 1 _xpc_serializer_dispose + 347 (libxpc.dylib + 11712 ) [ 0x1821a0dc0 ] 1 _dispatch_dispose$VARIANT$mp + 95 (libdispatch.dylib + 14336 ) [ 0x181e36800 ] 1 objc_destructInstance + 139 (libobjc.A.dylib + 84440 ) [ 0x1817089d8 ] 1 objc_object::sidetable_clearDeallocating + 76 (libobjc.A.dylib + 153348 ) [ 0x181719704 ] 1 - [RPBroadcastSampleHandler processPayload:completion:] + 75 (ReplayKit + 59136 ) [ 0x19e0df700 ] 1 - [RPBroadcastSampleHandler _processPayload:] + 231 (ReplayKit + 56588 ) [ 0x19e0ded0c ] 1 - [RPBroadcastSampleHandler _processPayloadWithVideoSample:] + 139 (ReplayKit + 57376 ) [ 0x19e0df020 ] 1 _dispatch_event_loop_poke$VARIANT$mp + 427 (libdispatch.dylib + 117656 ) [ 0x181e4fb98 ] 1 kevent_id + 8 (libsystem_kernel.dylib + 145340 ) [ 0x181fca7bc ] 1 <Kernel mode> 1 - [NSXPCConnection _decodeAndInvokeMessageWithEvent:flags:] + 1819 (Foundation + 214136 ) [ 0x182ea9478 ] 1 + [NSMethodSignature signatureWithObjCTypes:] + 199 (CoreFoundation + 176656 ) [ 0x182428210 ] 1 CFDictionaryGetValue + 223 (CoreFoundation + 21088 ) [ 0x182402260 ] 1 CFBasicHashFindBucket + 431 (CoreFoundation + 21548 ) [ 0x18240242c ] 1 typeStringEqual + 11 (CoreFoundation + 178768 ) [ 0x182428a50 ] 1 _platform_strcmp + 188 (libsystem_platform.dylib + 5452 ) [ 0x18215e54c ] 1 ::AutoreleasePoolPage::pop(void * ) + 843 (libobjc.A.dylib + 155964 ) [ 0x18171a13c ] 1 objc_object::release + 80 (libobjc.A.dylib + 153652 ) [ 0x181719834 ] 2 _xpc_connection_mach_event + 963 (libxpc.dylib + 10416 ) [ 0x1821a08b0 ] 2 _xpc_connection_unpack_message + 99 (libxpc.dylib + 15492 ) [ 0x1821a1c84 ] 2 _xpc_serializer_unpack + 755 (libxpc.dylib + 16548 ) [ 0x1821a20a4 ] 2 _xpc_dictionary_deserialize + 111 (libxpc.dylib + 21740 ) [ 0x1821a34ec ] 1 _xpc_dictionary_wire_length + 0 (libxpc.dylib + 17456 ) [ 0x1821a2430 ] 1 _xpc_dictionary_apply_wire_f + 547 (libxpc.dylib + 19512 ) [ 0x1821a2c38 ] 1 _xpc_dictionary_deserialize_apply + 47 (libxpc.dylib + 21828 ) [ 0x1821a3544 ] 1 _xpc_array_deserialize + 103 (libxpc.dylib + 21220 ) [ 0x1821a32e4 ] 1 _os_object_alloc_realized + 39 (libdispatch.dylib + 6872 ) [ 0x181e34ad8 ] 1 class_createInstance + 75 (libobjc.A.dylib + 83920 ) [ 0x1817087d0 ] 1 calloc + 39 (libsystem_malloc.dylib + 16224 ) [ 0x182001f60 ] 1 malloc_zone_calloc + 80 (libsystem_malloc.dylib + 16340 ) [ 0x182001fd4 ] 2 _dispatch_source_invoke$VARIANT$mp + 1363 (libdispatch.dylib + 79748 ) [ 0x181e46784 ] 2 _dispatch_continuation_pop$VARIANT$mp + 423 (libdispatch.dylib + 40596 ) [ 0x181e3ce94 ] 2 _dispatch_client_callout + 15 (libdispatch.dylib + 6752 ) [ 0x181e34a60 ] 1 dispatch_mig_server$VARIANT$mp + 499 (libdispatch.dylib + 106240 ) [ 0x181e4cf00 ] 1 vtcompressionsessioncallback_server + 95 (VideoToolbox + 561740 ) [ 0x185d4c24c ] 1 _XFrameIsPending + 51 (VideoToolbox + 561400 ) [ 0x185d4c0f8 ] 1 VTCompressionSessionRemoteCallbackServer_FrameIsPending + 35 (VideoToolbox + 320396 ) [ 0x185d1138c ] 1 vtcsr_dequeueAllPendingFramesAndCallbackClientForEach + 119 (VideoToolbox + 310840 ) [ 0x185d0ee38 ] 1 _dispatch_event_loop_poke$VARIANT$mp + 427 (libdispatch.dylib + 117656 ) [ 0x181e4fb98 ] 1 kevent_id + 8 (libsystem_kernel.dylib + 145340 ) [ 0x181fca7bc ] 1 <Kernel mode> 1 __nw_channel_create_block_invoke + 51 (libsystem_network.dylib + 187176 ) [ 0x182047b28 ] 1 nw_channel_update_input_source + 135 (libsystem_network.dylib + 189232 ) [ 0x182048330 ] 1 nw_channel_add_input_frames + 4327 (libsystem_network.dylib + 193660 ) [ 0x18204947c ] 1 tcp_input_flush + 83 (libusrtcp.dylib + 273224 ) [ 0x18360ab48 ] 1 nw_protocol_tcp_wake_read + 459 (libusrtcp.dylib + 106488 ) [ 0x1835e1ff8 ] 1 ConnectionProtocolInputAvailable + 63 (CFNetwork + 2369112 ) [ 0x182d08658 ] 1 ConnectionProtocolServiceReads + 379 (CFNetwork + 2365028 ) [ 0x182d07664 ] 1 ConnectionProtocolReadInner block_pointer, void (nw_frame_array_s * , CFStreamError) block_pointer) + 987 (CFNetwork + 2366192 ) [ 0x182d07af0 ] 1 TCPIOConnection::readCompleted block_pointer) + 323 (CFNetwork + 1711772 ) [ 0x182c67e9c ] 1 HTTPEngine::_readHeadersDoParse + 299 (CFNetwork + 2267088 ) [ 0x182cef7d0 ] 1 invocation function for block in HTTPEngine::_readHeadersDoParse + 39 (CFNetwork + 2269244 ) [ 0x182cf003c ] 1 HTTPMessage::appendBytes + 47 (CFNetwork + 857260 ) [ 0x182b974ac ] 1 HTTPParser::parse + 387 (CFNetwork + 2101944 ) [ 0x182cc72b8 ] 1 HTTPParser::commitAccumulatedLine + 91 (CFNetwork + 2101512 ) [ 0x182cc7108 ] 1 HTTPParser::commitHeaderLine + 147 (CFNetwork + 2101280 ) [ 0x182cc7020 ] 1 HTTPHeaderKeyMixedValue::HTTPHeaderKeyMixedValue + 80 (CFNetwork + 859804 ) [ 0x182b97e9c ] 2 _dispatch_queue_serial_drain$VARIANT$mp + 723 (libdispatch.dylib + 47656 ) [ 0x181e3ea28 ] 2 _dispatch_event_loop_drain$VARIANT$mp + 323 (libdispatch.dylib + 118916 ) [ 0x181e50084 ] 2 _dispatch_kq_drain + 107 (libdispatch.dylib + 119068 ) [ 0x181e5011c ] 2 kevent_id + 8 (libsystem_kernel.dylib + 145340 ) [ 0x181fca7bc ] 2 <Kernel mode> 3 _dispatch_workloop_worker_thread$VARIANT$mp + 491 (libdispatch.dylib + 85992 ) [ 0x181e47fe8 ] 2 _dispatch_mach_merge_msg$VARIANT$mp + 0 (libdispatch.dylib + 91668 ) [ 0x181e49614 ] 1 _dispatch_event_loop_merge$VARIANT$mp + 131 (libdispatch.dylib + 119388 ) [ 0x181e5025c ] 1 _dispatch_mach_merge_msg$VARIANT$mp + 127 (libdispatch.dylib + 91796 ) [ 0x181e49694 ] 1 _voucher_create_with_mach_voucher + 219 (libdispatch.dylib + 134296 ) [ 0x181e53c98 ] 1 _os_object_alloc_realized + 39 (libdispatch.dylib + 6872 ) [ 0x181e34ad8 ] 1 class_createInstance + 75 (libobjc.A.dylib + 83920 ) [ 0x1817087d0 ] 1 calloc + 39 (libsystem_malloc.dylib + 16224 ) [ 0x182001f60 ] 1 malloc_zone_calloc + 167 (libsystem_malloc.dylib + 16428 ) [ 0x18200202c ] 1 nano_calloc + 79 (libsystem_malloc.dylib + 76316 ) [ 0x182010a1c ] 1 OSAtomicDequeue$VARIANT$mp + 24 (libsystem_platform.dylib + 26896 ) [ 0x182163910 ] 25 _pthread_start + 291 (libsystem_pthread.dylib + 8464 ) [ 0x182169110 ] 25 _pthread_body + 271 (libsystem_pthread.dylib + 8736 ) [ 0x182169220 ] 22 __NSThread__start__ + 1039 (Foundation + 1150716 ) [ 0x182f8defc ] 21 ??? (LABroadcastUpload + 699360 ) [ 0x10289ebe0 ] 21 ??? (LABroadcastUpload + 579692 ) [ 0x10288186c ] 21 ??? (LABroadcastUpload + 438420 ) [ 0x10285f094 ] 13 ??? (LABroadcastUpload + 340072 ) [ 0x102847068 ] 7 ??? (LABroadcastUpload + 271384 ) [ 0x102836418 ] 4 ??? (LABroadcastUpload + 369892 ) [ 0x10284e4e4 ] 1 <Override Thread QoS Default> 3 ??? (LABroadcastUpload + 369920 ) [ 0x10284e500 ] 1 <Override Thread QoS Default> 6 ??? (LABroadcastUpload + 271460 ) [ 0x102836464 ] 4 ??? (LABroadcastUpload + 369904 ) [ 0x10284e4f0 ] 2 <Kernel mode> 2 <Override Thread QoS Default> 2 ??? (LABroadcastUpload + 369892 ) [ 0x10284e4e4 ] 4 ??? (LABroadcastUpload + 339528 ) [ 0x102846e48 ] 3 ??? (LABroadcastUpload + 339512 ) [ 0x102846e38 ] 1 ??? (LABroadcastUpload + 339516 ) [ 0x102846e3c ] 1 ??? (LABroadcastUpload + 699248 ) [ 0x10289eb70 ] 1 ??? (LABroadcastUpload + 704568 ) [ 0x1028a0038 ] 1 objc_loadWeakRetained + 148 (libobjc.A.dylib + 150444 ) [ 0x181718bac ] 3 ??? (LABroadcastUpload + 8371680 ) [ 0x102fefde0 ] 3 ??? (LABroadcastUpload + 8334892 ) [ 0x102fe6e2c ] 3 ??? (LABroadcastUpload + 8334068 ) [ 0x102fe6af4 ] 3 ??? (LABroadcastUpload + 8390348 ) [ 0x102ff46cc ] 3 ??? (LABroadcastUpload + 8449800 ) [ 0x103002f08 ] 3 ??? (LABroadcastUpload + 8382704 ) [ 0x102ff28f0 ] 3 ??? (LABroadcastUpload + 8386660 ) [ 0x102ff3864 ] 3 - [NSRunLoop runMode:beforeDate:] + 303 (Foundation + 34420 ) [ 0x182e7d674 ] 3 CFRunLoopRunSpecific + 551 (CoreFoundation + 48552 ) [ 0x182408da8 ] 3 __CFRunLoopRun + 1203 (CoreFoundation + 964508 ) [ 0x1824e879c ] 3 __CFRunLoopDoSources0 + 275 (CoreFoundation + 973868 ) [ 0x1824eac2c ] 3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 23 (CoreFoundation + 975876 ) [ 0x1824eb404 ] 3 ??? (LABroadcastUpload + 8383980 ) [ 0x102ff2dec ] 3 ??? (LABroadcastUpload + 8385160 ) [ 0x102ff3288 ] 3 ??? (LABroadcastUpload + 8451264 ) [ 0x1030034c0 ] 3 ??? (LABroadcastUpload + 8450596 ) [ 0x103003224 ] 3 ??? (LABroadcastUpload + 8450400 ) [ 0x103003160 ] 3 ??? (LABroadcastUpload + 8464936 ) [ 0x103006a28 ] 3 ??? (LABroadcastUpload + 8326176 ) [ 0x102fe4c20 ] 2 ??? (LABroadcastUpload + 8629576 ) [ 0x10302ed48 ] 2 ??? (LABroadcastUpload + 8936172 ) [ 0x103079aec ] 2 ??? (LABroadcastUpload + 8964452 ) [ 0x103080964 ] 2 ??? (LABroadcastUpload + 8458888 ) [ 0x103005288 ] 2 ??? (LABroadcastUpload + 8444952 ) [ 0x103001c18 ] 2 <Effective Thread QoS Unspecified, Requested Thread QoS Unspecified> 1 ??? (LABroadcastUpload + 8629644 ) [ 0x10302ed8c ] 1 ??? (LABroadcastUpload + 8363040 ) [ 0x102fedc20 ] 1 free + 0 (libsystem_malloc.dylib + 13756 ) [ 0x1820015bc ] 1 <Effective Thread QoS Unspecified, Requested Thread QoS Unspecified> 7 _pthread_wqthread + 1175 (libsystem_pthread.dylib + 4012 ) [ 0x182167fac ] 7 _dispatch_worker_thread3 + 119 (libdispatch.dylib + 59900 ) [ 0x181e419fc ] 6 _dispatch_root_queue_drain + 923 (libdispatch.dylib + 60924 ) [ 0x181e41dfc ] 6 _dispatch_client_callout + 15 (libdispatch.dylib + 6752 ) [ 0x181e34a60 ] 6 _dispatch_call_block_and_release + 23 (libdispatch.dylib + 6816 ) [ 0x181e34aa0 ] 6 ??? (LABroadcastUpload + 4247616 ) [ 0x102c01040 ] 3 ??? (LABroadcastUpload + 4256256 ) [ 0x102c03200 ] 3 usleep + 63 (libsystem_c.dylib + 53324 ) [ 0x181ee204c ] 2 nanosleep + 211 (libsystem_c.dylib + 53548 ) [ 0x181ee212c ] 2 __semwait_signal + 23 (libsystem_kernel.dylib + 140820 ) [ 0x181fc9614 ] 2 _pthread_exit_if_canceled + 0 (libsystem_pthread.dylib + 7012 ) [ 0x182168b64 ] 1 __semwait_signal + 8 (libsystem_kernel.dylib + 140804 ) [ 0x181fc9604 ] 1 <Kernel mode> 2 ??? (LABroadcastUpload + 4256168 ) [ 0x102c031a8 ] 2 ??? (LABroadcastUpload + 4205132 ) [ 0x102bf6a4c ] 2 ??? (LABroadcastUpload + 11458408 ) [ 0x1032e1768 ] 1 ??? (LABroadcastUpload + 4256300 ) [ 0x102c0322c ] 1 ??? (LABroadcastUpload + 4317016 ) [ 0x102c11f58 ] 1 ??? (LABroadcastUpload + 4316564 ) [ 0x102c11d94 ] 1 ??? (LABroadcastUpload + 8245184 ) [ 0x102fd0fc0 ] 1 ??? (LABroadcastUpload + 8629048 ) [ 0x10302eb38 ] 1 ??? (LABroadcastUpload + 8364372 ) [ 0x102fee154 ] 1 ??? (LABroadcastUpload + 8364204 ) [ 0x102fee0ac ] 1 ??? (LABroadcastUpload + 8402332 ) [ 0x102ff759c ] 1 __psynch_cvwait + 8 (libsystem_kernel.dylib + 139496 ) [ 0x181fc90e8 ] 1 <Kernel mode> 1 _dispatch_root_queue_drain + 587 (libdispatch.dylib + 60588 ) [ 0x181e41cac ] 1 _dispatch_source_invoke$VARIANT$mp + 1363 (libdispatch.dylib + 79748 ) [ 0x181e46784 ] 1 _dispatch_continuation_pop$VARIANT$mp + 423 (libdispatch.dylib + 40596 ) [ 0x181e3ce94 ] 1 _dispatch_client_callout + 15 (libdispatch.dylib + 6752 ) [ 0x181e34a60 ] 1 ??? (LABroadcastUpload + 560800 ) [ 0x10287cea0 ] 1 ??? (LABroadcastUpload + 562864 ) [ 0x10287d6b0 ] 1 ??? (LABroadcastUpload + 599716 ) [ 0x1028866a4 ] 1 ??? (LABroadcastUpload + 615308 ) [ 0x10288a38c ] 1 ??? (LABroadcastUpload + 8300024 ) [ 0x102fde5f8 ] 1 ??? (LABroadcastUpload + 8291616 ) [ 0x102fdc520 ] 1 ??? (LABroadcastUpload + 8296568 ) [ 0x102fdd878 ] 1 ??? (LABroadcastUpload + 8220012 ) [ 0x102fcad6c ] 1 ??? (LABroadcastUpload + 8204516 ) [ 0x102fc70e4 ] 1 ??? (LABroadcastUpload + 8205116 ) [ 0x102fc733c ] 1 SecItemCopyMatching + 339 (Security + 463608 ) [ 0x1831df2f8 ] 1 SecOSStatusWith + 51 (Security + 454740 ) [ 0x1831dd054 ] 1 __SecItemCopyMatching_block_invoke + 119 (Security + 468436 ) [ 0x1831e05d4 ] 1 SecItemAuthDoQuery + 519 (Security + 462564 ) [ 0x1831deee4 ] 1 SecItemAuthDo + 419 (Security + 460160 ) [ 0x1831de580 ] 1 __SecItemAuthDoQuery_block_invoke + 323 (Security + 465572 ) [ 0x1831dfaa4 ] 1 __SecItemCopyMatching_block_invoke_2 + 215 (Security + 468664 ) [ 0x1831e06b8 ] 1 securityd_send_sync_and_do + 79 (Security + 47184 ) [ 0x183179850 ] 1 securityd_message_with_reply_sync + 167 (Security + 46340 ) [ 0x183179504 ] 1 xpc_connection_send_message_with_reply_sync + 195 (libxpc.dylib + 26104 ) [ 0x1821a45f8 ] 1 dispatch_mach_send_with_result_and_wait_for_reply$VARIANT$mp + 55 (libdispatch.dylib + 97580 ) [ 0x181e4ad2c ] 1 _dispatch_mach_send_and_wait_for_reply + 559 (libdispatch.dylib + 96308 ) [ 0x181e4a834 ] 1 mach_msg_trap + 8 (libsystem_kernel.dylib + 3560 ) [ 0x181fa7de8 ] 1 <Kernel mode> Binary Images: 0x1027f4000 - ??? com.tencent.liveassistant.dailybuild.db.broadcastupload 2.10 . 0 ( 2.10 . 0.11 ) < 562B0868 - A0CA - 32D5 - 9E98 - E87676053442> / private / var / containers / Bundle / Application / 62E054DE - ADDD - 4955 - BAA9 - BD4C7A487B7F / LiveAssistant.app / PlugIns / LABroadcastUpload.appex / LABroadcastUpload 0x1816f4000 - 0x181daffff libobjc.A.dylib <EB1135B2 - BDE9 - 3B69 - B96E - 42CA98200183 > / usr / lib / libobjc.A.dylib 0x181e33000 - 0x181e98fff libdispatch.dylib < 0C931AC7 - 6013 - 3DE1 - 87BB - 6F440BEED5EB > / usr / lib / system / libdispatch.dylib 0x181ed5000 - 0x181f52fff libsystem_c.dylib < 61D2E950 - ADD7 - 3139 - AEA4 - 59B55997EA48 > / usr / lib / system / libsystem_c.dylib 0x181fa7000 - 0x181fcffff libsystem_kernel.dylib <E102701E - F880 - 3CD4 - A5D5 - 4F5F14433DBD > / usr / lib / system / libsystem_kernel.dylib 0x181ffe000 - 0x182019fff libsystem_malloc.dylib < 6DD6981A - DEF5 - 30B3 - B606 - 2F29ADE13BB2 > / usr / lib / system / libsystem_malloc.dylib 0x18201a000 - 0x182145fff libsystem_network.dylib < 9EC043D8 - CB25 - 38DC - 9BA8 - 4E324CD5B416 > / usr / lib / system / libsystem_network.dylib 0x18215d000 - 0x182166fff libsystem_platform.dylib < 97DAE109 - BAD6 - 3E58 - 8E5D - 63B8DBDDADCF > / usr / lib / system / libsystem_platform.dylib 0x182167000 - 0x182176fff libsystem_pthread.dylib < 07C87E38 - 74B7 - 3D12 - 8F0F - A331D8894B97> / usr / lib / system / libsystem_pthread.dylib 0x18219e000 - 0x1821c8fff libxpc.dylib < 05E40D46 - 2111 - 3A32 - A4CD - B7AFC770B119> / usr / lib / system / libxpc.dylib 0x1823fd000 - 0x182793fff com.apple.CoreFoundation 6.9 ( 1452.23 ) < 533C841E - D6E9 - 313D - 8ADB - 02388744E2EF > / System / Library / Frameworks / CoreFoundation.framework / CoreFoundation 0x1827a6000 - 0x18282afff com.apple.framework.IOKit 2.0 . 2 < 54433B44 - 779D - 3937 - 8D07 - 89A4017A2948 > / System / Library / Frameworks / IOKit.framework / Versions / A / IOKit 0x182ac6000 - 0x182e74fff com.apple.CFNetwork 902.2 ( 902.2 ) <CE119938 - B410 - 382B - B448 - 1E599405EF23 > / System / Library / Frameworks / CFNetwork.framework / CFNetwork 0x182e75000 - 0x18316dfff com.apple.Foundation 6.9 ( 1452.23 ) < 2EACEF3C - B1E5 - 323E - AC1A - 2E0D743C81A5 > / System / Library / Frameworks / Foundation.framework / Foundation 0x18316e000 - 0x18326ffff com.apple.Security 10.0 ( 58286.70 . 7 ) <B4A51FC3 - CB16 - 3F7B - 8786 - D8D37B56E515> / System / Library / Frameworks / Security.framework / Security 0x1835c8000 - 0x183624fff libusrtcp.dylib <BA4A0D2E - 24DD - 3EA0 - A930 - 7B03598564CC > / usr / lib / libusrtcp.dylib 0x183625000 - 0x18362ffff com.apple.IOSurface 211.14 ( 211.14 ) < 1F24B805 - 6501 - 3F8D - 94B5 - E18C144F24BC> / System / Library / Frameworks / IOSurface.framework / IOSurface 0x1855e5000 - 0x18560efff com.apple.CoreVideo 1.8 ( 0.0 ) < 6F568461 - BB21 - 3003 - BCF5 - 26D9D4EB20AF > / System / Library / Frameworks / CoreVideo.framework / CoreVideo 0x1857b1000 - 0x185936fff com.apple.CoreMedia 1.0 ( 2276.71 . 2 ) < 784A7889 - 8519 - 3F92 - BCBF - 5170378405FC > / System / Library / Frameworks / CoreMedia.framework / CoreMedia 0x185cc3000 - 0x185d7afff com.apple.VideoToolbox 1.0 ( 2276.71 . 2 ) <C99ED6C9 - 2850 - 3FD6 - 9ECF - 34BA2BAECE4E > / System / Library / Frameworks / VideoToolbox.framework / VideoToolbox 0x186070000 - 0x1865a8fff com.apple.audio.toolbox.AudioToolbox 1.8 ( 1.8 ) < 082E0192 - 9022 - 3EDF - 99B1 - D4FF195F9276> / System / Library / Frameworks / AudioToolbox.framework / AudioToolbox 0x19e0d1000 - 0x19e0f5fff com.apple.ReplayKit 1.0 ( 1 ) < 9B0FE0DA - 9DDA - 3347 - 9586 - 717BC1304DFE > / System / Library / Frameworks / ReplayKit.framework / ReplayKit 0x1a2b22000 - 0x1a2f60fff AudioCodecs < 1BA749E0 - 2C9E - 3C99 - 94C3 - 9295C0688017 > / System / Library / Frameworks / AudioToolbox.framework / AudioCodecs |
二、问题分析
对于内存问题,目前尚无好的解决办法,苹果似乎在系统升级之后会调高限制的大小值,但是不多,不能解决根本问题。
本文主要对wakeups这个错误,CPU使用过多进行分析
1)苹果为什么要针对后台进程做这个限制?
过多的线程调度意味着繁忙得使用CPU,在移动设备上,频繁使用CPU将导致耗电量增大,电量消耗过快影响整个手机的使用。
2)是否能通过配置修改
目前查询到的信息是无法修改,已经在苹果的开发者论坛提交了一个反馈:
https://forums.developer.apple.com/message/332006#332006
3)线程切换是怎样造成的。
线程切换可能由于系统中断(系统调用带来)、主动的线程调度带来(sleep函数)带来。
这是之前的一份wakeup的记录,显示NSLog 和 stringwithformate 会带来线程切换。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Powerstats for : LABroadcastUploa [ 1557 ] UUID: F91308C6 - C89C - 3571 - 94C0 - BBE49DFB2013 Start time: 2017 - 09 - 29 12 : 18 : 04 + 0800 End time: 2017 - 09 - 29 12 : 18 : 31 + 0800 Microstackshots: 46 samples ( 100 % ) Primary state: 30 samples Frontmost App, User mode, Effective Thread QoS Default, Requested Thread QoS Default, Override Thread QoS Unspecified User Activity: 0 samples Idle, 46 samples Active Power Source: 0 samples on Battery, 46 samples on AC 33 _pthread_start + 311 (libsystem_pthread.dylib + 8696 ) [ 0x18618c1f8 ] 33 _pthread_body + 307 (libsystem_pthread.dylib + 9004 ) [ 0x18618c32c ] 15 __NSThread__start__ + 995 (Foundation + 1103968 ) [ 0x186f4f860 ] 5 - [LAAudioMix mixAudioLoop:] (LAAudioMix.m: 174 in LABroadcastUpload + 276808 ) [ 0x10264f948 ] 4 - [LAUploadManager pushCustomPCMData: len :] (LAUploadManager.m: 164 in LABroadcastUpload + 157864 ) [ 0x1026328a8 ] 4 - [LAExLogger addOneLog:inFile:function:line:module:message:] (LAExLogger.m: 115 in LABroadcastUpload + 77892 ) [ 0x10261f044 ] 2 - [LAExLogger addOneLog:inFile:function:line:module:fullMessage:] (LAExLogger.m: 143 in LABroadcastUpload + 78616 ) [ 0x10261f318 ] 2 + [NSString stringWithFormat:] + 67 (Foundation + 10420 ) [ 0x186e448b4 ] 2 _CFStringCreateWithFormatAndArgumentsAux2 + 131 (CoreFoundation + 1054296 ) [ 0x18651f658 ] 2 __CFStringAppendFormatCore + 9436 (CoreFoundation + 1048212 ) [ 0x18651de94 ] 2 - [LAExLogger addOneLog:inFile:function:line:module:fullMessage:] (LAExLogger.m: 161 in LABroadcastUpload + 78664 ) [ 0x10261f348 ] 2 NSLog + 31 (Foundation + 73876 ) [ 0x186e54094 ] 2 _NSLogv + 127 (Foundation + 972068 ) [ 0x186f2f524 ] 2 _CFLogvEx3 + 227 (CoreFoundation + 1239416 ) [ 0x18654c978 ] 2 __proc_info + 8 (libsystem_kernel.dylib + 135252 ) [ 0x186079054 ] 2 <Kernel mode> |
NSLog可能比较好理解一点,因为NSLog不仅仅将log输出到控制台,还会将log输出(通过Socket)到远程的Console端口,Mac上的Console App能收到手机的Log就是这个原因。
根据glibc系统调用列表,socket中的操作都会走到系统调用中
对于stringWithFormate而言,格式化输出了一个字符串,也很可能走到malloc的系统调用中,这里猜测一下:
为了验证猜测,编写测试代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class ViewController : UIViewController { override func viewDidLoad () { super . viewDidLoad () DispatchQueue . main . async { var i = 0 ; while ( true ) { String . init ( format : "%dsadsdsd" , i ) i = i + 1 } } } } |
代码比较简单,其中有一个Swift的字符串的格式化。其内部的实现会走到 __CFStringAppendFormatCore 方法中,这个和OC 这边的格式化方法是一致的。
上面的堆栈也能清楚看出来。
为了验证猜测,我下一个malloc的符号断点:
然后跑一下程序,果然断下来了
果然调用到了malloc,说明格式化字符串会产生内存分配的系统调用,从而导致线程切换。
4)优化方向
观察我们的助手log的输出,1s之内输出了一百多条的log
由此找到了一个方方向,减少输出log的系统调用。
5)优化
待完成
三、附录
1)系统调用列表:https://www.ibm.com/developerworks/cn/linux/kernel/syscall/part1/appendix.html
2)malloc 原理 http://legendtkl.com/2017/03/21/malloc-os-knowledge/
3)上一篇wakeups https://www.cnblogs.com/doudouyoutang/p/7610982.html
4)https://stackoverflow.com/questions/45511944/ios-how-to-measure-thread-wakeups
5)https://forums.developer.apple.com/message/332006#332006
6)https://www.theiphonewiki.com/wiki/Kernel_Syscalls
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库