//https://www.jianshu.com/p/1e6...//https://blog.csdn.net/weixin_...//https://cloud.tencent.com/dev...-XX:NativeMemoryTracking=summaryjcmdpidVM.native_memoryclasstracking:addjvmparameters:-verbose:classheapmemorytracking:1:dump文件,使用jvisualvm.exe或者其他工具查看文件.jvm命令:jmap-dump:format=b,file=outfile{pid}2:jmap-histo:live{pid}(会触发fullgc)/jmap-histo{pid}查看内存对象分布情况3:jmap-heap{pid}元空间类加载跟踪:1:jstat-class{pid}2:jmap-clstats{p元空间内存使用跟踪:1:添加jvm参数-XX:NativeMemoryTracking=summaryjcmd{pid}VM.native_memory整个内存主要包括JavaHeap、Class、Thread、Code、GC、Compiler、Internal、Other、Symbol、NativeMemoryTracking、ArenaChunk;其中,reserved表示应用程序可用的内存大小,committed表示应用程序正在使用的内存大小,JavaHeap部分表示堆内存当前占用多少MB;Class部分表示加载了多少个类,其元数据占用了多少MB;Thread部分表示当前存在多少个线程,占用了多少MB;Code部分表示JIT生成的或者缓存的指令占用了多少MB;GC部分表示当前占用了多少MB的内存空间来帮助GC;Code部分表示编译器生成代码时占用了多少MB;Internal部分表示命令行解析、JVMTI等占用多少MB;Other部分表示有多少MB没有被分类;Symbol部分表示字符串表、常量池等符号占用了多少MB;NativeMemoryTracking部分表示函数本身占用了多少MB;ArenaChunk部分表示arenachunks占用了多少MBgc跟踪:jstat-gc{pid}cpu耗时/线程信息跟踪:1:使用查看jmc.exe添加jvm参数:-XX:+UnlockCommercialFeatures-XX:+FlightRecorder-XX:FlightRecorderOptions=defaultrecording=true,disk=true,repository={filePath},maxage=6m,settings=default2:top-H-p{pid}获取进程的线程资源占用信息(无需重启)jstackpid>>xx.txt获取进程的线程信息进程java-jarjcaxx.在软件中打开一个jar,可以看到线程栈(https://www.ibm.com/support/p...可以下载开源工具)//https://blog.csdn.net/wuyuxin...堆外内存跟踪1:cat/proc/{pid}/smapsSize:表示映射区域在虚拟内存空间中的大小。Rss:表示映射区当前在物理内存中占用了多少空间私有页面的大小。Private_Dirty:已被覆盖的私有页面的大小。Swap:表示由于物理内存不足而交换到交换空间的非mmap内存(也叫匿名内存,如malloc动态分配的内存)的大小。pss:虚拟内存区摊销计算后所使用的物理内存大小(部分内存会与其他进程共享,如mmap)。比如这块区域映射的部分物理内存也被另外一个进程映射,而这部分物理内存的大小为1000KB,那么进程分配一半的内存,即Pss=500KB。2pmap-x{pid}Address:地图图像起始地址的起始地址Kbytes:地图大小,以千字节为单位图像大小 RSS:驻留集大小,以千字节为单位驻留集大小脏:脏页(共享和私有)以千字节为单位DirtypagesizeMode:permissionsonmapImagepermissions:r=read,w=write,x=execute,s=shared,p=private(copyonwrite)Private_Dirty:被重写的私有页面的大小。3:google-perftools它的原理是在java应用程序运行时调用malloc时,使用它的libtcmalloc.so,这样就可以做一些统计。它的原理是在java应用运行的时候调用malloc,用它的libtcmalloc.so代替,这样可以做一些统计。
