4

長い投稿で申し訳ありません...私はかなり冗長になる癖があります。:-P

iOS アプリに奇妙な問題があり、ユーザーから数か月前から報告されています。私はそれを数回調べましたが、それで障害にぶつかり続けています。アプリは投棄されていますが、投棄された時点でメモリをあまり使用していないようです。たとえば、ユーザーからの 1 つのログを次に示します (アプリ名と識別子が変更されています)。

Incident Identifier: OMIT
CrashReporter Key:   OMIT
Hardware Model:      iPhone2,1
OS Version:          iPhone OS 4.3.5 (8L1)
Kernel Version:      Darwin Kernel Version 11.0.0: Sat Jul  9 00:54:20 PDT 2011; root:xnu-1735.47~1/RELEASE_ARM_S5L8920X
Date:                2011-10-01 09:50:03 +0100
Time since snapshot: 41 ms

Free pages:        710
Wired pages:       10076
Purgeable pages:   416
Largest process:   SpringBoard

Processes
         Name                 UUID                    Count resident pages
          MY_APP <f01c118296fe329899981e37e00c6cc3>    2258 (jettisoned) (active)
MobileMusicPlaye <c26fcc882cf130f09979f9ca08521fce>    1024 (jettisoned)
     MobilePhone <d3042adf269630daa58e43d0ba5eeb54>     649 (jettisoned)
      MobileMail <573ff3a3e09334c7aa51d8568c845e11>     716 (jettisoned)
             lsd <3fafa485b73836acb973d50feabd963a>     148
         notifyd <9966082842de313a8e05a001c783faf4>     117
        BTServer <01550e9527353eecae41ebee0f889603>     182
      CommCenter <7d9446365b4836968ae361626ef8f939>     440
     SpringBoard <5c55c6fba0843b0e924e116413b8c9d4>    3305 (active)
      accessoryd <d30e340e36df356bbde3347a6ed1ef87>     160 (jettisoned)
            apsd <47ffc9ce9f84371588bd3f937aaa20bb>     278
         configd <a6d457fca42732d9ba809d03a2b3e3ae>     427
   fairplayd.N88 <46c1d3fbe93a370089f783f96a5cf531>     177
       locationd <9088e845dcbe37d890c8758655bf34c6>    1065
   mDNSResponder <caf94711b8093dc5bc5736306f8ae818>     200
    mediaremoted <21af791e80823c9f90f0be2b77a3d885>     251
    mediaserverd <c731263114c33a07aef7bccdcf667271>    1512
       lockdownd <1c7f2b41744c35dc92f679e90a73e240>     278
         syslogd <d81669e7bdb93f9b9012020beac826f4>      99
usbethernetshari <25130d2f9a0334e3ae28780250343144>     110
         launchd <e2d41e07a0743a089eadbae765709c82>      88

**End**

これは 3GS デバイスからのもので、私が見た LowMemory ログからはあまり実行されていません (13484 ページ...約 55MB?)。私たちのアプリは 2 番目に大きいですが、9.3MB のレジデントはほとんど巨大ではありません。また、影響を受けるユーザーの約 15 分間の使用後に一貫して発生します (ただし、影響を受けるユーザーのリストは非常に小さいです)。

ログで明らかなように、報告されたときと同じように、アプリはアクティブでした (電話は上部がロックされていました)。放棄される前にメモリ不足の警告を受け取り、すべてのビューで viewDidUnload と didReceiveMemoryWarning を適切に実装します。9.3MB は通常のフットプリントである約 12MB よりも小さいため、メモリも解放しているように見えます。また、Apple のガイドラインに従ってトップロックされている間、アプリはビューを更新しません (それは良い考えだからです. :-P)。私たちは大量のデータをメモリに保存しているわけではありません...ほとんどのデータは DB に置かれ、必要なときにのみ取得されてから解放されます。UI 画像にはおそらく何よりも多くのメモリを使用します (読み込まれたビューの viewDidUnload で解放する必要があります)。

リークを伴う大規模なメモリ テストと、VM 統計と割り当てによるメモリ使用量のチェックから、メモリ リークも過度に高いメモリ スパイクや使用量もないと確信しています (少なくとも、私がテストした 3G および 3GS デバイスでは)。また、ダーティ メモリ サイズが過度に大きいようにも見えません (通常、追跡中は約 11 MB、常駐の合計は 12 MB です)。メモリ不足のログはこれを反映しています。そして、私は偏執狂なので、次の議論に触発されたメモリ ログを使用してユーザーに実行してもらいました: iPhone アプリは 150 MB のメモリを使用していますが、メモリ不足の警告はまだありません! . ロギングは、メモリ使用量が少ないことを裏付けているようです (アプリ常駐メモリは、上記の投棄の直前に 9,773,056 バイトと報告されました)。仮想サイズは大きい (342,740,992) ですが、仮想です。:-P

これはごく一部のユーザーにのみ影響し、3GS デバイスで報告されているのを見たことがあります (iOS 4.x...バージョンはさまざまですが、4.2 から始まっているようです)。また、影響を受けるユーザーの場合、約 15 分後に一貫して発生します。

問題の原因となる奇妙な動作がある場合に備えて報告された後、ユーザーに最も単純なユース ケースでアプリを使用してもらいましたが、それでも発生します。これは、ユーザーの電話に何らかの問題があると私に信じさせますが、何か指摘するものがなければそれが問題である可能性があると彼らに言うのは好きではありません. 3GS または 3G テスト デバイスで再現できません。

通常の原因 (ダーティ メモリ使用量の増加、メモリ リークなど) のいずれにも該当しないようです。助言がありますか?または、少なくともさらに調査を試みるために私が取ることができる道はありますか? :-P

4

2 に答える 2

2

LLVM3の使用に切り替えた後(バニラgccはiOS 5でサポートされていないため)、この問題は解消されたようです。アップデートでマイナーなコード変更もあり、LLVM3の静的アナライザーはgccでもリークでも検出されなかったいくつかの小さなメモリリークも検出したので、問題がgcc(iOSの場合)固有であると断定できません。しかし、LLVM 3に切り替えることで、より優れた静的分析を通じて直接的または間接的に問題が解決したようです。:-P

これが他の誰かに役立つことを願っています。

于 2012-01-04T16:00:49.307 に答える
0

ロングショット、どのような最適化を使用していますか? 数学の精度に影響を与える何かが違いを生む可能性があります。たとえば、高速数学などです。これは、malloc mem cal のどこかに float があるとしたら、メモリに影響を与える可能性があります。

私が言ったように、ロングショット...

于 2011-11-09T21:25:49.247 に答える