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:再比如操作系统内核.应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程 ...
随机推荐
- css3过度和动画
一.过度(transition) transition:[transition-property] || [transition-duration] || [transition-timing-fun ...
- jquery扩展 $.fn
$.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn.abc(),即$.fn.abc()是对jquery扩展了一个abc方法,那么后面你的每一个 ...
- 高级C#
使用delegates委托写插件方法: public delegate int Transformer (int x); public class Util { public static void ...
- Android res资源文件夹的知识积累
Android的开发框架耦合性还是比较低的,逻辑和布局被原生分开了.在Eclipse一般代码写在src文件夹下,资源等写在res文件夹下. drawable文件夹:该文件夹有很多变种,主要是为了适配A ...
- java多线程总结五:线程池的原理及实现
1.线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创 ...
- WCF编程系列(一)初识WCF
WCF编程系列(一)初识WCF Windows Communication Foundation(WCF)是微软为构建面向服务的应用程序所提供的统一编程模型.WCF的基本概念: 地址:定义服务的 ...
- Mysql 中 like 查询存在反斜杠的解决办法
如 要查询 %\ABC\% 应该这样写, 写成四个反斜杠 like '%\\\\ABC\\\\%'
- Linux 网络相关命令
1.修改ip,dns相关:sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0 2.ifconfig 查找ip,mac地址 3.重启网络:sudo ser ...
- 关于XML与类型Class的映射
我们知道数据的持久化是编程必须面对的问题.我们可以保存数据到数据库.Excel表.XML文件.TXT文件等等.那么我们编程中经常会遇到对Xml文件的操作.在http://www.cnblogs.com ...
- Apache配置多个监听端口
以前做PC上的,都是配置一个端口,整一大堆的虚拟目录: 在 \conf\extra下找到httpd-vhosts.conf这个配置文件,想下面这样配置就行,监听80端口,访问相应的ServerName ...