问题描述:
生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。
问题分析:
1,程序属于CPU密集型,和开发沟通过,排除此类情况。
2,程序代码有问题,出现死循环,可能性极大。
问题解决:
1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出。
2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,那就尝试下吧。
解决过程:
1,根据top命令,发现PID为2633的Java进程占用CPU高达300%,出现故障。
2,找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序:
[root@localhost logs]# ps -mp 2633 -o THREAD,tid,time | sort -rn
显示结果如下:
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
root 10.5 19 - - - - 3626 00:12:48
root 10.1 19 - - - - 3593 00:12:16
找到了耗时最高的线程3626,占用CPU时间有12分钟了!
将需要的线程ID转换为16进制格式:
[root@localhost logs]# printf "%x\n" 3626
e18
最后打印线程的堆栈信息:
[root@localhost logs]# jstack 2633 |grep e18 -A 30
将输出的信息发给开发部进行确认,这样就能找出有问题的代码。
通过最近几天的监控,CPU已经安静下来了。
脚本show-busy-java-threads.sh https://github.com/oldratlee/useful-scripts/blob/master/docs/java.md#beer-show-busy-java-threadssh 可以一键找出出在运行的Java进程中,消耗CPU最多的线程栈。用于快速排查Java的性能问题。
分享到:
相关推荐
### Java进程高CPU占用故障排查 在日常的运维与开发工作中,经常遇到Java应用出现高CPU占用的问题。这类问题不仅会影响系统的稳定性和响应速度,还可能导致服务不可用。因此,对于此类故障的快速定位和解决变得尤为...
在Java编程环境中,获取CPU占用率是常见的系统监控任务,这对于性能分析、故障排查或资源管理至关重要。要实现这一功能,通常需要利用Java提供的操作系统接口,例如Java Management Extensions (JMX) 或者 sun.misc...
在Java开发过程中,有时候我们需要监控系统资源或特定进程的状态,例如CPU使用率、内存占用情况等。这在服务器性能监控、问题排查等方面尤为重要。本文将详细介绍如何使用Sigar库来实现这些功能。 #### Sigar简介 ...
- **进程监控**:实时显示Java进程的内存使用、CPU占用、线程状态等关键指标,帮助用户了解应用的运行状况。 - **远程诊断**:支持远程连接到其他服务器上的Java进程,进行跨地域的远程管理与诊断,提升了运维的...
在某个生产环境的Java进程中,CPU占用率达到300%。首先,通过`ps -mp 2633 -o THREAD,tid,time | sort -rn`找到CPU使用率最高的线程(TID 3626)。接着,将3626转换为16进制(e18),再用`jstack 2633 | grep "e18" ...
在生产环境中,Java应用程序常见的问题主要可以从四个方面来总结:CPU占用率异常、内存泄露或溢出、磁盘空间不足以及网络连接问题。这些问题又可以进一步分为两大类: 1. **系统异常**:例如CPU占用率过高、磁盘...
【描述】:本文将深入探讨当Websphere Application Server (WAS)出现异常高的CPU占用率时,如何识别问题源头并采取相应的故障排除措施。这涉及到对操作系统层面的数据收集、线程分析以及使用调试工具如dbx进行详细...
5. 数据可视化:为了直观地展示Java进程的性能数据,源代码可能包含了数据可视化组件,如使用Echarts、Highcharts或D3.js等JavaScript库来创建图表,展示内存使用率、CPU占用、线程状态等信息。 6. 安全性:在线...
1. **线程级CPU利用率显示**:ProcExp 可以展示每个进程内的所有线程以及它们各自的CPU占用率,这对于定位高CPU使用率的问题至关重要。你可以看到哪个线程正在消耗最多的处理器资源,从而针对性地进行问题排查。 2....
在Java应用程序的运行过程中,有时候会遇到JVM(Java虚拟机)CPU使用率过高的问题。这通常是由于线程执行不恰当或者...在日常开发和维护工作中,理解并熟练运用这样的工具是非常必要的,它能有效提升故障排查的效率。
2. **进程信息**:展示正在运行的进程列表,包括进程ID、名称、状态、CPU和内存使用情况等,这对于系统性能分析和故障排查很有帮助。 3. **内存状态**:提供总内存、已用内存、空闲内存等数据,以及内存分配和使用率...
- **进程信息获取**:使用`OpenProcess`和`QueryProcessInformation`函数获取进程的详细信息,如PID、内存使用、CPU占用率等。 - **实时监控**:通过定时任务或者事件驱动机制,定期查询进程状态,实现对CPU、内存...
本案例中,用户在Windows环境下安装了多个Tomcat服务,遇到CPU使用率异常升高的情况,但由于多个Java进程同时运行,无法直观地识别出问题所在。为了解决这个问题,我们可以通过为Tomcat进程设置别名来区分各个实例,...
启动过程中,Arthas会列出正在运行的Java进程,让你选择想要诊断的应用进程。选定后,Arthas便会在该进程中运行,准备提供各种诊断服务。 ### 监控Dashboard Arthas的监控Dashboard提供了丰富的视图,帮助开发者...
需要注意的是,上述代码获取的是整个操作系统的CPU和内存占用,而不是仅仅针对当前运行的Java进程。如果你需要监控Java应用程序自身的内存占用,可以使用`java.lang.instrument.Instrumentation`接口或者`java.lang....
6. **`strace`和`gdb`**:对于进程的调试和故障排除,`strace`在Linux中用于跟踪系统调用和信号,揭示进程如何与内核交互。`gdb`(GNU调试器)是一个强大的程序调试工具,可以对运行中的进程进行单步调试,查看变量...
- 故障排查:通过观察CPU利用率的变化,可以帮助定位性能问题的源头,比如某个进程异常消耗资源。 总之,动态显示CPU利用率是一个强大的工具,它能够帮助我们实时了解系统的运行状态,及时发现并解决问题,提高系统...
《企业级IT运维之WebLogic实战-第13章》主要关注的是在企业环境中WebLogic服务器遇到的一个常见问题——异常高CPU占用率故障。WebLogic是Oracle公司开发的一款企业级Java应用服务器,它广泛用于部署和管理Java EE...
【计算机网络故障排查—经典】 在计算机网络使用过程中,我们可能会遇到各种问题,例如能上QQ但不能上网的情况。这通常是由多种因素引起的,本文将分析并提供解决这些问题的策略。 **一、病毒感染** 当打开IE浏览...