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:再比如操作系统内核.应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程 ...
随机推荐
- C# lazy加载
转自http://www.cnblogs.com/yunfeifei/p/3907726.html 在.NET4.0中,可以使用Lazy<T> 来实现对象的延迟初始化,从而优化系统的性能. ...
- 页面动态加载js文件
function loadJS(url, onload) { var domscript = document.createElement('script'); domscript.src = url ...
- croppic 图片裁剪
#region 3.1.3 保存裁剪后的图片方法 +ContentResult TemplateCropImg() /// <summary> /// 保存裁剪后的图片方法 /// < ...
- C++例题练习(2)
环境:Dev-C++( Version:5.6.1) 1.循环输入一个1-1000的整数,判断是否为素数(输入1时程序结束) 素数:只能被1和自身整除. 实现代码: #include <iost ...
- selenium简单代码入门
#!/usr/bin/env python #-*- coding:utf-8 -*- import os,sys,string import time import unittest from se ...
- javascript 第26节 jQuery对象
<html> <head> <title>jQuery</title> <!--导入jquery库--> <script type=& ...
- (poj)1502 MPI Maelstrom
题目链接:http://poj.org/problem?id=1502 Description BIT has recently taken delivery of their processor A ...
- “Assign Random Colors” is not working in 3ds Max 2015
Go to Customize -> Preferences…-> General (tab) Uncheck “Default to By Layer for New Nodes”
- InstallShield Clone dialog
Browse to Dialogs view, right-click an existing dialog, click Clone and rename the cloned dialog. Wh ...
- sgu 101 domino
题意还算简洁明了,加上有道翻译凑过着读完了题.题意大体上是 给你 n 个多米诺骨牌, 给出每个骨牌两端的数字, 只有数字相同才可以推到, 比如 2-3和3-2.你可以旋转这些多米诺骨牌, 输出一个可以 ...