通常我们使用jmap,jstack 去检查堆栈信息的时候,是不会使用-f参数的,但有的时候系统在无法打印出堆栈信息的时候,会建议你使用参数-F。
关于-F参数与非-F参数的区别笔者已经在前面的博客中讲述(http://blog.csdn.net/raintungli/article/details/7023092),简单的说也就是一种是让jvm进程自己打印出堆栈信息,另有一种是直接访问jvm的堆栈区通过固定的结构找出我们需要的信息。
1. Linux-F参数的实现
在linux中可以使用ptrace的系统调用去访问运行中的进程的内存信息,具体如何实现可以参考笔者的博客(http://blog.csdn.net/raintungli/article/details/6563867)
在java中使用动态加载的方式加载jvm自己的链接共享库,jvm的核心链接共享库是libjvm.so,linux中如何动态加载可以参考(http://www.ibm.com/developerworks/cn/linux/l-dynamic-libraries/#dynamiclinking)
因为是动态共享库,当想查找具体的参数的值,内存的信息的时候,就需要计算出正确的参数或者函数的地址。
2. 共享库中的符号相对地址偏移
可运行程序,共享库使用ELF格式,当运行一个程序的时候,内核会把ELF加载到用户空间,里面记录了程序的函数和数据的地址和内容,elf文件格式就不具体描述了。
在linux 中可以使用结构体ELF_EHDR,ELF_PHDR,ELF_SHDR读出elf 的program header, section header, section data.
在jvm中源码具体实现请参考 /hotspot/agent/os/linux/salibelf.c
在linux中本身就自带一个读取elf格式的工具,readelf 你可以使用不同的参数读取不同的内容。
显示共享库中的方法参数的虚拟地址,类型,名字
读取program headers,其中出现2个LOAD的类型,第一个是程序的指令虚拟的起始地址,另一个是程序数据的起始地址
通过2个地址我们就能找到共享库中的参数,函数的相对地址的偏移
3. 进程中的符号地址
在第二章节中,得到的只是相对的地址偏移,并不是真实运行中的进程的符号地址,如何得到真实的地址在linux中就相对比较简单。
在maps里详细记录了进程的堆栈分配的地址,包括共享库的地址,那么起始地址就是这个库分配的最小地址
4. Java tool 保存的符号表
在jmap/jstack 中,为了提高读取符号地址的性能,避免每一次要找符号的地址从elf文件中查找,只是在初始话的时候将符号表保存成哈希表,其中key是符号的名字,内容是符号的地址,长度。
具体实现可以参考 /hotspot/src/os/linux/symtab.cbuild_symtab_internal 函数
分享到:
相关推荐
java程序性能分析thread dump和heap dump,dump文件:在故障定位(尤其是out of memory)和性能分析的时候,dump文件记录了JVM运行期间的内存占用、线程执行等情况。 heap dump:记录某一时刻JVM堆中对象使用情况,哪些...
Kubernetes应用java程序无法使用jmap,jstack的解决方案.docx
java使用JMAP定位代码内存泄漏
java应用运行过程中难免会出现问题,特别是在生产环境,发生异常或宕机情况,需要诊断与分析,定位原因,进行优化,避免下次再次出现问题。 虽然现在有很多可视化工具,使用起来比命令行更方便,但我们仍需要对基本...
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解.docx
jmap、jstack、jstat组合使用定位jvm问题
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat.doc
Java内存泄露_JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat
通过jstack与jmap分析一次线上故障.pdf
java dump分析工具,分析内存溢出,jmap dump文件分析,jstack堆栈分析
java监控工具源码-可集成到项目使用 内存状态、CPU负载、磁盘IO吞吐率、磁盘健康状态、网卡IO 监控 适合用于服务健康监控、线上调优、排查问题、性能测试等场景 支持操作系统监控:内存状态、CPU负载、磁盘IO及吞吐...
基本上出问题就是 df、free、top,然后依次 使用jstack、jmap,具体问题具体分析。 IBM出的一款堆内存对象分析ha(heap analyser)工具,可以用来分析websphere生成的内存转储phd格式文件。 使用方法 1.下载ha457.jar ...
详细请看: Java 工具(jmap,jstack)在linux上的源码分析(五) -F 参数的bug的解决lib (http://blog.csdn.net/raintungli/article/details/7245709) 自己编译的,测试能够通过
jmap 内存分析可视化工具,无须破解,解压即用。小编亲测。
NULL 博文链接:https://kennylee26.iteye.com/blog/1402260
用于分析Java内存溢出,或者内存泄露,需要配合jmap dump出内存文件
6. jstack:java堆栈跟踪工具 3 7. VisualVM:多合一故障处理工具 3 8. jconsole: 略 3 9. Memory Analyzer Tool(MAT)Eclipse插件 3 二、 JVM参数 3 1. 调试参数 3 2. 调优参数 4 3. 行为参数 4 4. 启动参数 5 三...
jvm命令参数配置调优讲解,jps,jinfo,jstat,jmap,jstack
jmap -dump:format=b,file=heapdump.hprof Pid;生成一个关于此进程的堆栈使用情况;使用工具做出对比
Java自带了许多诊断工具,例如JConsole、JVisualVM、jmap、jstack、jcmd等。这些工具都是非常常用的工具,它们可以帮助开发人员诊断Java应用程序的性能问题。其中,JConsole和JVisualVM是图形化工具,可以用来监控...