『壹』 怎么用linux命令查看jvm进程有几个线程
在LINUX上可以使用kill -3 pid > thread.info来取得当前JVM线程的信息;
jstack 这个是用来查看jvm当前的thread mp的。可以看到当回前Jvm里面的线答程状况。
这个对于查找blocked线程比较有意义;
『贰』 Linux下如何定位java进程直接内存的泄漏及top和jmap查看内存的关系
问题1:top的RES值和JAVA堆内存之间到底是一个什么关系?
——大概1、2个月有个帖子讨内论过,挺长的,不容过一下子找不到了;总的来说,两者很难找到非常精确匹配的计算关系,因为两者统计的口径是不同的;操作系统关心的是被应用程序所占用的,而JVM则只是关心堆中被分配出去的;这里面有JVM自己开销的、有碎片内存无法使用的、还有已使用完毕待回收的 等等问题。
——总的来说,我觉得如果不是为了底层开发之类的问题,不值得在此问题进行深入研究。
问题2:如何定位JAVA进程直接内存的泄漏?
——很遗憾,并没有什么招数来直接定位,否则内存泄露就不会是一个让大家闻风丧胆的问题了;各类工具都只是提供给你一定的手段去发现征兆、缩小怀疑范围,没有说直接帮你定位,那听起来就不是IT而是神话了。
——常规招数就是:范围 与 层次,两个方向不断通过测试和监控来缩小 怀疑范围,从而最终定位内存泄漏点。
『叁』 Linux的JStat使用实践linuxjstat
Linux下的JStat是一款适用于Linux操作系统的Java统计工具,它可以从正在运行的JVM(Java虚拟机)显示有关Java类装载、内存管理和其他垃圾收集等有用性能数据,进而帮助java开发者和运维人员监控java应用程序。
使用JStat有以下步骤:
第一步:确定JVM进程ID
为了运行Jstat,第一步是确定要监控的JVM进程ID,一般在Linux上可以通过ps -ef来获取,关于JVM可以使用如grep ‘java’、grep ‘jre’等命令来筛选要定位的进程ID。
第二步:使用JStat连接JVM进程
在确定进程ID之后,可以使用以下命令来连接 JVM进程:
jstat –
其中vmid为上面确定的进程ID,option可以是收集数据的一些类型,例如-gcutil可以用来检查垃圾收集的性能,-gc同时检查多个:S0C、S1C、S0U、S1U、EC、EU、OC、OU、MC、MU、CCSC、CCSU,-gccapacity查看收集器的容量,等等。
第三步:使用Jstat分析JVM状态
运行Jstat之后,可以收集到相应的数据,通过对数据的分析可以正确的了解JVM的状态,一些不正常的状态可能会出现停顿,停顿时长等信息,一般来说应用程序的性能效果会受到收集器、类加载,以及内存管理等因素的影响,可以根据数据来发现性能瓶颈以及自行调整优化应用程序。
总结
Linux下的Jstat是一款非常实用的Java统计工具,可以帮助java开发者和运维人员监控java应用程序,使用过程简单,第一步是确定JVM进程ID,第二步使用Jstat连接,第三步分析JVM的状态。Jstat可以收集数据并分析,能够及时发现性能瓶颈,并保证应用程序的正常运行。