前几天发现测试环境的CPU一直很高,于是就去排查了一下原因,之前在程序管理里面介绍过,可以通过top命令查看linux系统进程的资源占用。于是运行top命令如下:

top

从上图中可以看到其中有一个线程的CPU非常高,PID是31461.虽然我们知道了是一个java进程,也知道了PID号码,但是我们并不知道到底是那部分代码占用的CPU较高,这个时候我们就可以使用 top -Hp Pid的命令,来查看具体占用CPU资源的进程:

top -Hp

然后从线程的列表中找到CPU占用最高的线程ID。比如说4244. 我们知道占用CPU高的进程是JAVA进程,那么我们就可以使用jstack命令来查看java进程的栈信息,但是有个问题是jstack打出来的内容太多了,我怎么确定具体是哪个栈的占用CPU高呢? 这时就需要用到前面我们找到的线程ID了。由于jstack中使用的16进制,因此我们需要把线程ID:4244 转为16进制为1094.然后我们可以使用下面的命令查看这个线程对应栈信息:

jstack PID | grep -A 10 16进制线程ID:jstack 31461 | grep -A 10 1094:

[root@iZ23ozpjtzfZ ~]# jstack 31461 | grep -A 10 1094

"cat-TcpSocketSender" #243 daemon prio=5 os_prio=0 tid=0x00007f779c3be000 nid=0x1094 runnable [0x00007f7767a31000]

java.lang.Thread.State: TIMED_WAITING (parking)

at sun.misc.Unsafe.park(Native Method)

- parking to wait for <0x00000000f8b7f928> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)

at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)

at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)

at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)

at com.dianping.cat.message.io.DefaultMessageQueue.poll(DefaultMessageQueue.java:49)

at com.dianping.cat.message.io.TcpSocketSender.run(TcpSocketSender.java:176)

at java.lang.Thread.run(Thread.java:748)

at org.unidal.helper.Threads$RunnableThread.run(Threads.java:294

这样就定位了问题所在,之后就可以查看具体是什么原因导致这段代码占用CPU过高。

linux poll cpu过高,CPU占用过高问题排查相关推荐

  1. 高内存占用或高CPU占解决办法

    服务性能排查一般就两种:高内存占用或高CPU占用,需要具体问题具体分析.比如应用程序高内存占用,可能因为大文件读取.频繁IO,内存消耗频繁,导致频繁GC,进一步占用内存和CPU:比如应用程序高CPU占 ...

  2. linux free 命令以及系统内存占用过高的处理方法

    linux free 命令以及系统内存占用过高的处理方法 [root@localhost ~]# free -mtotal used free shared buff/cache available ...

  3. mysql 占用cpu高_mysqlCPU占用过高解决方案

    最近压测一个接口,发现吞吐率一直上不去,平均响应时间达到13秒多. 压测线程组设置如下: 200个线程,60秒内执行完成,每个线程循环60次.可以归纳为每秒启动200个线程. image.png 压测 ...

  4. linux下的buff/cache内存占用过高-手动清除释放内存

    buff/cache内存占用太高 我们在使用free -h或者(top命令)查看系统内存的时候,有时间会发现buff/cache很高,如下图: [root@nfs ~]# free -htotal u ...

  5. 计算机内存占用过高,内存占用过高怎么办

    内存占用过高怎么办是很多朋友遇到的困扰,那么我们就要了解到底多少才算过高,一旦过高了要怎么排查?内存占用过高如何处理,下面就来简单介绍介绍一下. 内存占用过高怎么办? 首先,我们怎么来判断内存使用率过 ...

  6. linux查看java进程cpu占用过高

    linux下查找java进程占用CPU过高原因 1. 查找进程 top查看进程占用资源情况 明显看出java的两个进程22714,12406占用过高cpu.   2.查找线程 使用top -H -p ...

  7. LINUX类主机JAVA应用程序占用CPU、内存过高分析手段

    本文转载 线上应用故障排查之一:高CPU占用 DBA+社群(dbaplus)丁启良 1. 应用程序占用资源高问题 目前大部分应用程序采用的是JAVA语言开发,在产品上线使用一段时间后,经常会出现某个J ...

  8. Linux 中CPU占用过高问题

    Linux 中CPU占用过高问题 在我们日常开发中常常会有一些CPU资源占用过高的问题,这些问题往往会导致我们系统运行的缓慢,甚至造成系统的奔溃,那我们如何进行这种问题的定位呢,本文将带你研究. 第一 ...

  9. VMware Linux虚拟机CPU占用过高

    VMware Linux虚拟机CPU占用过高 虚拟机内存占用过高是一个巨大的问题,之前已经讲过,而CPU占用过高更是重上加重,今天就来讲讲CPU占用过高的解决方法 CPU占用过高其实很简单,总共有两个 ...

  10. Linux java进程CPU占用过高解决方案

    总目录 一.前言: 二.模拟java程序CPU过高 1 修改代码为死循环 2 部署在linux上 访问该接口 根据top命令查看CPU参数 3 通过ps命令查看这个程序的线程信息,tid代码线程ID, ...

最新文章

  1. 【多标签文本分类】融合CNN-SAM与GAT的多标签文本分类模型
  2. IPFS:Filecoin和复制证明
  3. python网络爬虫文献综述_python网络爬虫综述
  4. GIS应对新挑战——空间信息网格技术探寻
  5. 前端学习(2745):重读vue电商网站55之使用 pm2 管理应用
  6. Java笔记-jpa中数据存储及更新应该注意的问题
  7. 使用idea 打jar包
  8. 直接通过ADO操作Access数据库(修改版)
  9. python删除特定字符串之后的,如何删除字符串中某个字符后的所有内容?
  10. 在Mac OS X中使用VIM开发STM32(2)
  11. C++ std::enable_shared_from_this
  12. Android - Android Studio 自动(auto)添加import 语句
  13. GoEasy使用方法记录
  14. SOME/IP 协议介绍
  15. Java实习日记(day1)
  16. 【STM32f401学习之路-00】搭建工程环境
  17. Python练习_数据类型_day4
  18. Android - 一种相似图片搜索算法的实现
  19. 幼儿园数学区如何用计算机作用,实用帖——幼儿园数学区域玩教具
  20. 数学与计算机科学虎扑,数学发展到今天还有继续研究的必要吗?

热门文章

  1. junit5 入门系列教程-02-junit5 注解详解
  2. StringTokenizer的学习
  3. 创业必读网站和工具集合
  4. 从这个API能看到整个前端的缩影
  5. 风变编程python课_花30天时间,学完了风变编程Python基础语法课
  6. 网络江湖里爬虫玩的是一场“无间道”
  7. 熟悉Minix3.1.2a操作系统的进程管理
  8. 阅读《Enhancing Foreground Boundaries for Medical Image Segmentation》
  9. 假设检验-显著性水平
  10. NCO IP Core