跟踪 iOS 分配时,Apple Instruments 停止工作
Apple Instruments stops working when tracing iOS allocations
我正在使用 Instruments 的 Allocations 工具检查 Xamarin iOS 应用程序的内存使用情况。
我遇到 Instruments 不久后停止接收任何分配数据的问题。当问题被触发时,我没有看到内存使用、cpu 使用、时间或位置在应用程序中的任何模式,但大多数情况下它会在大约 12 秒后停止工作。
似乎在设备停止工作的同时在设备日志中记录了以下内容:
kernel[0] <Notice>: Sandbox: SalesApp(2291) deny(1) process-info-pidinfo 1530
kernel[0] <Notice>: Sandbox: SalesApp(2291) deny(1) sysctl-read kern.proc.pid.1530
可能是什么问题?
每次它停止时我都可以停止录制蚂蚁重新启动它并再次运行一段时间。
我已尝试重新启动一切,但行为没有任何变化。 我知道我去年 12 月遇到过这个问题,但后来在 Xcode、iOS、OS X 的不同版本上,Xamarin Studio 和我遇到了不同的 iPad.
当前版本:
- iOS:9 测试版 5 (13A4325c)
- OS X: Yosemite (10.10.5 (14F27))
- Xcode/Instruments: 6.4 (6E35b)
- Xamarin Studio:5.9.5(内部版本 10)
- 部署目标:7.0
Instruments 的屏幕截图,记录在 7 秒后立即停止:
这是 known issue GC 和 Instruments 之间的不幸交互导致进程死锁。
您可以拍摄一些(广角)照片来尝试让它发挥作用:
通过在 FinishedLaunching 方法中执行此操作,在主线程上频繁触发 GC:
NSTimer.CreateRepeatingScheduledTimer(0.5, (v) => GC.Collect());
尝试分配更少的内存,使 GC 触发的频率降低(我知道这是你首先要尝试做的)
尝试只在主线程上做一些事情。当 Instruments 在一个线程上报告分配,而 GC 在另一个线程上 运行 时,就会发生死锁。如果您只在一个线程上工作,则不会发生死锁。
它通常是随机的,所以有时你可能会走运并且它不会死锁。 IOW再试一次。
我正在使用 Instruments 的 Allocations 工具检查 Xamarin iOS 应用程序的内存使用情况。
我遇到 Instruments 不久后停止接收任何分配数据的问题。当问题被触发时,我没有看到内存使用、cpu 使用、时间或位置在应用程序中的任何模式,但大多数情况下它会在大约 12 秒后停止工作。
似乎在设备停止工作的同时在设备日志中记录了以下内容:
kernel[0] <Notice>: Sandbox: SalesApp(2291) deny(1) process-info-pidinfo 1530
kernel[0] <Notice>: Sandbox: SalesApp(2291) deny(1) sysctl-read kern.proc.pid.1530
可能是什么问题?
每次它停止时我都可以停止录制蚂蚁重新启动它并再次运行一段时间。
我已尝试重新启动一切,但行为没有任何变化。 我知道我去年 12 月遇到过这个问题,但后来在 Xcode、iOS、OS X 的不同版本上,Xamarin Studio 和我遇到了不同的 iPad.
当前版本:
- iOS:9 测试版 5 (13A4325c)
- OS X: Yosemite (10.10.5 (14F27))
- Xcode/Instruments: 6.4 (6E35b)
- Xamarin Studio:5.9.5(内部版本 10)
- 部署目标:7.0
Instruments 的屏幕截图,记录在 7 秒后立即停止:
这是 known issue GC 和 Instruments 之间的不幸交互导致进程死锁。
您可以拍摄一些(广角)照片来尝试让它发挥作用:
通过在 FinishedLaunching 方法中执行此操作,在主线程上频繁触发 GC:
NSTimer.CreateRepeatingScheduledTimer(0.5, (v) => GC.Collect());
尝试分配更少的内存,使 GC 触发的频率降低(我知道这是你首先要尝试做的)
尝试只在主线程上做一些事情。当 Instruments 在一个线程上报告分配,而 GC 在另一个线程上 运行 时,就会发生死锁。如果您只在一个线程上工作,则不会发生死锁。
它通常是随机的,所以有时你可能会走运并且它不会死锁。 IOW再试一次。