萝兰服务器教程

服务器多线程原理

2024-07-21 19:41:21 围观 : 5248 次

问题

服务器多线程原理

如何分析javaThreadDUMP1.ThreadDump简介
1.1什么是ThreadDump?
ThreadDump是一个非常有用的工具,用于诊断Java应用程序问题。 每个Java虚拟机都能够生成特定时间点上所有线程以及JVM中所有Java的状态的线程转储。
1.2ThreadDump功能
1.可以在各种操作系统下使用
可以在不影响系统的情况下使用
4.找到内存引脚,这是常见的,程序会加载大量数据到cell中;
2.服务器挂起、崩溃或者性能不佳,此时应该捕获服务器的线程转储(ThreadDump)以供后续分析。 为了体现线程状态的动态变化,需要连续多次创建线程,每次间隔10-20秒。 建议至少生成三个问题数据转储,我们将确定一个典型问题。
更多方法获取服务器窗口的ThreadDump标准输出,按command键+Break组合,则需要将线程堆栈复制到文件中;
UNIX/Linux:
第一个进程号(processid)你会找到一个仆人。 然后获取线程thread。
1.ps-ef|grepjava
2.kill-3
注意:注意不要一不小心杀死了服务器进程。 。 Kill-9命令将终止该进程。
JVM自带的获取线程堆栈的工具:
JDK自带的命令行工具获取PID,然后获取ThreadDump:
1.jps或ps-ef。 |grepjava(获取PID)
2.jstack[-l]|tee-ajstack.log(获取ThreadDump)
2.供后续分析)
2.1新状态(New)
新状态下用new句创建的线程存放在栈ret中。
2.2就绪状态(Runnable)
当一个线程被创建并且其他线程调用其start()方法时,该线程进入就绪状态,Java虚拟机调用Stack方法和Account计数器它。 。 该状态的线程位于可运行池中,等待获得CPU的使用权。
2.3运行状态
该状态下的线程接管CPU并执行程序代码。 只有处于就绪状态的线程才有能力转移到当前状态。
2.4阻塞状态(Blocked)
阻塞状态是指CPU线程由于某种原因会释放并暂时流动。 当线程被阻塞时,Java虚拟机不会为该线程分配CPU。 直到线程重新进入就绪状态,它才有机会转移到当前状态。
状态阻塞可以分为以下三种:
1)等待池对象(Blockedinobject的waitpool)中的状态阻塞:当线程处于运行状态时,如果调用了wait()方法该对象被执行时,Java虚拟机,会将一个线程放入该对象的等待池中,其中包含“通信线程”的内容。
2)对象池中的阻塞状态(Blockedinobject'slockpool):当线程运行在该状态时,如果该对象的同步锁被占用,则尝试获取与该对象的同步锁。 另一个线程,Java虚拟机会把这个线程放入这个对象的锁池中,这就涉及到“线程同步”。

以上为是众多网友友对《服务器多线程原理》的相关解答,希望对您的问题有所帮助。

来源:萝兰服务器教程,转载或复制请以超链接形式注明出处!

最新问题