一. 追查cpu占用较高的进程(线程)
1 . 如何查找出当前系统中占用cpu或者内存最高的进程?
ps aux |sort -rn -k 3 |head -n3 查找出当前系统中cpu资源占用前三名的进程, -k 3 表示用ps结果中的第三列排序,ps aux输出结果列顺序为:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND,因此要是按照mem排序使用 k 4
[root@b28- ~]# ps aux |sort -rn -k |head -n3
root 21.1 8.1 ? Sl xxxx
root 20.9 8.5 ? Sl xxxx
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
2. 通过第一步我们确定了占用cpu最高的进程的pid是7855,那么如何确定该进程的线程cpu占用情况呢?
top -Hp 7855 -H 显示线程 -p 指定pid 如果执行上述命令之后,发现还有一个进程,那么按下 shift+H, 即可显示threads
root@b28- ~]# top -Hp top - :: up days, :, users, load average: 0.73, 0.81, 0.71
Tasks: total, running, sleeping, stopped, zombie
Cpu(s): 2.9%us, 0.6%sy, 0.0%ni, 96.4%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 32933092k total, 30577956k used, 2355136k free, 438232k buffers
Swap: 16779884k total, 0k used, 16779884k free, 22525628k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
root 8416m .6g 11m S 3.9 8.2 :58.92 java
root 8416m .6g 11m S 3.2 8.2 :59.56 java
root 8416m .6g 11m S 2.9 8.2 :55.70 java
经过排查,我们发现 tid(Thread Id)为7906线程占用cpu最高
3. 上一步我们已经找到了占用cpu最高的线程,那么我们下面要确定一下这个线程的详细信息
我们使用 jstack来进行深度追踪:
将tid 7906转换为十六进制: printf "%x\n" --> 1ee2
使用命令 jstack 7855 |grep -i 1ee2 -A 20 来查询进程详细信息:
[root@b28- ~]# jstack |grep -i 1ee2 -A
"New I/O client worker #1-1" daemon prio= tid=0x000000005ad02000 nid=0x1ee2 runnable [0x0000000043972000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:)
- locked <0x00000007801074a0> (a sun.nio.ch.Util$)
- locked <0x0000000780107490> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000007800fbcc0> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:)
at org.jboss.netty.channel.socket.nio.SelectorUtil.select(SelectorUtil.java:)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:)
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:)
at org.jboss.netty.util.internal.DeadLockProofWorker$.run(DeadLockProofWorker.java:)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:)
at java.lang.Thread.run(Thread.java:)
ok这个线程的堆栈信息就出来了...
二. 如何查看占用JVM内存最大的前20个class实例对象
主要用到jmap 和sort命令
[root@b28- ~]# jmap -histo |sort -rn -k3|head -n11
Total
: [B
: [C
: [I
: java.lang.String
: <constMethodKlass>
: <methodKlass>
: <constantPoolKlass>
: java.net.SocksSocketImpl
: java.util.HashMap$Entry
: <symbolKlass>
linux 性能分析常规逻辑和手段总结的更多相关文章
-
【转】一文掌握 Linux 性能分析之内存篇
[转]一文掌握 Linux 性能分析之内存篇 前面我们已经学习了 CPU 篇,这篇来看下内存篇. 01 内存信息 同样在分析内存之前,我们得知到怎么查看系统内存信息,有以下几种方法. 1.1 /pro ...
-
【转】一文掌握 Linux 性能分析之 CPU 篇
[转]一文掌握 Linux 性能分析之 CPU 篇 平常工作会涉及到一些 Linux 性能分析的问题,因此决定总结一下常用的一些性能分析手段,仅供参考. 说到性能分析,基本上就是 CPU.内存.磁盘 ...
-
一文掌握 Linux 性能分析之 CPU 篇
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 平常工作会涉及 ...
-
Linux 性能分析工具汇总合集
出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...
-
[转]Linux性能分析工具汇总合集
出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...
-
超全整理!Linux性能分析工具汇总合集
转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...
-
(转)超全整理!Linux性能分析工具汇总合集
超全整理!Linux性能分析工具汇总合集 原文:http://rdc.hundsun.com/portal/article/731.html 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望, ...
-
Linux性能分析命令工具汇总
转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...
-
Linux 性能分析 工具命令
背景知识:具备背景知识是分析性能问题时需要了解的.比如硬件 cache:再比如操作系统内核.应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程 ...
随机推荐
-
tkinter 在 x window 下的字体设置格式
X Font Descriptors # X Font Descriptors are strings having the following format (the asterisks repre ...
-
iOS架构网址
http://casatwy.com/iosying-yong-jia-gou-tan-kai-pian.html
-
###Linux基础 - 1
点击查看Evernote原文. #@author: gr #@date: 2014-10-11 #@email: forgerui@gmail.com 前言 为什么学习Linux?:-) 酷Cool ...
-
js实现placeholder效果
<form name="testForm" action="" method=""> <input type=" ...
-
HDU 5903 - Square Distance [ DP ]	( BestCoder Round #87 1002 )
题意: 给一个字符串t ,求与这个序列刚好有m个位置字符不同的由两个相同的串拼接起来的字符串 s, 要求字典序最小的答案 分析: 把字符串折半,分成0 - n/2-1 和 n/2 - n-1 d ...
-
AI 人工智能 探索 (四)
在写之前,先对昨天寻路插件再做一些补充,因为该插件不是很完善,所以当我发现有不能满足需求的时候,就会试图更改源代码,或增加接口来符合我的需求. 昨天补充了一条是 自身转向代码,今天补充另外一条,是及时 ...
-
java面试题整理(1)
1.Equals与==的区别? ==是判断两个变量或者实例是不是指向同一个内存地址 equals是判断两个变量或者实例所指向的内存地址中的值是不是相同 2.Object有哪些公用方法? 方法equal ...
-
初级 Java 的 3 本进阶书
1.Head First设计模式 这是我看过最幽默最搞笑最亲切同时又让我收获巨大的技术书籍!深入浅出,娓娓道来,有的地方能笑死你! 翻开一看,真如Erich Camma所说,简直欲罢不能.本书是Ore ...
-
Jsの练习-数组常用方法 -forEach()
forEach() : 对数组进行遍历循环,对数组中的每一项运行给定函数. 格式: arr.forEach(function(value,index){}) <!DOCTYPE html> ...
-
mount: wrong fs type, bad option, bad superblock
mount: wrong fs type, bad option, bad superblock on 125.64.41.244:/data/img, missing codepage ...