NingG +

Linux下查看进程的内存占用 - top命令

背景

最近几天,服务器使用free -g来查看当前内存使用情况时,会发现内存空间几乎被完全占用了,如何能查看是哪个进程的问题?自己使用top进来,看着不断刷新的监控数据,也无法找出哪个进程占用的内存最多,有位哥们儿建议:你按内存占用来排序,这样就直观看出来了。

top简介

top - display Linux tasks

  • The top program provides a dynamic real-time view of a running system. It can display system summary information as well as a list of tasks currently being managed by the Linux kernel. The types of system summary information shown and the types, order and size of information displayed for tasks are all user configurable and that configuration can be made persistent across restarts.
  • The program provides a limited interactive interface for process manipulation as well as a much more extensive interface for personal configuration – encompassing every aspect of its operation. And while top is referred to throughout this document, you are free to name the program anything you wish. That new name, possibly an alias, will then be reflected on top’s display and used when reading and writing a configuration file.

top使用

输入top命令之后,可以继续进行如下操作,依次来获取想要的信息。

输入 说明
h 获取帮助信息 or ?
q 退出top监控页面 or ctrl + c
u 某一用户启动的所有进程
c 显示/取消,进程执行的详细信息,在COMMAND字段显示
k kill指定PID的进程
O 排序,设置排序字段;n:Mem,k:CPU
P 排序,按照CPU
M 排序,按照内存
T 排序,按照时间/累计时间
R 倒序;即,如果原来按从小到大排序,则,变为从大到小排序
Z 设置窗口颜色配置方案
H 显示线程
W 保存当前top命令的设置
i 忽略闲置和僵尸进程

思考:top命令显示的监控信息,是如何计算出来的?是使用/proc目录下的文件吗?

详细参数

基本输出结果如下:

[storm@cib02166 ~]$ top
top - 09:34:07 up 187 days, 28 min,  3 users,  load average: 0.25, 0.29, 0.16
Tasks: 512 total,   1 running, 511 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.8%us,  1.6%sy,  0.0%ni, 95.1%id,  0.0%wa,  0.0%hi,  0.5%si,  0.0%st
Mem:  32838576k total, 23395280k used,  9443296k free,  1227016k buffers
Swap: 65535992k total,   278940k used, 65257052k free, 12226520k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                
 4983 storm     20   0 9740m 312m  13m S 63.6  1.0   3697:59 java  
29907 jmxtrans  20   0 5488m 138m 5232 S  3.9  0.4   1121:42 java 
31207 storm     20   0 15296 1472  840 R  3.9  0.0   0:00.03 top 
  846 root      20   0     0    0    0 S  1.9  0.0  24:17.63 flush-8:0
	3 root      RT   0     0    0    0 S  0.0  0.0   2:32.38 migration/0

基本信息与系统负载

top - 09:34:07 up 187 days, 28 min, 3 users, load average: 0.25, 0.29, 0.16

系统当前时间 、系统到目前为止已运行的时间、当前登录系统的用户数量、系统负载(任务队列的平均长度)三个值分别为1分钟、5分钟、15分钟前到现在的平均值。

系统进程信息

Tasks: 512 total, 1 running, 511 sleeping, 0 stopped, 0 zombie

processes 自最近一次刷新以来的运行进程总数。这些进程被分为:正在运行的,休眠的,停止运行的和僵尸的,数字表示的是相应类型进程的数目。

CPU状态信息

Cpu(s): 2.8%us, 1.6%sy, 0.0%ni, 95.1%id, 0.0%wa, 0.0%hi, 0.5%si, 0.0%st

CPU states 显示用户模式、系统模式、优先级进程(只有优先级为负的列入考虑)和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中,所以总的百分比将大于100%。

各部分所表达的意思如下所示:

内存使用信息

Mem: 3991724k total, 3388492k used, 603232k free, 212624k buffers

Mem 内存使用情况统计,其中包括总的内存、已用内存、空闲内存,内存缓存的情况。

交换空间信息

Swap: 7815580k total, 12144k used, 7803436k free, 2569748k cached

Swap 交换空间统计,其中包括总的交换空间、已用交换空间、可用交换空间和已交换内容的信息。

进程详细信息

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

简要介绍:

Top