linux 性能分析常规逻辑和手段总结
一. 追查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:再比如操作系统内核.应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程 ...
随机推荐
- ZooKeeper(3.4.5) - 使用 Curator(2.7.0) 监听事件
ZooKeeper原生的API支持通过注册Watcher来进行事件监听,但是Watcher通知是一次性的,因此开发过程中需要反复注册Watcher,比较繁琐.Curator引入了Cache来监听Zoo ...
- 收回动态VHD的未使用空间
随着虚拟机的运行,虚拟机磁盘所占空间越来越大,而实际使用并没有那么大,考虑回收未使用部分. 收回动态VHD的未使用空间(压缩VHD) 有一种方法是ghost,两个vhd文件对拷.本文不是那个方法 本文 ...
- selenium文件上传的实现
一.对于上传文件, 从手动操作我们可以看出, 需要对window 窗体进行操作, 而对于selenium webdriver 在这方面应用就受到了限制. 但是, 庆幸的是, 对于含有input ele ...
- ASP.NET Web API 使用记录
WebAPI采用REST架构,用的是无状态的HTTP协议.Web Service则是SOAP协议,比较重量级. 推荐阅读:Difference between WCF and Web API and ...
- 2017 google Round D APAC Test 题解
首先说明一下:我只是用暴力过了4道题的小数据,就是简单的枚举,大数据都不会做!下面的题解,是我从网上搜到的解答以及查看排行榜上大神的答案得出来的. 首先贴一下主要的题解来源:http://codefo ...
- POJ 2559 Largest Rectangle in a Histogram -- 动态规划
题目地址:http://poj.org/problem?id=2559 Description A histogram is a polygon composed of a sequence of r ...
- java.lang.StringBuilder源码分析
StringBuilder是一个可变序列的字符数组对象,它继承自AbstractStringBuilder抽象类.它不保证同步,设计出来的目的是当这个字符串缓存只有单线程使用的时候,取代StringB ...
- linux shell编程学习笔记(一)---通配符,元字符
linux通配符: 通配符是由shell处理的(不是由所涉及到命令语句处理的,其实我们在shell各个命令中也没有发现有这些通配符介绍), 它只会出现在 命令的“参数”里(它不用在 命令名称里, 也不 ...
- 栈(链式存储) C++模板实现
#include <iostream> using namespace std; //栈结点类 template <typename T> class stackNode{ p ...
- 用LinqToExcel处理有标题表格的数据
1. 先根据表格标题定义一个类. public class News { public string Title { set; get; } public string Content { set; ...