linux 性能分析常规逻辑和手段总结

时间:2022-12-03 23:47:41

一. 追查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 性能分析常规逻辑和手段总结的更多相关文章

  1. 【转】一文掌握 Linux 性能分析之内存篇

    [转]一文掌握 Linux 性能分析之内存篇 前面我们已经学习了 CPU 篇,这篇来看下内存篇. 01 内存信息 同样在分析内存之前,我们得知到怎么查看系统内存信息,有以下几种方法. 1.1 /pro ...

  2. 【转】一文掌握 Linux 性能分析之 CPU 篇

    [转]一文掌握 Linux 性能分析之 CPU 篇 平常工作会涉及到一些 Linux 性能分析的问题,因此决定总结一下常用的一些性能分析手段,仅供参考. 说到性能分析,基本上就是 CPU.内存.磁盘 ...

  3. 一文掌握 Linux 性能分析之 CPU 篇

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 平常工作会涉及 ...

  4. Linux 性能分析工具汇总合集

    出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...

  5. &lbrack;转&rsqb;Linux性能分析工具汇总合集

    出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...

  6. 超全整理!Linux性能分析工具汇总合集

    转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...

  7. &lpar;转&rpar;超全整理!Linux性能分析工具汇总合集

    超全整理!Linux性能分析工具汇总合集 原文:http://rdc.hundsun.com/portal/article/731.html 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望, ...

  8. Linux性能分析命令工具汇总

    转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...

  9. Linux 性能分析 工具命令

    背景知识:具备背景知识是分析性能问题时需要了解的.比如硬件 cache:再比如操作系统内核.应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程 ...

随机推荐

  1. tkinter 在 x window 下的字体设置格式

    X Font Descriptors # X Font Descriptors are strings having the following format (the asterisks repre ...

  2. iOS架构网址

    http://casatwy.com/iosying-yong-jia-gou-tan-kai-pian.html

  3. &num;&num;&num;Linux基础 - 1

    点击查看Evernote原文. #@author: gr #@date: 2014-10-11 #@email: forgerui@gmail.com 前言 为什么学习Linux?:-) 酷Cool ...

  4. js实现placeholder效果

    <form name="testForm" action="" method=""> <input type=" ...

  5. HDU 5903 - Square Distance &lbrack; DP &rsqb;&Tab;&lpar; BestCoder Round &num;87 1002 &rpar;

    题意: 给一个字符串t ,求与这个序列刚好有m个位置字符不同的由两个相同的串拼接起来的字符串 s, 要求字典序最小的答案    分析: 把字符串折半,分成0 - n/2-1 和 n/2 - n-1 d ...

  6. AI 人工智能 探索 (四)

    在写之前,先对昨天寻路插件再做一些补充,因为该插件不是很完善,所以当我发现有不能满足需求的时候,就会试图更改源代码,或增加接口来符合我的需求. 昨天补充了一条是 自身转向代码,今天补充另外一条,是及时 ...

  7. java面试题整理(1)

    1.Equals与==的区别? ==是判断两个变量或者实例是不是指向同一个内存地址 equals是判断两个变量或者实例所指向的内存地址中的值是不是相同 2.Object有哪些公用方法? 方法equal ...

  8. 初级 Java 的 3 本进阶书

    1.Head First设计模式 这是我看过最幽默最搞笑最亲切同时又让我收获巨大的技术书籍!深入浅出,娓娓道来,有的地方能笑死你! 翻开一看,真如Erich Camma所说,简直欲罢不能.本书是Ore ...

  9. Jsの练习-数组常用方法 -forEach&lpar;&rpar;

    forEach()  : 对数组进行遍历循环,对数组中的每一项运行给定函数. 格式: arr.forEach(function(value,index){}) <!DOCTYPE html&gt ...

  10. mount&colon; wrong fs type&comma; bad option&comma; bad superblock

    mount: wrong fs type, bad option, bad superblock on 125.64.41.244:/data/img,       missing codepage ...