查看Linux进程CPU过高具体的线程堆栈(不中断程序)

简介:

1、TOP命令,找到占用CPU最高的进程


[plain] view plain copy

  1. $ top  

  2.   

  3. top - 20:11:45 up 850 days,  1:18,  3 users,  load average: 1.04, 1.01, 0.99  

  4. Tasks:  61 total,   1 running,  60 sleeping,   0 stopped,   0 zombie  

  5. Cpu(s):  1.4% us,  0.1% sy,  0.0% ni, 98.3% id,  0.1% wa,  0.0% hi,  0.2% si  

  6. Mem:  16418172k total, 15693376k used,   724796k free,  1146696k buffers  

  7. Swap: 10223608k total,        0k used, 10223608k free, 12537692k cached  

  8.   

  9.   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                  

  10. 24714 ztgame    16   0 1409m 1.2g 4252 S 99.6  7.4   2390:57 IMVChannelServe                                                          

  11.     1 root      16   0  4772  520  432 S  0.0  0.0   0:03.43 init                                                                     

  12.     2 root      RT   0     0    0    0 S  0.0  0.0   0:05.75 migration/0                                                              

  13.     3 root      34  19     0    0    0 S  0.0  0.0   5:22.97 ksoftirqd/0                                                              

  14.     4 root      RT   0     0    0    0 S  0.0  0.0   0:07.90 migration/1                                                              

  15.     5 root      34  19     0    0    0 S  0.0  0.0   0:00.27 ksoftirqd/1                                                              

  16.     6 root      RT   0     0    0    0 S  0.0  0.0   0:04.07 migration/2                                                              

  17.     7 root      34  19     0    0    0 S  0.0  0.0   0:00.47 ksoftirqd/2                                                              

  18.     8 root      RT   0     0    0    0 S  0.0  0.0   0:04.00 migration/3                                                              

  19.     9 root      34  19     0    0    0 S  0.0  0.0   0:00.33 ksoftirqd/3      



2、通过TOP -H -p 进程ID,找到具体的线程占用情况,Shift+H可以开启关闭线程显示


[plain] view plain copy

  1. $ top -H -p 24714  

  2.   

  3. top - 20:15:30 up 850 days,  1:22,  3 users,  load average: 1.26, 1.09, 1.02  

  4. Tasks:  16 total,   1 running,  15 sleeping,   0 stopped,   0 zombie  

  5. Cpu(s): 24.8% us,  0.3% sy,  0.0% ni, 73.1% id,  0.0% wa,  0.0% hi,  1.8% si  

  6. Mem:  16418172k total, 15701376k used,   716796k free,  1146704k buffers  

  7. Swap: 10223608k total,        0k used, 10223608k free, 12546048k cached  

  8.   

  9.   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                  

  10. 24729 ztgame    16   0 1409m 1.2g 4252 R 97.0  7.4   2307:22 IMVChannelServe                                                          

  11. 24721 ztgame    15   0 1409m 1.2g 4252 S  2.0  7.4  84:22.40 IMVChannelServe                                                          

  12. 24714 ztgame    16   0 1409m 1.2g 4252 S  0.0  7.4   0:03.80 IMVChannelServe                                                          

  13. 24716 ztgame    15   0 1409m 1.2g 4252 S  0.0  7.4   0:00.00 IMVChannelServe                                                          

  14. 24717 ztgame    15   0 1409m 1.2g 4252 S  0.0  7.4   0:00.04 IMVChannelServe                                                          

  15. 24718 ztgame    15   0 1409m 1.2g 4252 S  0.0  7.4   0:00.00 IMVChannelServe                                                          

  16. 24719 ztgame    15   0 1409m 1.2g 4252 S  0.0  7.4   0:00.08 IMVChannelServe                                                          

  17. 24720 ztgame    15   0 1409m 1.2g 4252 S  0.0  7.4   0:00.01 IMVChannelServe                                                          

  18. 24722 ztgame    15   0 1409m 1.2g 4252 S  0.0  7.4   0:00.00 IMVChannelServe                                                          

  19. 24723 ztgame    16   0 1409m 1.2g 4252 S  0.0  7.4   0:00.00 IMVChannelServe                                                          

  20. 24724 ztgame    15   0 1409m 1.2g 4252 S  0.0  7.4   0:00.01 IMVChannelServe                                                          

  21. 24725 ztgame    15   0 1409m 1.2g 4252 S  0.0  7.4   0:09.83 IMVChannelServe                                                          

  22. 24726 ztgame    15   0 1409m 1.2g 4252 S  0.0  7.4   0:00.00 IMVChannelServe                                                          

  23. 24727 ztgame    15   0 1409m 1.2g 4252 S  0.0  7.4   0:00.76 IMVChannelServe                                                          

  24. 24728 ztgame    16   0 1409m 1.2g 4252 S  0.0  7.4   0:00.53 IMVChannelServe                                                          

  25. 24730 ztgame    16   0 1409m 1.2g 4252 S  0.0  7.4   2:42.18 IMVChannelServe                                                          


3、通过命令pstack 进程ID显示线程堆栈,LWP 24729对应线程ID的堆栈,就是占用CPU最高的堆栈,可以具体分析什么原因造成的。



[plain] view plain copy

  1. $ pstack 24714  

  2. Thread 16 (Thread 1084229984 (LWP 24716)):  

  3. #0  0x00000039c5a901d5 in __nanosleep_nocancel () from /lib64/tls/libc.so.6  

  4. #1  0x00000039c5ac3058 in usleep () from /lib64/tls/libc.so.6  

  5. #2  0x00000000005ebe10 in zVerifyThread::run ()  

  6. #3  0x00000000005e9d29 in zThread::threadFunc ()  

  7. #4  0x00000039c6106137 in start_thread () from /lib64/tls/libpthread.so.0  

  8. #5  0x00000039c5ac9883 in clone () from /lib64/tls/libc.so.6  

  9. Thread 15 (Thread 1094719840 (LWP 24717)):  

  10. #0  0x00000039c5a901d5 in __nanosleep_nocancel () from /lib64/tls/libc.so.6  

  11. #1  0x00000039c5ac3058 in usleep () from /lib64/tls/libc.so.6  

  12. #2  0x00000000005ebe10 in zVerifyThread::run ()  

  13. #3  0x00000000005e9d29 in zThread::threadFunc ()  

  14. #4  0x00000039c6106137 in start_thread () from /lib64/tls/libpthread.so.0  

  15. #5  0x00000039c5ac9883 in clone () from /lib64/tls/libc.so.6  

  16. Thread 14 (Thread 1105209696 (LWP 24718)):  

  17. #0  0x00000039c5a901d5 in __nanosleep_nocancel () from /lib64/tls/libc.so.6  

  18. #1  0x00000039c5ac3058 in usleep () from /lib64/tls/libc.so.6  

  19. #2  0x00000000005ebe10 in zVerifyThread::run ()  

  20. #3  0x00000000005e9d29 in zThread::threadFunc ()  

  21. #4  0x00000039c6106137 in start_thread () from /lib64/tls/libpthread.so.0  

  22. #5  0x00000039c5ac9883 in clone () from /lib64/tls/libc.so.6  

  23. Thread 13 (Thread 1115699552 (LWP 24719)):  

  24. #0  0x00000039c5a901d5 in __nanosleep_nocancel () from /lib64/tls/libc.so.6  

  25. #1  0x00000039c5ac3058 in usleep () from /lib64/tls/libc.so.6  

  26. #2  0x00000000005ebe10 in zVerifyThread::run ()  

  27. #3  0x00000000005e9d29 in zThread::threadFunc ()  

  28. #4  0x00000039c6106137 in start_thread () from /lib64/tls/libpthread.so.0  

  29. #5  0x00000039c5ac9883 in clone () from /lib64/tls/libc.so.6  

  30. Thread 3 (Thread 1220598112 (LWP 24729)):  

  31. #0  0x00000039c5a71e87 in memset () from /lib64/tls/libc.so.6  

  32. #1  0x00000000004fa591 in ChannelTask::forwardToClientByMedia ()  

  33. #2  0x0000000000506220 in ChannelTask::parseClientMsg_Normal ()  

  34. #3  0x000000000051ef55 in ChannelTask::parseClientMsg ()  

  35. #4  0x000000000051f070 in ChannelTask::cmdMsgParse_Forward ()  

  36. #5  0x000000000051f1d1 in ChannelTask::cmdMsgParse ()  

  37. #6  0x000000000051f414 in ChannelTask::processCmd ()  

  38. #7  0x0000000000523ea8 in ChannelTaskManager::processCmd ()  

  39. #8  0x0000000000525ddd in ChannelTimeTick::run ()  

  40. #9  0x00000000005e9d29 in zThread::threadFunc ()  

  41. #10 0x00000039c6106137 in start_thread () from /lib64/tls/libpthread.so.0  

  42. #11 0x00000039c5ac9883 in clone () from /lib64/tls/libc.so.6  

  43. Thread 2 (Thread 1231087968 (LWP 24730)):  

  44. #0  0x00000039c610af8b in __lll_mutex_lock_wait ()  

  45. #1  0x0000000000000001 in ?? ()  

  46. #2  0x0000000000000065 in ?? ()  

  47. #3  0x00000039c6107d87 in pthread_mutex_lock () from /lib64/tls/libpthread.so.0  

  48. #4  0x0000003a500ae29e in operator delete () from /usr/lib64/libstdc++.so.6  

  49. #5  0x000000000053f59d in ChannelLoadClient::processCmd_DB ()  

  50. #6  0x00000000005986c9 in GameAppClient::processTaskCmd_DB ()  

  51. #7  0x00000039c5a901e3 in __nanosleep_nocancel () from /lib64/tls/libc.so.6  

  52. #8  0x0000000000000000 in ?? ()  

  53. Thread 1 (Thread 182894183104 (LWP 24714)):  

  54. #0  0x00000039c5ac9c5c in epoll_wait () from /lib64/tls/libc.so.6  

  55. #1  0x0000000000620cac in zTCPServer::accept ()  

  56. #2  0x00000000005f9c0d in zNetService::serviceCallback ()  

  57. #3  0x00000000005f89e3 in zService::main ()  

  58. #4  0x0000000000564298 in main ()  










本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1743448,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
5月前
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
241 67
|
6月前
|
网络协议 前端开发 调度
schedule:原来还可以这样让进程让出 CPU?
文章主要讲述通过模拟时钟中断和调度事件来优化和测试虚拟机监控器(VMM)的方法,包括流程设计、寄存器状态的保存与恢复、硬件中断处理规范等细节。
146 11
schedule:原来还可以这样让进程让出 CPU?
|
6月前
|
Linux 数据库 Perl
【YashanDB 知识库】如何避免 yasdb 进程被 Linux OOM Killer 杀掉
本文来自YashanDB官网,探讨Linux系统中OOM Killer对数据库服务器的影响及解决方法。当内存接近耗尽时,OOM Killer会杀死占用最多内存的进程,这可能导致数据库主进程被误杀。为避免此问题,可采取两种方法:一是在OS层面关闭OOM Killer,通过修改`/etc/sysctl.conf`文件并重启生效;二是豁免数据库进程,由数据库实例用户借助`sudo`权限调整`oom_score_adj`值。这些措施有助于保护数据库进程免受系统内存管理机制的影响。
|
6月前
|
Linux Shell
Linux 进程前台后台切换与作业控制
进程前台/后台切换及作业控制简介: 在 Shell 中,启动的程序默认为前台进程,会占用终端直到执行完毕。例如,执行 `./shella.sh` 时,终端会被占用。为避免不便,可将命令放到后台运行,如 `./shella.sh &`,此时终端命令行立即返回,可继续输入其他命令。 常用作业控制命令: - `fg %1`:将后台作业切换到前台。 - `Ctrl + Z`:暂停前台作业并放到后台。 - `bg %1`:让暂停的后台作业继续执行。 - `kill %1`:终止后台作业。 优先级调整:
321 5
|
7月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
128 26
|
7月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
132 17
|
10月前
|
Windows
dllhost.exe进程占用CPU很高怎么解决?
全面解析dllhost.exe进程
824 16
|
9月前
|
Java 对象存储 开发者
如何找出Java进程占用CPU高的元凶
本文记录了一次Java进程CPU占用率过高的问题和排查思路。
|
11月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
606 1