1. top命令查看CPU和内存占用率

top回车,然后按1

发现进程PID 35163 CPU和内存占用率都很高

top - 06:13:47 up  5:31,  1 user,  load average: 2.11, 2.07, 2.06
Tasks: 189 total,   1 running, 188 sleeping,   0 stopped,   0 zombie
Cpu0  : 22.3%us,  0.7%sy,  0.0%ni, 76.4%id,  0.3%wa,  0.3%hi,  0.0%si,  0.0%st
Cpu1  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  8.0%us,  0.3%sy,  0.0%ni, 91.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  : 70.4%us,  1.7%sy,  0.0%ni, 25.6%id,  2.3%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1012292k total,   943076k used,    69216k free,     9372k buffers
Swap:  1675260k total,   375204k used,  1300056k free,    34024k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                         
35163 user111   20   0 3823m 360m 6828 S 199.5 36.5 147:41.46 java

另外,top下,按H可以在进程PID和线程TID之间切换

2. 查看PID对应的进程

[user111@kms210 lms]$ ps -ef|grep 35163
user111  35163     1 99 04:59 pts/0    02:28:06 /usr/local/jdk1.8.0_60/bin/java -Djava.util.logging.config.file=/usr/local/lms/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Djava.endorsed.dirs=/usr/local/lms/endorsed -classpath /usr/local/lms/bin/bootstrap.jar:/usr/local/lms/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/lms -Dcatalina.home=/usr/local/lms -Djava.io.tmpdir=/usr/local/lms/temp org.apache.catalina.startup.Bootstrap start
user111  44605 23049  0 06:14 pts/0    00:00:00 grep 35163

3. 查看线程35163中占用CPU高的进程

[user111@kms210 lms]$ ps -mp 35163 -o THREAD,tid,time
USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME
user111   199   -    - -         -      -     - 02:32:04
user111   0.0  19    - futex_    -      - 35163 00:00:00
user111   0.0  19    - poll_s    -      - 35164 00:00:01
user111   0.0  19    - futex_    -      - 35165 00:00:01
user111   0.0  19    - futex_    -      - 35166 00:00:00
user111   0.0  19    - futex_    -      - 35167 00:00:00
user111   0.0  19    - futex_    -      - 35168 00:00:00
user111   0.3  19    - futex_    -      - 35169 00:00:16
user111   0.3  19    - futex_    -      - 35170 00:00:16
user111   0.1  19    - futex_    -      - 35171 00:00:05
user111   0.0  19    - futex_    -      - 35172 00:00:00
user111   0.0  19    - futex_    -      - 35173 00:00:01
user111   0.0  19    - futex_    -      - 35174 00:00:00
user111   0.0  19    - futex_    -      - 35178 00:00:00
user111   0.0  19    - ep_pol    -      - 35181 00:00:00
user111   0.0  19    - ep_pol    -      - 35182 00:00:00
user111   0.0  19    - ep_pol    -      - 35183 00:00:00
user111  99.6  19    - -         -      - 35204 01:15:33
user111   0.0  19    - futex_    -      - 35222 00:00:00
user111  99.6  19    - -         -      - 35226 01:15:27
user111   0.0  19    - futex_    -      - 35230 00:00:00

线程TID转16进制

[user111@kms210 lms]$ printf "%x\n" 35204
8984

4.查看线程栈信息

[user111@kms210 lms]$ jstack 35163 | grep 8984 -A 30
"Thread-6" #18 daemon prio=5 os_prio=0 tid=0x00007fb0d8fd1800 nid=0x8984 runnable [0x00007fb11cc8e000]
   java.lang.Thread.State: RUNNABLE
at com.qsd.sssm.thread.LmsThread.run(LmsThread.java:68)

"NioBlockingSelector.BlockPoller-3" #15 daemon prio=5 os_prio=0 tid=0x00007fb130531800 nid=0x896f runnable [0x00007fb11dfb2000]
   java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000f62278e8> (a sun.nio.ch.Util$2)
- locked <0x00000000f62278f8> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000f62278a0> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:342)

"NioBlockingSelector.BlockPoller-2" #14 daemon prio=5 os_prio=0 tid=0x00007fb130517000 nid=0x896e runnable [0x00007fb11e0b3000]
   java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000f6227b20> (a sun.nio.ch.Util$2)
- locked <0x00000000f6227b30> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000f6227ad8> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:342)

"NioBlockingSelector.BlockPoller-1" #13 daemon prio=5 os_prio=0 tid=0x00007fb130474800 nid=0x896d runnable [0x00007fb11e3cd000]
   java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
[user111@kms210 lms]$

找到出现问题的代码,并分析具体函数中是否有可能出现死循环的代码段。

通常问题出现在while, for之类的循环代码片段。

5. 查看文件LmsThread.java:68行

Debug一下,发现死循环

while (true) {

if(CMD.remoteIp.equals("")) {// 第58行,if成立,死循环

continue;

}

6. 另外,只替换.war文件可能存在的问题

修改只替换.war文件,可能会发现线程占用率还是很高,线程栈信息仍然显示以前的行号的话,可以试试完整的删除项目文件夹,重新部署整个项目

参考地址:http://blog.csdn.net/chenhaotong/article/details/51991786

linux cpu过高原因及代码定位的更多相关文章

  1. Linux排查java程序占用cpu过高的线程代码

    分几步骤: 1.通过top,查出占用CPU过高的java进程 ,比如: pid :6666 2.通过ps -mp 6666 -o THREAD,tid,time| sort -n -k1 -r 查看此 ...

  2. 性能分析之CPU分析-从CPU调用高到具体代码行(JAVA)

      通常情况下,性能报告中只说CPU使用率高的时候,并不能帮助定位问题.因为CPU高会有多种不同的情况.CPU有五种状态(us sy id wa st), 在vmstat中能显示出来,这个想必很多人都 ...

  3. 性能分析之CPU分析-从CPU调用高到具体代码行(C/C++)

    今天在培训的过程中,也提到了分析要具体到代码的事情,如果思路方向是正确的,对java应用和C/C++应用来说,也是几个命令就可以跳到代码行了.前提是要能看得懂堆栈信息.所以一直以来我在讲课的过程中都有 ...

  4. linux下查找java进程占用CPU过高原因

    1. 查找进程 top查看进程占用资源情况 明显看出java的两个进程22714,12406占用过高cpu.   2.查找线程 使用top -H -p <pid>查看线程占用情况   3. ...

  5. linux查询cpu过高原因--java

    1. 查询java pid top -c 2. 查询java进程下,线程情况 top -Hp pid(threadIdList) 3. 将10进制线程id转为16进制 printf "%x ...

  6. 服务器CPU又爆了?Linux快速排查Java程序占用CPU很高的方法

    这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的. 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 1.场 ...

  7. 线上CPU飚高(死循环,死锁……)?帮你迅速定位代码位置

    top基本使用: top命令参考本篇文章 查看内存和CPU的top命令,别看输出一大堆,理解了其实很简单 top 命令运行图: 第一行:基本信息 第二行:任务信息 第三行:CPU使用情况 第四行:物理 ...

  8. Linux 线程占用CPU过高定位分析

    今天朋友问我一个Linux程序CPU占用涨停了,该如何分析, CPU占用过高,模拟CPU占用过高的情况 先上一段代码: #include <iostream> #include <t ...

  9. 查找linux下进程占用CPU过高的原因,以php-fpm为例

    很多时候,线上服务器的进程在某时间段内长时间占用CPU过高,为了优化,我们需要找出原因. 1.找出占用CPU最高的10个进程 ps aux | sort -k3nr | head -n 10 或查看占 ...

随机推荐

  1. ResponseUtil数据传递至前端

    package com.java1234.util; import java.io.OutputStream; import java.io.PrintWriter; import javax.ser ...

  2. 基于 tensorflow 的 mnist 数据集预测

    1. tensorflow 基本使用方法 2. mnist 数据集简介与预处理 3. 聚类算法模型 4. 使用卷积神经网络进行特征生成 5. 训练网络模型生成结果 how to install ten ...

  3. maven GroupId 和ArtifactId通常填什么

    GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构.ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称.

  4. Spring Cloud feign

    Spring Cloud feign使用 前言 环境准备 应用模块 应用程序 应用启动 feign特性 综上 1. 前言 我们在前一篇文章中讲了一些我使用过的一些http的框架 服务间通信之Http框 ...

  5. Java RSA 生成公钥 私钥

    目前为止,RSA是应用最多的公钥加密算法,能够抵抗已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. RSA算法中,每个通信主体都有两个钥匙,一个公钥(Public Key)用来对数据进行加密 ...

  6. JDK中rt.jar、tools.jar和dt.jar作用

    dt.jar和tools.jar位于:{Java_Home}/lib/下,而rt.jar位于:{Java_Home}/jre/lib/下,其中: rt.jar是JAVA基础类库,也就是你在java d ...

  7. testng + Ignore 忽略测试方法

    使用testng的时候,有时候会忽略掉某些测试方法,暂时不跑,简单整理一下一些方法.转载还请说明下 1.使用@Test(enable=false)方法 @Feature("查询") ...

  8. .net 发送邮件失败

    1,是否为企业邮箱,如果是则用最高admin的帐号,降低其安全级别,下面的子帐号自动适用.(Google 阻止了从某个不够安全的应用进行的登录尝试) 2,做一个测试页面,对错误结果进行分析,一步一步查 ...

  9. TZOJ 1840 Jack Straws(线段相交+并查集)

    描述 In the game of Jack Straws, a number of plastic or wooden "straws" are dumped on the ta ...

  10. 10-string类的length()返回值一起的问题

    c++ string类length()(size())函数返回值–无符号数 首先,先来发现问题 string s = ""; for(int i = 0; i < s.len ...