在工作中遇到了内存泄漏的问题,通过top监控了一下,发现top一些地方还不知道什么含义,故 整理了一下格式 转载此博文,以便记录。原博文地址:http://www.cnblogs.com/sunshuhai/p/6250514.html
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.
它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
先看一下一个典型的显示数据:
top - 10:37:11 up 350 days, 22:20, 4 users, load average: 0.00, 0.00, 0.00
Tasks: 223 total, 1 running, 221 sleeping, 0 stopped, 1 zombie
Cpu(s): 0.7%us, 0.4%sy, 0.0%ni, 98.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 32878476k total, 31019132k used, 1859344k free, 281380k buffers
Swap: 17919996k total, 61036k used, 17858960k free, 11448704k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
227181 work 20 0 6852m 497m 7684 S 2.0 1.5 371:33.85 java
558088 work 20 0 13.7g 885m 6500 S 2.0 2.8 1420:46 java
296894 work 20 0 7760m 2.2g 7084 S 1.0 6.9 433:30.07 java
713142 work 20 0 10.1g 1.4g 7896 S 1.0 4.3 757:02.65 java
714160 work 20 0 13.4g 1.1g 6888 S 1.0 3.4 140:21.91 java
731259 root 20 0 5202m 250m 11m S 1.0 0.8 110:06.56 java
1044002 work 20 0 13.6g 318m 7632 S 1.0 1.0 209:48.36 java
1 root 20 0 19356 520 312 S 0.0 0.0 6:11.10 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
统计信息区前五行是系统整体的统计信息。
怎么看内存有多少空闲呢? totalfree = free1859344k+ buffers281380k+ cached11448704k
进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
列名 | 含义 |
---|---|
PID | 进程id |
PPID | 父进程id |
RUSER | Real user name |
UID | 进程所有者的用户id |
USER | 进程所有者的用户名 |
GROUP | 进程所有者的组名 |
TTY | 启动进程的终端名。不是从终端启动的进程则显示为 ? |
PR | 优先级 |
NI | nice值。负值表示高优先级,正值表示低优先级 |
P | 最后使用的CPU,仅在多CPU环境下有意义 |
%CPU | 上次更新到现在的CPU时间占用百分 |
TIME | 进程使用的CPU时间总计,单位秒 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
%MEM | 进程使用的物理内存百分比 |
VIRT | 进程使用的虚拟内存总量,单位 |
SWAP | 进程使用的虚拟内存中,被换出的大小,单位kb。 |
RES | 进程使用的、未被换出的物理内存大小,单位kb。 |
CODE | 可执行代码占用的物理内存大小,单位kb |
DATA | 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb |
SHR | 共享内存大小,单位kb |
nFLT | 页面错误次数 |
nDRT | 最后一次写入到现在,被修改过的页面数。 |
S | 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) |
COMMAND | 命令名/命令行 |
WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 |
Flags | 任务标志,参考 sched.h |
默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。
可以通过下面的快捷键来更改显示内容。 更改显示内容通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。
top使用格式top [-] [d] [p] [q] [c] [C] [S] [s] [n]参数说明
其他实用命令
下面介绍在top命令执行过程中可以使用的一些交互命令。 从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
常用操作
load average 定义linux系统中的Load对当前CPU工作量的度量。简单的说是进程队列的长度。
Load Average 就是一段时间 (1 分钟、5分钟、15分钟) 内平均 Load 。通过系统命令"w"查看当前load average情况
上边0.31,0.30,0.31表示:
注:linux系统是5秒钟进行一次Load采样
load average值的含义
1) 单核处理器假设我们的系统是单CPU单内核的,把它比喻成是一条单向马路,把CPU任务比作汽车。当车不多的时候,load <1;当车占满整个马路的时候 load=1;当马路都站满了,而且马路外还堆满了汽车的时候,load>1 2) 多核处理器我们经常会发现服务器Load > 1但是运行仍然不错,那是因为服务器是多核处理器(Multi-core)。
假设我们服务器CPU是2核,那么将意味我们拥有2条马路,我们的Load = 2时,所有马路都跑满车辆。
注:查看cpu 核数命令: grep 'model name' /proc/cpuinfo | wc -l
什么样的Load average值要提高警惕 (单核情况下,如果多核可以乘其倍数)
三种Load值,应该看哪个
通常我们先看15分钟load,如果load很高,再看1分钟和5分钟负载,查看是否有下降趋势。
1分钟负载值 > 1,那么我们不用担心,但是如果15分钟负载都超过1,我们要赶紧看看发生了什么事情。
所以我们要根据实际情况查看这三个值。