当前位置:首页 > 内存 > 正文

查看java应用占用内存情况

  • 内存
  • 2024-07-04 14:29:29
  • 5390

一、如何查看unix的java内存使用情况jmap(Linux独有且比较常用的命令)
观察正在运行的例程的物理内存。
参数如下:
-heap:打印jvmheap位置
-this:打印jvmheap堆。输出信息包括类名、对象数量、对象占用大小。
-histo:live:同上,但只允许存活对象
-permstat:打印堆站点的永久代
命令使用:
jmap-heap3409
新增一代可以。Observable(EdenSpace,FromSpace,ToSpace),tenuredGeneration,PermGeneration内存使用情况
输出内容:
jmap-histo3409|jmap-histo:live3409
可以注意到堆(Heap)中所有东西的状态所有幸存者的原因)。它占据了许多东西和空间。
输出内容:
编写一个脚本,可以快速找到占用堆最大的对象,这样在内存泄漏方面效率最高。
如果有多个结果,可以使用此命令将它们发送到文件中。
jmap-histo3409|jmap-histo:live3409>
jinfo:可以输出和更改当前Java进程的选项。
jps:与Unix上的ps类似,用于表示本地Java进程。您可以在本地查看多个Java程序并显示它们的进程号。
jstat:监控VM内存的强大工具。它可用于监视VM内存中的各种内存量而非堆内存使用情况。
jmap:打印某个Java进程(使用pid)内存中所有“对象”的状态(例如:生成了哪些对象及其数量)。
jconsole:一个ja​​vaGUI监控工具,可以以图形的形式显示各种数据。并可以通过远程连接监控远程服务器VM。
详细说明:在使用这些工具之前,首先使用JPS命令获取每个JVM的运行数,然后查看想要查看的JVM。
jstat工具特别强大,有很多选项可以详细查看堆栈各部分的使用情况以及加载的类的数量。使用时需要添加进程的进程ID才能查看所选参数。下面详细介绍各个模块的含义。
jstat-classpid:显示加载的类数量、占用空间等信息。
jstat-compilerpid:显示实时编译VM数量等信息。
jstat-gcpid:可以显示gcs信息、gc次数和停止时间。后五位分别是younggc数量、youngge时间、fullgc数量、fullgc时间、fullgc时间。
jstat-gccapacity:可以显示VM内存perm中三代(young、old、perm)对象的使用情况和大小。仪式上,PGC是新生成的perm使用的内存,PC是之前的perm使用的内存。其他人可能会从这个类比中推断出OC是一种纯粹的古代职业。
jstat-gcnewpid:新对象信息。
jstat-gcnewcapacitypid:有关新对象及其容量的信息。
jstat-gcoldpid:有关旧事物的信息。
jstat-gcoldcapacitypid:旧数据及其占用情况。
jstat-gcpermcapacitypid:Perm对象及其占用信息。
jstat-utilpid:统计gc变化信息。
jstat-printcompilationpid:当前VM执行信息。
除了上述模块外,您还可以一次添加两个数字。例如:jstat-printcompilation30242506每250毫秒记录一次,共6次三行。
Jmap是一个可以输出内存中所有内容的工具。它还可以以二进制格式在虚拟机上放置堆栈。
命令:jmap-dump:format=b,file=
file:保存路径及文件名
pid:进程号
?jmap-histo:livepid|minus:堆中活跃的对象和大小
?jmap-heappid:查看堆使用信息
jinfo的用途:比较简单,就是Java进程运行时的环境。使用jinfo-optpid。例如,要查看MaxPerm大小2788,您可以使用jinfo-flagMaxPermSize2788。
Jconsole是一个用Java编写的GUI程序,用于监控虚拟机和远程虚拟机。使用方法:只需在命令行中打开jconsole并选择进程即可。
JConsole中内存分区的说明。
EdenSpace(heap):内存最初分配给该线程池中的大多数对象。
SurvivorSpace(堆):用于保存edenspace内存池中垃圾回收后未被回收的对象。
TenuredGeneration(堆):存储在持久内存池中已经存在一段时间的对象。
持久代(非堆):虚拟机保留自己的静态(可重构)数据,例如类对象和方法。Java虚拟机与此类共享数据。该区域分为只读只写,
CodeCache(不是堆):HotSpotJava虚拟机包含用于编译和保存本机代码(nativecode)的内存,称为“代码缓存”(codecache)
?jstack(检查jvm线程中当前状态,是否有死锁现象等):jstackpid:threaddump
?jstat-gcutilpid1000100:每1000ms计算100次gc状态;