目前我们的监控,可以发现消耗较高CPU的进程(阀值为3个CPU),通过监控我们可以找到消耗较高CPU的进程号;
通过进程号pid,我们在linux上可以通过top –H –p <pid>命令,显示该进程中每个线程的CPU资源消耗情况。
然后通过threadump命令,可以打印出某个应用JVM中某时刻所有线程的调用情况,通过线程号我们就可以对应找到线程调用的程序了。
另:
使用jrcmd命令也可以进行threadump和进程执行线程情况的查看,但该命令为jrockit 5.0 新带的命令,在wls81用户下,我们没有执行权限,但可以联系中间件帮忙执行。
1. 进入到jrockit/bin目录下
2. 打./jrcmd 回车,会看到当前所有在执行中的java进程的PID号
3. 打./jrcmd [PID] help 回车,会看到指定java进程支持的操作
4. 打./jrcmd [PID] print_threads > xxxFile,可以把当前java进程中的所有线程堆栈轨迹打印到指定文件中
示例:
[serviceop@CNSZ031330 wls]$ top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
228961 wls81 15 0 714m 637m 1804 S 755.7 0.2 383:24.53 java
[serviceop@CNSZ031330 wls]$ top -H -p 228961
top - 13:37:01 up 156 days, 16:11, 8 users, load average: 14.24, 13.82, 12.88
Tasks: 140 total, 23 running, 117 sleeping, 0 stopped, 0 zombie
Cpu(s): 25.6%us, 1.6%sy, 0.0%ni, 72.6%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 264120292k total, 217896772k used, 46223520k free, 4547804k buffers
Swap: 3145720k total, 464k used, 3145256k free, 153619224k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
229077 wls81 15 0 714m 637m 1804 R 32.6 0.2 7:11.79 ExecuteThread:
229093 wls81 15 0 714m 637m 1804 R 32.6 0.2 23:41.47 ExecuteThread:
229073 wls81 15 0 714m 637m 1804 R 32.2 0.2 2:24.30 ExecuteThread:
229076 wls81 15 0 714m 637m 1804 R 32.2 0.2 2:22.75 ExecuteThread:
229078 wls81 15 0 714m 637m 1804 R 32.2 0.2 7:21.38 ExecuteThread:
229082 wls81 15 0 714m 637m 1804 R 32.2 0.2 10:14.74 ExecuteThread:
229084 wls81 15 0 714m 637m 1804 R 32.2 0.2 8:43.72 ExecuteThread:
229085 wls81 15 0 714m 637m 1804 R 32.2 0.2 12:45.62 ExecuteThread:
229087 wls81 15 0 714m 637m 1804 R 32.2 0.2 19:11.79 ExecuteThread:
229089 wls81 15 0 714m 637m 1804 R 32.2 0.2 23:22.67 ExecuteThread:
229075 wls81 15 0 714m 637m 1804 R 31.9 0.2 5:06.52 ExecuteThread:
229088 wls81 15 0 714m 637m 1804 R 31.9 0.2 13:19.55 ExecuteThread:
229090 wls81 15 0 714m 637m 1804 R 31.9 0.2 23:53.55 ExecuteThread:
229092 wls81 15 0 714m 637m 1804 R 31.9 0.2 24:20.10 ExecuteThread:
229094 wls81 15 0 714m 637m 1804 R 31.9 0.2 33:25.41 ExecuteThread:
229095 wls81 15 0 714m 637m 1804 R 31.9 0.2 33:41.20 ExecuteThread:
229096 wls81 15 0 714m 637m 1804 R 31.9 0.2 36:22.72 ExecuteThread:
229081 wls81 15 0 714m 637m 1804 R 31.6 0.2 7:28.80 ExecuteThread:
229083 wls81 15 0 714m 637m 1804 R 31.6 0.2 11:05.48 ExecuteThread:
229086 wls81 15 0 714m 637m 1804 R 31.6 0.2 11:40.36 ExecuteThread:
229091 wls81 15 0 714m 637m 1804 R 31.6 0.2 17:53.92 ExecuteThread:
229097 wls81 15 0 714m 637m 1804 R 31.6 0.2 32:41.28 ExecuteThread:
229079 wls81 15 0 714m 637m 1804 R 31.2 0.2 7:33.44 ExecuteThread:
229080 wls81 15 0 714m 637m 1804 S 1.3 0.2 0:14.13 ExecuteThread:
228963 wls81 15 0 714m 637m 1804 S 0.7 0.2 0:13.44 (GC Main Thread
229070 wls81 15 0 714m 637m 1804 S 0.7 0.2 0:05.97 ExecuteThread:
229664 wls81 15 0 714m 637m 1804 S 0.7 0.2 0:08.69 pool-1-thread-7
Threadump信息片段:
229083:
"ExecuteThread: '35' for queue: 'weblogic.kernel.Default'" id=44 idx=0xd4 tid=229083 prio=5 alive, daemon
at java/util/HashMap.get(HashMap.java:319)
at com/paic/abbs/biz/service/common/impl/HardCodeServiceImpl.getString(HardCodeServiceImpl.java:115)
at com/paic/abbs/biz/service/util/impl/UtilServicesImpl.isExpected(UtilServicesImpl.java:45)
at com/paic/abbs/biz/service/common/impl/AbbsInternetServiceImpl.policyIssuing(AbbsInternetServiceImpl.java:3156)
at com/paic/abbs/biz/service/common/impl/AbbsInternetServiceImpl.procRequest(AbbsInternetServiceImpl.java:218)
at com/paic/abbs/biz/service/common/impl/AbbsInternetServiceImpl.handleRequest(AbbsInternetServiceImpl.java:122)
at com/paic/abbs/biz/service/common/impl/AbbsInternetService_gwxgqo_EOImpl.handleRequest(AbbsInternetService_gwxgqo_EOImpl.java:262)
at sun/reflect/GeneratedMethodAccessor287.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)
at sun/reflect/DelegatingMethodAccessorImpl.invoke(DelegatingMethodA
分享到:
相关推荐
通过Windows的任务管理器或Linux的`top`或`htop`命令,我们可以查看当前运行的进程及其CPU使用率。这有助于我们识别占用CPU资源最多的程序。 2. **恶意软件检查**: 高CPU占用有时可能由病毒、木马或恶意软件引起...
- 当发现某个Java进程的CPU消耗异常时,可以使用`jstack`来进一步分析线程的具体行为。 2. **获取线程堆栈信息** - 命令示例:`[root@3server ~]# jstack 6633 > cpu1128.log` - 这里的`6633`是指需要分析的Java...
作为 Linux 运维工程师,在日常工作中我们会遇到 Linux服务器上出现CPU负载达到100%居高不下的情况,如果CPU 持续跑高,则会影响业务系统的正常运行,带来企业损失。 很多运维的同学遇到这种状况往往会不知所措,...
根据`/proc/<pid>/status`文件中的`State`字段以及常用的`ps`命令输出,Linux进程主要有以下几种状态: 1. **D (Uninterruptible Sleep)**:不可中断睡眠状态。通常发生在进程等待某种I/O操作完成时(如磁盘读写)...
2. **限制CPU占用**:单线程程序可以有效地限制CPU使用率,避免在多核系统中过度消耗资源。 多线程的优点在于可以更好地利用CPU资源,尤其在CPU密集型任务中,多个线程可以在不同核心上并行运算。然而,多线程也...
当创建一个新的进程时,操作系统会为其分配一套完整的资源,这在资源消耗上相对较高。而线程则共享同一进程的资源,特别是内存空间,因此线程的创建和销毁成本较低,执行效率更高。 在Linux中,进程通过`fork()`...
当某个操作耗时较长时,如果将其放在主线程执行,则会导致整个应用程序处于等待状态,无法响应用户的键盘、鼠标或其他交互输入。通过将耗时操作放在单独的线程中执行,可以避免主界面的冻结,从而提升用户体验。 4....
本文将深入探讨Linux线程切换和进程切换的方法及其性能影响。 **进程切换**: 1. **切换页目录**:这是进程切换的第一步,目的是为了让新进程能够访问其自身的内存空间。每个进程都有独立的页表,用于映射虚拟地址...
2. **多进程技术**:每个用户连接对应一个独立的进程,减少了共享变量的开销,但大量用户时性能下降,且进程间通信成本较高。 3. **预创建子进程(prefork)模式**:主进程预先创建子进程,根据用户负载动态调整,如...
在Linux下,创建新进程涉及到分配独立的地址空间、建立数据结构,这消耗较大资源。而线程则共享进程的地址空间和大部分数据,创建线程的成本远低于创建进程,同时线程间的上下文切换时间也远短于进程,效率更高。据...
Linux进程管理是操作系统管理任务的核心部分,涉及创建、调度、监控、终止进程等多个方面。在Linux系统中,进程被视为执行中的程序实例,每个进程都有自己的生命周期、状态和资源占用情况。以下是Linux中关于进程...
- **占用较少的系统资源**:与创建多个进程相比,创建线程通常消耗更少的资源。 - **结合线程和RPC(远程过程调用)**:利用线程可以更高效地处理远程调用。 #### 二、基本线程编程 ##### 线程库 - **pthreads**...
- **切换成本**:进程间的切换需要保存和恢复上下文环境,成本较高;而线程间的切换则较为高效。 - **健壮性**:一个进程中的某个线程崩溃可能会影响整个进程,而一个进程崩溃通常不会影响其他进程。 #### 二、使用...
本文将基于提供的信息,详细介绍如何在Linux环境下诊断并解决JAVA进程CPU占用率过高的问题。 #### 一、识别问题所在 1. **查看系统整体状况**:首先通过`top`命令来获取系统当前的整体状态,包括CPU使用情况、内存...