14 | 答疑(二):如何用perf工具分析Java程序?
该思维导图由 AI 生成,仅供参考
问题 1: 使用 perf 工具时,看到的是 16 进制地址而不是函数名
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何使用perf工具来分析Java程序的方法。作者首先解答了使用perf工具时看到的是16进制地址而不是函数名的问题,并提出了四种解决方法。其次,文章延伸讨论了如何用perf工具分析Java程序,指出了需要生成符号表和开启JDK选项来生成全部调用栈。作者强调了学习性能优化时不应该局限于具体的编程语言或性能工具,而是要掌握整体的分析思路。此外,文章还介绍了如何理解perf report报告以及推荐了一本经典的性能优化书籍。整体而言,本文内容涉及到了perf工具的使用方法和性能优化的思路,对于需要了解如何使用perf工具分析Java程序的读者具有一定的参考价值。
《Linux 性能优化实战》,新⼈⾸单¥68
全部留言(67)
- 最新
- 精选
- 我来也[D14打卡] 很赞同老师的观点: "任何东西的第一遍学习有不懂的地方很正常,忍住恐惧别放弃,继续往后走,前面很多问题可能会一并解决掉 ,再看第二遍、第三遍就更轻松了。" 我好像很早就这样实践了: 第一遍不管看不看得懂,先尽量细看. 再特意过一段时间回头重新学一遍,除了能掌握更多的东西,还能体会到"温故而知新"的感觉. ---------------------------- 现在就是"师傅领进门,修行看个人." "先从最基本的原理开始,掌握性能分析的思路,然后再逐步深入,探究细节" ---------------------------- 自从学了专栏,越来越觉得自己的<英语>该好好补补了,深感能力不足啊. 那么多好的资源,一手资料几乎都是英文的,看不懂真是可惜了!
作者回复: 英语也是基本要求,多读多看就熟悉了😊
2018-12-2119 - ninuxer打卡day15 perf report中关于swapper的内容,后面我也去查了,才发现是自己理解有误,感谢老师指出,这里的swapper不是内存概念的swap,而是cpu空闲时执行的一个默认调用 要啃啃《性能之巅:洞悉系统、企业与云计算》了,作者博客http://www.brendangregg.com/ 请教老师,理解内核这块,有合适的书推荐么?我查了下,看了下目录,感觉《Linux内核设计与实现》可能比较适合,其他的如《Linux内核情景分析》,《深入理解Linux内核》怎么样?
作者回复: 《深入Linux内核架构》挺不错,不过是本大块头,啃下应该要花不少时间
2018-12-21213 - 辉晖对于问题1,使用方法4还是看不到函数名,只能看到一些 16 进制格式的函数地址 在载入perf.data过程不断出现提示:Failed to open ***, continuing without symbols 载入完成后,perf 界面最下面的那一行警告信息是:Cannot load tips.txt file, please install perf!
作者回复: Failed to open ***, continuing without symbols 说明还是无法找到相应的符号表,根据警告提示逐个安装应该就可以了
2019-06-272 - 子轩Zixuan趁周末跟上了老师的脚步,老师讲解的很好,感谢!另外我注意到老师在专栏里的实例都是现场调试,但是我遇到过实际情况需要尽快恢复服务,先把代码还原重新发布保证服务可用,只留下一台保留问题现场的机器,但是已经不接受请求了,像这种情况除了事先监控以外,还有别的方案能定位问题吗?
作者回复: 是的,线上问题要优先恢复,排查不能花过多时间,所以很多情况下都要靠监控系统了解当时的状况。除此之外,原来服务还在的话,可以试试能否重现问题,比如模拟当时的请求;或者也可以从日志中寻找线索。
2018-12-232 - Griffin终于赶上了,倪老师能不能讲讲网络问题应该怎么排查呀,最近老是被docker,docker swarm的container寻址困扰。
作者回复: 不要急,我们有网络模块的
2018-12-232 - 郡主秋老师,我的在centos7上用perf分析宿主机上的应用也是显示16进制地址,没有函数名 ,这种怎么处理呢
作者回复: perf 界面应该有缺少符号的提示吧?按照提示安装缺少的调试信息
2019-07-1821 - 辣椒老师,我把perf.data拷贝进容器,然后在容器中按照提示安装了perf, 再执行perf_4.9 report时报以下信息: Kernel address maps (/proc/{kallsyms,modules}) were restricted. Check /proc/sys/kernel/kptr_restrict before running 'perf record' As no suitable kallsyms nor vmlinux was found, kernel samples can't be resolved. Samples in kernel modules can't be resolved as well. xPress any key... 我本身的机器是centos7.2. 请老师提示一下解决的思路,谢谢!
作者回复: echo 0> /proc/sys/kernel/kptr_restrict
2019-01-071 - 子轩Zixuan感谢老师耐心回复,接着线上定位问题想问下,如果要事先做好监控系统,一般需要做到什么程度?目前只有阿里云的监控感觉不够用
作者回复: 对的,至少要从系统和应用两个层面监控。系统层面就是我们专栏里提到的系统资源使用情况;应用层面除了进程的资源监控之外,还有应用对外的接口、与其他服务间调用、数据库、应用内部功能模块等一系列的metrics(可以参考APM)
2018-12-251 - 无名老卒全部刷完了,把各个CPU容易出现问题的情况基本上都写清楚了,而且都有详细的测试用例,除了软中断那个需要SYN攻击之外,其他的测试用例都一五一十的都做过了,受益良多。我有以下疑问,希望老师可以解答下: 1、软中断老师是用SYN攻击的方式来讲解这部分的实例的,那还有没有其他典型的软中断的案例呢? 2、硬中断的实例老师没有讲,可以补一篇吗? 3、老师所讲的实例,都是单一模式的,在实际的生产环境下,情况要复杂很多,老师能再讲一下印象最深刻的实际情况吗? 另外,我有一个小建议,老师的案例都是用docker来搭建环境的,在一个用例要多次下载不同的image,但其实这些image只是里面的测试用例变了,所以可以先下载file文件,使用docker -v挂载的方式进行测试。这样可以大大减少下载镜像的时间。如下,就是使用docker run -v /usr/local/src/app-fix2:/app --privileged --name app-fix -d feisky/app:iowait 来运行的镜像。 ``` [root@linjx src]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0ecb229f87e4 feisky/app:iowait "/app" 3 minutes ago Up 3 minutes app-fix a251996e0d60 feisky/app:iowait "/app" 5 hours ago Exited (137) 20 minutes ago app ```
作者回复: 1. 网络后面还会讲 2. 硬中断的原理其实差不太多,所以没有单独拎出来 3. 现在单个模块的案例的确不太复杂,这也是为了让大家都能更直观理解这些问题 关于image下载,其实可以使用国内的镜像加速,网络搜索找到。并且基础镜像一样的话,也只需要下载新的layer即可。 最后,你的容器推退出了,请参考github设置启动参数解决。
2018-12-231 - geraltlaush老师,有个问题,如果iowait过高,导致系统卡死,ssh几乎操作不动,怎么快速找出进程杀掉,iotop敲了20分钟没响应
作者回复: 这种情况没法SSH操作,只能靠监控系统了,一定要把这些性能指标监控起来
2018-12-221