linux 分析进程占用CPU过高

重点是查看进程的线程中,哪个线程占用cpu过高,然后用gdb附加到进程,调试线程,看是否有死循环或者死锁等问题,步骤如下: 
1 先用ps + grep找出该死的进程pid,比如 1706

2 top -H -p 1706,(top然后shift+H可以看出某个线程,左上角有提示:thread on 则为可查看线程)所有该进程的线程都列出来, 看看哪个线程pid占用最多,记下对应的线程号,如:1723

  1. gdb attach 到进程号码(1706)
  2. (仍然在gdb中) info threads 结果大致如下:
(gdb) info threads   8 Thread 0x7f9fa9366700 (LWP 1716)  0x0000003cec00b98e in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0   7 Thread 0x7f9fa8965700 (LWP 1720)  0x0000003cec00b98e in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0   6 Thread 0x7f9fa7f64700 (LWP 1721)  0x0000003cec00f4b5 in sigwait ()    from /lib64/libpthread.so.0   5 Thread 0x7f9fa7563700 (LWP 1722)  0x0000003cec00b98e in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0   4 Thread 0x7f9fa6b62700 (LWP 1723)  0x0000003cec00b5bc in pthread_cond_wait@@GLIBC_2.3.2     () from /lib64/libpthread.so.0   3 Thread 0x7f9fa6161700 (LWP 1724)  0x0000003cebce9163 in epoll_wait ()    from /lib64/libc.so.6   2 Thread 0x7f9fa1159700 (LWP 1887)  0x0000003cebce9163 in epoll_wait ()    from /lib64/libc.so.6 * 1 Thread 0x7f9fa95ad820 (LWP 1706)  0x0000003cec00b5bc in pthread_cond_wait@@GLIBC_2.3.2     () from /lib64/libpthread.so.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

找到线程号码对应的thread(LWP1723)即是我们刚刚记下的线程号

  1. (仍然在gdb中)thread 线程号码切换到线程(4)–这里在info threads显示出来的序号需要使用gdb能识别的线程序号,即执行:thread 4切换到我们刚刚记下的线程号:1723的对应线程,如下:
(gdb) thread 4 [Switching to thread 4 (Thread 0x7f9fa6b62700 (LWP 1723))]#0  0x0000003cec00b5bc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
  • 1
  • 2

6.(仍然在gdb中)bt 查看线程调用堆栈 
(gdb) bt

#0  0x0000003cec00b5bc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 #1  0x00007f9fa9f7144d in IceUtil::Cond::waitImpl (this=0x263f4c8,      mutex=...) at ../../include/IceUtil/Cond.h:215 #2  0x00007f9fa9f9a4b1 in IceUtil::Monitor::wait (this=0x263f4c8)     at ../../include/IceUtil/Monitor.h:152 #3  0x00007f9fa9fd7567 in IceInternal::EndpointHostResolver::run (this=0x263f480)     at EndpointI.cpp:161 #4  0x00007f9fa9b1b975 in startHook (arg=0x263f480) at Thread.cpp:413 #5  0x0000003cec0079d1 in start_thread () from /lib64/libpthread.so.0 #6  0x0000003cebce8b6d in clone () from /lib64/libc.so.6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

7.从上面输出的信息,基本上可以查看线程对应的代码断,是否有死循环等,如果是死锁的话,需要多次查看当前线程堆栈,或者查看全部线程的堆栈,总是会有某些个线程跟其他线程不一致,然后再对应到代码来进行定位解决

原文地址:https://www.cnblogs.com/wxmdevelop/p/8982255.html

转载于:https://www.cnblogs.com/jpfss/p/11416523.html

### 回答1: 当Linux服务器上的Chrome浏览器占用CPU过高时,可能存在多种原因。首先,检查服务器配置和硬件资源是否足够支持Chrome的运行。其次,考虑更新Chrome浏览器到最新版本,可能存在漏洞和性能问题,更新可能能够解决这些问题。同时,确保服务器上运行的其他进程没有占用太多的资源。 如果以上方法无法解决问题,可以尝试通过命令行工具监视CPU使用率,并使用任务管理器关闭Chrome浏览器中的额外进程。另外还可以尝试禁用或删除浏览器插件和扩展程序,这些程序可能会导致占用CPU过高。 如果问题仍然存在,可能需要进一步诊断。可以使用专业的CPU诊断工具,例如perf或top命令,来查找性能瓶颈。通过这些工具可以确定哪些进程或线程占用了大量的CPU资源,并尝试优化它们的性能。 ### 回答2: 如果Linux服务器上的Chrome浏览器占用CPU过高,可能是由于多种原因造成的。首先,可能是因为Chrome占用的内存过多,导致CPU负载过高。解决这个问题的方法是尝试关闭不必要的Chrome标签或扩展程序,或者增加物理内存来提高服务器性能。 第二,可能是因为Chrome访问的网站或应用程序存在性能问题,导致CPU资源不足。在这种情况下,可以尝试限制Chrome浏览器对网站或应用程序的访问权限,或者优化网站或应用程序以提高其性能。 第三,可能是因为服务器硬件或操作系统设置不当导致的性能瓶颈。可以通过升级硬件、提高系统性能或优化服务器设置来解决此类问题。 综上所述,当Linux服务器Chrome占用CPU过高时,应该通过排除各种可能性,并采取适当的解决方案来优化服务器性能。尤其要定期监控服务器性能,确保系统运行稳定,以避免因性能问题导致的不必要故障和损失。 ### 回答3: Linux 服务器上如果 Chrome 占用 CPU 过高,可能是由于以下原因: 1. 系统资源不足:当系统资源不足时,Chrome 可能会占用过多的 CPU 资源来运行。此时可以通过增加服务器的硬件资源来解决 this problem。 2. Chrome 扩展程序:Chrome 的扩展程序可能会导致 CPU 占用过高。您可以在 Chrome 的设置中禁用或删除一些扩展程序来解决这个问题。 3. 恶意软件:您的服务器可能已经被恶意软件感染,这些软件占用 CPU 资源。您应该在系统中安装反病毒软件来扫描和清除恶意软件。 4. Chrome 版本过低:如果使用的 Chrome 版本过低,可能会出现 CPU 占用过高的问题。请升级 Chrome 至最新版本。 为解决这个问题,您可以先尝试重启服务器并且更新 Chrome 至最新版本。如果问题仍然存在,您可以通过检查系统资源、禁用或删除 Chrome 的扩展程序、安装反病毒软件等方法来解决问题。如果无法解决,建议咨询专业人员以获取更多帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值