【问题标题】:iOS app being killed (jettisoned) by mediaserverd memory issue (leak?) while streaming videoiOS 应用程序在流式传输视频时被 mediaserverd 内存问题(泄漏?)杀死(抛弃)
【发布时间】:2012-08-04 18:44:50
【问题描述】:

我们看到一个奇怪的崩溃,其中似乎 iOS 在收到 2 级内存警告后丢弃了我们的应用程序和 mediaserverd。它发生在播放 DRM 内容(包括但不限于 PlayReady 加密内容)大约 7-8 分钟后,即使我们在后台没有运行其他应用程序的情况下重新启动设备。然而,这种情况并非始终如一,我们有时可以在后台使用大量内存密集型应用程序完成相同的内容(整整 2 小时的电影),而不会出现任何问题。

我们在运行 iOS 5.1 和 5.1.1 的 iPhone 3GS、4 和 4S 设备上看到了这一点,尽管它似乎在 3GS 上最为突出。应用程序以“segmentation fault 11”或“signal 9”终止。分段错误 11 可以指内存访问错误或内存不足,信号 9 指内存不足终止。

我们已经使用静态分析仪和仪器来查找和修复任何泄漏,并且泄漏仪器中没有显示任何警报。

在使用 Memory Monitor 工具分析回放时,我们发现在开始流式传输时可用物理内存急剧减少,这在一定程度上是可以预料的。当应用程序/操作系统正常运行时,其他应用程序会在内存变得太低时从后台删除,但偶尔可用的物理内存会继续下降,直到操作系统杀死我们的应用程序。尽管我们偶尔会收到内存不足的日志,但不会生成崩溃日志,如下所示:

Incident Identifier: 13839D5B-D280-40D8-8C67-6EE3D61394C3
CrashReporter Key:   d3746ff556543d6a94e067d82c8fb379a285f543
Hardware Model:      iPhone2,1
OS Version:          iPhone OS 5.1.1 (9B206)
Kernel Version:      Darwin Kernel Version 11.0.0: Sun Apr  8 21:50:49 PDT
2012; root:xnu-1878.11.10~1/RELEASE_ARM_S5L8920X
Date:                2012-06-28 14:09:56 -0400
Time since snapshot: 104 ms

Free pages:        712
Active pages:      1433
Inactive pages:    1012
Throttled pages:   49925
Purgeable pages:   0
Wired pages:       11870
Largest process:   SpringBoard

Processes
         Name                 UUID                    Count resident pages
         launchd <5fec01c378a030a8bd23062689abb07f>      79
securekeyvaultd. <78f602d3604c3bf487a27a288dec3bbb>     156
           MYAPP <285e46965a91381dad0661443c8be3eb>    4035 (jettisoned) (active)
     MobilePhone <8f3f3e982d9235acbff1e33881b0eb13>     749 (jettisoned)
    mediaserverd <f03b746f09293fd39a6079c135e7ed00>    3670 (jettisoned)
        networkd <80ba40030462385085b5b7e47601d48d>     145
            apsd <e7a29f2034083510b5439c0fb5de7ef1>     260
     SpringBoard <c74dc89dec1c3392b3f7ac891869644a>    4615 (active)
         notifyd <f6a9aa19d33c3962aad3a77571017958>     170
        BTServer <31e82dfa7ccd364fb8fcc650f6194790>     259
CommCenterClassi <041d4491826e3c6b911943eddf6aaac9>     421
      aggregated <a12fa71e6997362c83e0c23d8b4eb5b7>     329
         configd <ee72b01d85c33a24b3548fa40fbe519c>     324
   fairplayd.N88 <ecb9495b29543b35a1f2e6c2b432528c>     168
       fseventsd <914b28fa8f8a362fabcc47294380c81c>     164
            iapd <0a747292a113307abb17216274976be5>     284
         imagent <9c3a4f75d1303349a53fc6555ea25cd7>     412
       locationd <cf31b0cddd2d3791a2bfcd6033c99045>     493
   mDNSResponder <86ccd4633a6c3c7caf44f51ce4aca96d>     182
    mediaremoted <327f00bfc10b3820b4a74b9666b0c758>     208
       lockdownd <b06de06b9f6939d3afc607b968841ab9>     315
          powerd <133b7397f5603cf8bef209d4172d6c39>     143
         syslogd <7153b590e0353520a19b74a14654eaaa>      90
           wifid <3001cd0a61fe357d95f170247e5458f5>     285
  UserEventAgent <dc32e6824fd33bf189b266102751314f>     322
         launchd <5fec01c378a030a8bd23062689abb07f>     120

End

根据我在这里看到的一些较早的问题,似乎 mediaserverd 在以前的 iOS 版本中存在严重的内存泄漏问题。

这可能与问题有关吗?

我们如何防止这种情况发生?

任何想法、理论、反馈或类似问题都将不胜感激!

【问题讨论】:

  • 现在也在 iPad 3 中发生。你有机会修复它吗?还是在框架级别?
  • Per Skrew 在下面的评论中,我们查看了我们的观察者并确保我们将它们全部删除。似乎从我们这边解决了这个问题。

标签: iphone ios memory-leaks video-streaming drm


【解决方案1】:

这只是瞎猜,你用的不是AVFoundation的AVPlayer吗? 我遇到了这样的问题,结果证明我没有正确发布 AVPlayers。所以对于每首歌我都创建了一个新的 AVPlayer,如果你发布旧的,这很好,但我没有。 我通过在 Instruments 中进行分配测试发现了这一点,并且看到 AVPlayer 在它们应该被释放后仍然存在。

【讨论】:

  • 是的,我们使用的是 AVPlayer,但应用程序使用的是 ARC。此时发布是否仍然是一个问题?
  • 我只能猜测,因为我的项目不使用 arc,但是当不再需要播放器时,您是否“无分配”? myPlayer=nil 或者当它不再需要时你没有观察者吗?
  • 我遇到了完全相同的问题。我有多个 AVPlayer。当我释放 viewController 的显示它们时,我看到 mediaserverd 仍在消耗内存,并且总物理内存仍在下降。
  • 不确定,不管你是否使用它,但请注意,如果你在播放器(或 timedObserver)上有观察者,它将不会被释放。我也有这个问题。
  • 是的,这最终成为了问题。我在看到您的消息之前就想通了,但这正是问题所在!
猜你喜欢
  • 2015-07-07
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 2014-05-22
  • 2012-08-26
  • 2012-05-12
  • 1970-01-01
  • 2014-06-16
相关资源
最近更新 更多