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

jvm查看内存状态(jvm内存查看命令)

  • 内存
  • 2024-07-01 13:30:58
  • 8068

一、如何分析javaThreadDUMPDump简介
1.1什么是ThreadDump?
ThreadDump是一个非常有用的诊断Java应用程序问题的工具。每个Java虚拟机都有能力生成特定时间所有线程状态的线程转储虽然每个Java虚拟机打印的线程转储略有不同,但大多数都提供当前活动线程和所有Java线程的快照在JVM中。线程的堆栈跟踪信息堆栈跟踪通常包含完整的类名和执行的方法,如果可能的话还包含源代码的行数。
1.2ThreadDump功能
1可以在各种操作系统下使用
2可以在各种Java应用服务器下使用
3可以在不影响性能的情况下使用系统
4可以直接在应用程序的代码行定位问题
1.3ThreadDump可以诊断的问题
1.查找内存泄漏,常见的是程序加载大量数据到缓存中;
2查找死锁线程;
1.4如何处理ThreadDump
一般什么时候。服务器挂起、崩溃或性能不佳。此时,需要捕获服务器的线程堆栈(ThreadDump)以供后续分析。在实际操作中,转储的信息往往不足以确认问题。为了反映线程状态的动态变化,必须连续进行多次ThreadDump,每次间隔10-20秒。建议该问题至少生成三个转储信息,我们将确定问题的典型性。
获取ThreadDump的方法有很多种,下面列出一些方法:
获取ThreadDump的操作系统命令:
Windows:
1从服务器标准退出窗口并按Ctrl+Break组合键,则需要将线程堆栈复制到文件中;
UNIX/Linux:
首先找到服务器的进程号(进程页),并获取线程stack.
–ef|grepjava
-3
注意:小心,一个不小心的步骤可能会杀死服务器进程。Kill-9命令将终止该进程。
JVM自带工具获取线程堆栈:
JDK自带命令行工具获取PID,然后获取ThreadDump:
或ps–ef|grepjava(获取PID)
[-l]|(获取ThreadDump)
2用于后续分析)
2.1新状态(New)
用new语句创建的线程处于new状态。此时,与其他Java对象一样,它只在堆区域中分配内存。
2.2就绪状态(可执行)
当一个线程对象创建后,其他线程调用start()方法时,该线程进入就绪状态,Java虚拟机创建方法调用栈和程序计数器为了它。处于该状态的线程被放置在可运行池中,等待被授予CPU使用权。
2.3运行状态(Running)
该状态的线程占用CPU,运行程序代码。只有处于就绪状态的线程才有机会转入运行状态。
2.4阻塞状态(Blocked)
阻塞状态是指线程由于某种原因放弃了CPU,暂时停止运行。当线程被阻塞时,Java虚拟机不会为该线程分配CPU。直到线程重新进入就绪状态,它才有一次机会进入运行状态。
阻塞状态可以分为以下三种:
1)对象的等待池(Blockedinobject'swaitpool)中的阻塞状态:当线程处于运行状态时,如果wait()方法当一个对象被执行时,Java虚拟机会将线程添加到这个对象的等待基中,涉及到“线程通信”的内容。
2)对象锁池中的阻塞状态(Blockedinobject'slockpool):当线程处于运行状态时,试图获取某个对象的同步锁时,如果该对象的同步锁已被占用其他线程,Java虚拟机会将这个线程添加到这个对象的锁池中,这就涉及到“线程同步”。