将来的你
一定会感谢现在拼命努力的自己

Linux系统监控、诊断工具之top命令详解

暂时没有写作灵感,就整理一些 Linux 基础知识好了,方便自己查阅,同时也是温故而知新嘛~!

在三叶运维,同样很有用的知识性博文还有以下几篇,也许你也会比较感兴趣:

详解 Linux 系统的 CPU 负载均值

教你如何查看 Linux 的 CPU 负载

Linux 服务器的进程查看命令详解

Llinux 文件目录权限及 chmod 命令简析

Linux 系统内存监控、性能诊断工具 vmstat 命令详解

Ps:更多相关博文,请访问系统运维 或 站内搜索,当然有其他 Linux 相关知识的需求也欢迎留言。

接触 linux 的人对于 top 命令可能不会陌生(不同系统名字可能不一样,如 IBM 的 aix 中叫 topas ),它的作用主要用来监控系统实时负载率、进程的资源占用率及其它各项系统状态属性是否正常。

下面我们先来看张 top 命令的截图:Linux系统监控、诊断工具之top命令详解

(1)系统、任务统计信息:

前 8 行是系统整体的统计信息。第 1 行是任务队列信息,同 uptime 命令的执行结果。其内容如下:

01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60,0.48 系统负载,即任务队列的平均长度。
三个数值分别为 1 分钟、5 分钟、15 分钟前到现在的平均值。注意:这三个值可以用来判定系统是否负载过高——如果值持续大于系统 cpu 个数,就需要优化你的程序或者架构了。

(2)进程、 cpu 统计信息:

第 2~6 行为进程和 CPU 的信息。当有多个 CPU 时,这些内容可能会超过两行。内容如下:

Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用 CPU 百分比
1.0% sy 内核空间占用 CPU 百分比
0.0% ni 用户进程空间内改变过优先级的进程占用 CPU 百分比
98.7% id 空闲 CPU 百分比
0.0% wa 等待输入输出的 CPU 时间百分比
0.0% hi Hardware IRQ 即“中断请求”的意思。
0.0% si Software IRQ

(3)最后两行为内存信息:

Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。

PS:如何计算可用内存和已用内存?

除了 free -m 之外,也可以看 top:

3.1  实际的程序可用内存数怎么算呢?

The answer is: free + (buffers + cached)

88024k + (25068k + 85724k) = 198816k

3.2  程序已用内存数又怎么算呢?

The answer is: used – (buffers + cached)

167568k – (25068k + 85724k) = 56776k

3.3  怎么判断系统是否内存不足呢?

如果你的 swap used 数值大于 0 ,基本可以判断已经遇到内存瓶颈了,要么优化你的代码,要么加内存。

3.4  buffer 与 cache 的区别

A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use 从应用程序角度来看,buffers/cached 是等于可用的,因为 buffer/cached 是为了提高文件读写的性能,当应用程序需在用到内存的时候,buffer/cached 会很快地被回收。

所以从应用程序的角度来说,【可用内存】=【系统 free memory】+【buffers】+【cached】

buffers 是指用来给块设备做的缓冲大小,他只记录文件系统的 metadata 以及 tracking in-flight pages.
cached 是用来给文件做缓冲。

那就是说:buffers 是用来存储,目录里面有什么内容,权限等等。而 cached 直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次 cat 一个比较大的日志文件,比如 nginx 的 access.log,你就可以明显的感觉到第二次的开打的速度快很多。

因为 Linux 将你暂时不使用的内存作为文件和数据缓存,以提高系统性能,当你需要这些内存时,系统会自动释放(不像 windows 那样,即使你有很多空闲内存,他也要访问一下磁盘中的 pagefiles)

(4)进程信息区:

统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

序号 列名 含义
a PID 进程 id
b PPID 父进程 id
c RUSER Real user name
d UID 进程所有者的用户 id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice 值。负值表示高优先级,正值表示低优先级
j P 最后使用的 CPU,仅在多 CPU 环境下有意义
k %CPU 上次更新到现在的 CPU 时间占用百分比
l TIME 进程使用的 CPU 时间总计,单位秒
m TIME+ 进程使用的 CPU 时间总计,单位 1/100 秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位 kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位 kb。
q RES 进程使用的、未被换出的物理内存大小,单位 kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位 kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位 kb
t SHR 共享内存大小,单位 kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h

(5)查看指定列

默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。
可以通过下面的快捷键来更改显示内容:

5.1 f 键选择显示内容

通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。

5.2 o 键改变显示顺序

按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。

5.3 F/O 键将进程按列排序

按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。

(6)常用交互命令

从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了 s 选项,则可能其中一些命令会被屏蔽掉。

(7)最后的技能:top 命令小技巧

12、增强版的 top:htop ,一个更加强大的交互式进程管理器:

Linux系统监控、诊断工具之top命令详解

赞(0) 打赏
声明:本站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,若涉及侵权请及时告知,将会在第一时间删除,联系邮箱:contact@3yyy.top。文章观点不代表本站立场。本站原创内容未经允许不得转载:三叶运维 » Linux系统监控、诊断工具之top命令详解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏