【问题标题】:How to analyze stack trace info of a thread?如何分析线程的堆栈跟踪信息?
【发布时间】:2017-11-02 09:04:16
【问题描述】:

我正在尝试监控我的应用的性能;

当 cpu 使用过载时,我将可疑线程和主线程的堆栈跟踪转储为两个库的字符串: https://github.com/bestswifter/BSBacktraceLogger https://github.com/plausiblelabs/plcrashreporter

以下是我记录的一个线程的堆栈跟踪,但它不能帮助我分析和定位性能问题所在。

我做错了还是如何分析线程的堆栈跟踪?

【问题讨论】:

  • 你试过 Instruments 吗?developer.apple.com/library/content/documentation/…。 Apple 的指南内容丰富,可能也可以解决您的问题。
  • @YashBedi,是的;但是instrument不能帮助live app;所以我以编程方式监控 CPU/GPU/内存并转储堆栈跟踪
  • 这两个堆栈都用于主线程。并且在捕获点它正在等待处理运行循环中的下一个项目。
  • @YashBedi 是的;下一步有什么建议吗?我已经可以监控哪个线程正在吃cpu/gpu/memory,但是下一步我需要找出它为什么使用这么多,我的想法是通过捕获可疑线程的回溯,然后对其进行分析,但似乎我上面的回溯在屏幕截图中无法帮我定位问题
  • 是的,你没有得到那个可疑线程的信息..

标签: ios performance stack-trace monitor


【解决方案1】:

好的!我有点明白你的问题。你的应用是关于什么的?我的意思是它是一个游戏还是什么的。有了这些信息,我将为您提供一些解决方法,

  • 我建议您彻底研究代码并取消初始化所有未使用的资源。
  • 检查您正在使用多少静态属性和全局变量/属性,并问自己是否需要它们?
  • 此外,我再次建议您使用 Instruments 监控您的应用程序,在内存条变高和变低时非常精确 [例如通过打开什么 ViewController 它会吃很多东西,通过关闭什么 ViewController 内存条会下降,您的应用程序是否依赖 GPS,因为在像 uber 这样的大型应用程序中,它们不会更新 didUpdateLocations 上的位置,而是使用其他方法,例如单例/计时器/心跳等,]
  • 另外,如果您想避免所有这些手动工作,请选择 NewRelic

一个小教程:link

再次发布以获取更多信息,很乐意提供帮助。 =)


这里有一些链接:通过将它们与 firebase 结合使用,您还可以查看事件和日志, 这是第一个 -> watchdog

这是第二个 1 -> Prints the filename, function name, line number and textual..etc..

现在将其中任何一个与 firebase 结合起来,它会直接将日志发送给您。

【讨论】:

  • 谢谢这么多的人;我的app是新闻类app,DAU大概100万;但是,我需要再次澄清一下,我们的开发人员在调试时已经使用了工具;但是现在我们要监控的是用户手机上实时应用程序的性能,它不能使用仪器.....所以我试图以编程方式获取所有线程的回溯
  • 欢迎您,伙计!在这种情况下尝试 newRelic 会解决问题。
  • 事实上,就目前而言,我已经可以通过编程方式监控应用程序的性能;但是我需要定位性能问题并解决它,您知道还有其他可以获取堆栈跟踪的好的 iOS 库吗?
  • cocoawithlove.com/blog/2016/02/28/stack-traces-in-swift.html 如果这不起作用,请阅读更新后的答案
  • 谢谢这么多的人,会检查你的建议并让你更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多