linux中,ps命令和top命令的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中,ps命令和top命令的区别相关的知识,希望对你有一定的参考价值。

参考技术A

ps

ps(即进程状态)命令用于提供有关当前正在运行的进程的信息,包括其进程标识号(PID)。

进程,也称为任务,是程序的执行(即,运行)实例。系统为每个进程分配一个唯一的PID。

ps的基本语法是

ps [options]

当没有任何选项使用ps时,它会发送到标准输出,默认情况下是显示监视器,系统上当前至少有两个进程的四项信息:shell和ps。shell是一个程序,它在类Unix操作系统中提供传统的纯文本用户界面,用于发出命令并与系统交互,默认情况下在Linux上是bash。ps本身是一个进程,一旦显示输出它就会死掉(即终止)。

top

我想从最明显的工具开始。top命令提供正在运行的系统的动态实时视图。该系统摘要中包括基于每个进程检查内存使用情况的功能。这非常重要,因为您可以轻松地对同一命令的多次迭代消耗不同的内存量。虽然你不会在无头服务器上找到它,但是你已经打开Chrome并发现你的系统速度变慢了。发出top命令以查看Chrome有多个进程在运行(每个选项卡一个 - 图1)。

更详细的对比看这里:5个命令检查Linux中内存使用情况,含TOP和PS

Linux--命令大全/常用命令--管理类--内存/磁盘/进程--top/free/du/df/ps/pstree/kill/killall

 ​

简介

        本文介绍Linux的管理类命令,包括内存、磁盘、进程。相关命令有:top/free/du/df/ps/pstree/kill/killall

top

简介

简介

实时显示系统中各个进程的资源占用状况,包括:进程ID、CPU占用率、内存占用率 等

命令示例

命令

作用

top -Hp PID

显示一个进程中各个线程CPU的占用率

top -d 1

每1秒刷新一次

top -p 15273

只让 top 命令查看某个进程

top -b -n 1 > /root/top.log


把 top 命令的执行结果重定向到文件中。

果在操作终端执行 top 命令,则并不能看到系统中所有的进程,默认看到的只是 CPU 占比靠前的进程。如果我们想要看到所有的进程,则可以把 top 命令的执行结果重定向到文件中。


选项


选项



含义



-b



批处理模式输出。一般和"-n"选项合用,把输出重定向到文件中;



-c



显示整个命令行而不只是显示命令名



-d 秒数



指定 top 命令每隔几秒更新。默认是 3 秒;



-i 



使top不显示任何闲置或者僵死进程。



-H



线程模式(Threads-Mode)。只显示一个进程中的线程。



-n 次数



指定 top 命令执行的次数。一般和"-"选项合用;



-p 进程PID



仅查看指定 ID 的进程;



-S



指定累计模式



-s



使 top 命令在安全模式中运行,避免在交互模式中出现错误;



-u 用户名



只监听某个用户的进程;


交互命令

在 top 命令的显示窗口中,还可以使用如下按键,进行交互操作:

  • ? 或 h:显示交互模式的帮助;
  • P:按照 CPU 的使用率排序,默认就是此选项;
  • M:按照 内存的使用率排序;
  • N:按照 PID 排序;
  • T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
  • k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
  • r:按照 PID 给某个进程重设优先级(Nice)值;
  • q:退出 top 命令;

结果含义

[root@localhost ~]# top
top - 12:26:46 up 1 day, 13:32, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.7%id, 0.1%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 625344k total, 571504k used, 53840k free, 65800k buffers
Swap: 524280k total, 0k used, 524280k free, 409280k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19002 root 20 0 2656 1068 856 R 0.3 0.2 0:01.87 top
1 root 20 0 2872 1416 1200 S 0.0 0.2 0:02.55 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.15 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
6 root RT 0 0 0 0 S 0.0 0.0 0:10.01 watchdog/0
7 root 20 0 0 0 0 S 0.0 0.0 0:05.01 events/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm
13 root 20 0 0 0 0 S 0.0 0.0 0:01.70 sync_supers
14 root 20 0 0 0 0 S 0.0 0.0 0:00.63 bdi-default
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kintegrityd/0
16 root 20 0 0 0 0 S 0.0 0.0 0:02.52 kblockd/0
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpid
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpi_notify

命令的输出主要分为两部分:

  1. 第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的;
  2. 第二部分从第六行开始,显示的是系统中进程的信息;

 第一部分

  • 第一行为任务队列信息,具体内容如表 1 所示。
      表 1 任务队列信息
    内 容 说 明 12:26:46 系统当前时间 up 1 day, 13:32 系统的运行时间.本机己经运行 1 天 13 小时 32 分钟 2 users 当前登录了两个用户 load average: 0.00,0.00,0.00 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数)
  • 第二行为进程信息,具体内容如表 2 所示。
      表 2 进程信息
    内 容 说 明 Tasks: 95 total 系统中的进程总数 1 running 正在运行的进程数 94 sleeping 睡眠的进程数 0 stopped 正在停止的进程数 0 zombie 僵尸进程数。如果不是 0,则需要手工检查僵尸进程
  • 第三行为 CPU 信息,具体内容如表 3 所示。
      表 3 CPU信息
    内 容 说 明 Cpu(s): 0.1 %us 用户模式占用的 CPU 百分比 0.1%sy 系统模式占用的 CPU 百分比 0.0%ni 改变过优先级的用户进程占用的 CPU 百分比 99.7%id 空闲 CPU 占用的 CPU 百分比 0.1%wa 等待输入/输出的进程占用的 CPU 百分比 0.0%hi 硬中断请求服务占用的 CPU 百分比 0.1%si 软中断请求服务占用的 CPU 百分比 0.0%st st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比
  • 第四行为物理内存信息,具体内容如表 4 所示。
      表 4 物理内存信息
    内 容 说 明 Mem: 625344k total 物理内存的总量,单位为KB 571504k used 己经使用的物理内存数量 53840k&ee 空闲的物理内存数量。我们使用的是虚拟机,共分配了 628MB内存,所以只有53MB的空闲内存 65800k buffers 作为缓冲的内存数量
  • 第五行为交换分区(swap)信息,如表 5 所示。
      表 5 交换分区信息
    内 容 说 明 Swap: 524280k total 交换分区(虚拟内存)的总大小 Ok used 已经使用的交换分区的大小 524280k free 空闲交换分区的大小 409280k cached 作为缓存的交换分区的大小

第二部分


列名称



含义



PID



当前运行进程的ID 



USER


该进程所属的用户


PR


优先级,数值越小优先级越高


NI



(nice)优先级,数值越小、优先级越高。反映一个进程“优先级”状态的值,其取值范围是-20至19, 共40个级别。这个值越小,表示进程”优先级”越高,而值越 大“优先级”越低。一般会把nice值叫做静态优先级 。



VIRT



进程占用的虚拟内存 ,单位为 KB



RES



进程占用的物理内存 ,单位为 KB。



SHR


共享内存大小,单位为 KB。


S



进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示 该进程优先值为负数 



%CPU



进程占用CPU的百分比



%MEM



进程使用的物理内存和总内存的百分比 



TIME+



该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。 



COMMAND



进程的命令名


内存

free

作用

显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

格式

free [-bkmotV][-s <间隔秒数>]

示例

# free -t //以总和的形式查询内存的使用信息
total used free shared buffers cached
Mem: 254772 184868 69904 0 5936 89908
-/+ buffers/cache: 89024 165748
Swap: 524280 65116 459164
Total: 779052 249984 529068

选项

  • -b  以Byte为单位显示内存使用情况。
  • -k  以KB为单位显示内存使用情况。
  • -m  以MB为单位显示内存使用情况。
  • -h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:
    B = bytesK = kilos M = megas G = gigas T = teras
  • -o  不显示缓冲区调节列。
  • -s<间隔秒数>  持续观察内存使用状况。
  • -t  显示内存总和列。
  • -V  显示版本信息。

结果含义


列名称



含义



total



总计物理内存的大小。 



used



已使用多大。 



free



可用有多少。 



Shared



多个进程共享的内存总额。 



Buffers/cached



磁盘缓存的大小。 



-/+buffers/cached)



未知



used



已使用多大; 



free



可用有多少。


磁盘

df

简记

disk filesystem

作用

显示目前Linux系统上的磁盘使用情况。可以获取硬盘占用了多少空间,还剩下多少空间。

通过文件系统中未分配空间来确定系统中已经分配空间的大小。

格式

df [选项] [文件]

选项

-a, --all                                  显示所有文件系统(包含虚拟文件系统)

-B, --block-size=大小          使用指定字节数的块。例如-BM 以 1,248,576字节为单位显示大小。参看SIZE 格式。      

--total                                    显示总计信息

-h, --human-readable          以可读性较好的格式显示尺寸(例如:1K 234M 2G)

-H, --si                                  计算时使用1000 为基底而非1024

-i, --inodes                           显示inode 信息而非块使用量

-k                                          即--block-size=1K

-l, --local                               只显示本机的文件系统

 --no-sync                             取得使用量数据前不进行同步动作(默认)

--sync                                   取得使用量数据前先进行同步动作

-P, --portability                     使用POSIX 兼容的输出格式

-t, --type=类型                      只显示指定文件系统为指定类型的信息

-T, --print-type                       显示文件系统类型

-x, --exclude-type=类型       只显示文件系统不是指定类型信息

-v                    (忽略)

--help                                     显示此帮助信息并退出

--version                               显示版本信息并退出

示例

# df -h 
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 29G 4.2G 23G 16% /
udev 1.5G 4.0K 1.5G 1% /dev
tmpfs 604M 892K 603M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 1.5G 156K 1.5G 1% /run/shm

du

简记

disk usage

简介

一般用了df命令后用du来判断某个目录下是不是有超大文件。

这是面向文件的命令,只计算被文件占用的空间,不计算文件系统 metadata 占用的空间。

作用

显示指定的目录或文件所占用的磁盘空间。

默认以磁盘块单位(一般是1024字节)为单位显示。

格式

 du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件]

示例 

du tmp/ -ah    //显示tmp目录下各个文件大小。最后一行是所有文件大小。

du file1 file2 -h  //显示file1和file2的文件大小。

选项 


参数



含义



-a



显示目录中每个文件的大小。将该标志与 -s 标志进行对比。                           



-b



显示目录或文件大小时,以byte为单位。                         



-c



除了显示每个目录或文件的大小外,同时也显示所有目录或文件的总和。



-D



显示指定符号连接的源文件大小



-h



以K,M,G为单位,提高信息的可读性。



-H



与-h参数相同,但是K,M,G是以1000为换算单位。



-k



以1024 bytes为单位



-l



重复计算硬件连接的文件



-L<符号连接>



显示选项中所指定符号连接的源文件大小。



-m



以1MB为单位。



-s



仅显示总计。



-S



显示每个目录的大小时,并不含其子目录的大小。



-x



以一开始处理时的文件系统为准,

若遇上其它不同的文件系统目录则略过



-X<文件>



在评估文件大小时,只评估那些与 File 参数指定的文件或者目录驻留在相同设备上 的文件。



--exclude=

<目录或文件>



略过指定的目录或文件。



--max-depth=<目录层数>



超过指定层数的目录后,予以忽略。



--help



显示帮助



--version



显示版本信息


lsof

其他网址

​Linux lsof命令详解和使用示例(总结的比较详细)_huangyimo的专栏-CSDN博客​

​Linux 命令(124)—— lsof 命令_Dablelv的博客专栏-CSDN博客_linux124​

简介

说明

        lsof(list open files)用于查看进程打开的文件,是十分方便的系统监测工具。因为 lsof 命令需要访问核心内存和各种系统文件,所以需要 root 权限才可执行。

        在 Linux 系统中,一切皆文件。通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以 lsof 不仅可以查看进程打开的普通文件、目录,还可以查看进程监听的端口等 socket 相关的信息。进程打开的每一个文件,系统在后台都会为之分配一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过 lsof 工具能够查看这个列表,对系统监测以及排错很有帮助。

lsof 查看的打开文件可以是:

  1. 普通文件
  2. 目录
  3. 字符或块设备文件
  4. 共享库
  5. 管道、命名管道
  6. 符号链接
  7. 网络文件(如 NFS file、网络 socket,Unix 域名 socket)
  8. 其它类型的文件

格式

lsof [OPTIONS] [--] [NAMES]

没有任何选项的情况下,lsof 列出所有属于活动进程的打开文件。

选项

-?, -h 

    显示帮助信息

-a

参数被视为逻辑与 AND,会影响全部的参数

-A A

    在配置了 AFS 分布式网络文件系统的系统上可用,其 AFS 内核代码是通过动态模块实现的。通过 A 指定备用名称列表文件,在该文件中可以找到动态模块的内核地址

-b

    避免 lsof 因调用可能阻塞的内核函数而产生阻塞,比如 lstat(2)、readlink(2) 和 stat(2) 等内核函数

-c C

    显示出以字符或字符串 C 开头的命令程序开启的文件,如 lsof -c init。如果 C 以斜杠 / 开头和结尾,则斜杠之间的字符被解释为正则表达式。该选项可多次指定

+c W

    指定 COMMAND 列的宽度,单位字符。默认为 9

-C

    禁用从内核的名称缓存中报告任何路径名

-D D

    指导 lsof 使用设备缓存文件。该选项的使用有时受到限制。-D 必须后面跟着一个函数字母,函数字母后面可以有一个路径名称。lsof 识别以下功能字母:

    ?    报告设备缓存文件路径

    b    构建设备缓存文件

    i    忽略设备缓存文件

    r    读取设备缓存文件

    u    读取并更新设备缓存文件

+D D

    递归搜索目录 D。如显示在 /usr/local 及其子目录下被程序开启的文件:lsof +D /usr/local

+d D

     非递归搜索目录 D。如显示在 /usr/local 下被程序开启的文件:lsof +d /usr/local

-d FD

    指定文件描述符列表,可以采用逗号分隔,也可以指定范围。比如 1,2,3 或 1-3。如果前面包含尖号,表示排除。如显示 FD 为 4 的进程:lsof -d 4

+|-e S

    豁免(exempt)路径名称为 S 的文件系统不受可能阻塞的内核函数调用的影响。+e 选项豁免 stat(2)、lstat(2) 和大多数 readlink(2) 内核函数调用。-e 选项只能豁免 stat(2) 和 lstat(2) 内核函数调用

+|-E

    +E 指定使用端点信息显示 Linux 管道、Linux UNIX 套接字和 Linux 伪终端文件,并显示端点的文件。-E 则不显示端点的文件

-F LIST

    指定字符列表 LIST,选择输出给另一程序处理的字段,各字段对应的字符见下文

+|-f [cfgGn]

    f 本身澄清了路径名参数的解释方式。当后面跟着 c、f、g、G 或 n 时,它指定要启用(+)或抑制(-)内核文件结构信息。

    c 文件结构使用计数(not Linux)

    f 文件结构地址(not Linux)

    g 文件标志缩写(Linux 2.6.22 及更高版本)

    G 十六进制文件标志(Linux 2.6.22 及更高版本)

    n 文件结构节点地址(not Linux)

-g [PGID]

    选择或排除属于指定进程组的进程打开的文件。 进程组 ID 使用逗号分隔,如果 PGID 前面包含尖号,表示排除。若没有指定 PGID,则显示全部。如显示 PGID 为 6 和 7 的进程:lsof -g6,7

-i [I]

    选择其 Internet 地址与 -i 中指定的地址匹配的文件,若没有相关地址被指定,则监听全部。

    用法: lsof -i [46][protocol][@hostname|hostaddr][:serivce|port]

    说明:4 6 分别表示 IPv4 和 IPv6   

    protocol: TCP or UDP   

    hostname:主机名

    hostaddr:IPv4 或 IPv6 地址

    service:主机提供的服务的名称,即 /etc/services 中的 service name

    port:端口号

-K

    在支持任务(线程)报告方式的系统上输出进程的任务(线程)列表

-k K

    指定内核名称列表文件,代替 /vmunix、/mach 等

-l

    禁止将 user ID 转换为登录的名称,默认是登录名称

+|-L [L]

    + 或 - 表示开启或关闭显示文件连接数,如果只有单纯的 +L,后面没有任何数字,则表示显示全部,如果后面有数字,只有文件连接数少于该数字的会被列出

+|-m M

    -m 指定一个内核内存文件 M ,代替 /dev/kmem 或 /dev/mem。+m 将装载补充文件写入标准输出文件

+|-M

    启用或禁用报告本地 TCP、UDP 和 UDPLITE 端口的端口映射器注册

-n

    不将 IP 地址转换为主机名

-N

    显示 NFS 文件

-o

    始终显示文件偏移量。它导致 SIZE/OFF 输出列标题更改为 OFFSET

-o O

    指定在文件偏移量的 0t 之后要打印的小数位数

-O

    指示 lsof 避免被某些内核操作阻塞。即在分叉的子进程中执行它们。虽然使用此选项将减少 lsof 启动开销,但也可能导致 lsof 在内核不响应函数时挂起。谨慎使用此选项

-P

    禁止将网络文件的端口号转换为端口名

-p S

    排除或选择进程的文件列表,进程 ID 列表使用逗号分隔,如 123 或 123,^456。尖号表示排除指定 PID

-R

    使用列 PPID 列出父进程的 PID

+|-r [T[mFMT]]

     控制 lsof 不断重复执行,间隔 T 秒,默认为 15s。-r 永远不断地执行,直到收到中断讯号(ctrl+ c),+r 一直执行,直到没有文件被显示。可选的 mFMT 参数指定标记线的格式,格式 FMT 遵循 C 语言标准库函数 strftime(3) 的规范

-S [T]

    指定内核函数 lstat(2)、readlink(2) 和 stat(2) 的可选超时秒值,否则可能会死锁。t 的最小值是 2;默认值是 15

-s [P:S]

    列出文件的大小,若该文件没有大小,则留下空白。它导致 SIZE/OFF 输出列标题更改为 SIZE。P 表示协议名称 TCP  or  UDP,S 表示逗号分隔的协议状态

-T [T]

    -T 没有参数则禁用 TCP/TPI 信息报告。跟如下参数,则显示指定 TCP/TPI 信息:

    f 选择报告套接字选项,状态和值,以及 TCP标志和值

    q 选择队列长度

    s 选择连接状态

    w 选择窗口大小

-t

    生成只有进程标识符而没有标题的简洁输出,这样输出可以通过管道传递给 kill(1) 杀死

-U

    选择 UNIX 域套接字文件的列表

-u USERS

    选择登录名或用户 ID 位于逗号分隔集 USERS 中的用户的文件列表。如 root 或 548,root”,如果用户名或用户 ID 前有尖号 ^,表示排除

-V

    指示被要求列出但找不到的项

-v

    显示版本信息

+|-w

       启用(+)或禁用(-)警告消息

-X

    Linux 下跳过所有打开的 TCP、UDP 和 UDPLITE IPv4 和 IPv6 文件的信息报告

-x [fl]

    一般与选项 +d 和 +D 选项,指示搜索时是否跨文件系统和符号链接。-x 不跟任何参数时,表示跨文件系统和符号链接

-Z [Z]

    指定如何处理 SELinux 安全上下文。当在运行的 Linux 内核中禁用SELinux时,Z 字段将被抑制输出。-Z 选项不跟参数,如 -Z -,安全上下文将列在 SECURITY-CONTEXT 列中输出

--

    双减号表示选项结束

NAMES

    列出指定文件,符号链接在使用前将被解析

结果含义

无任何参数

命令:lsof

结果:

lsof | head
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 252,1 4096 2 /
systemd 1 root rtd DIR 252,1 4096 2 /
systemd 1 root txt REG 252,1 1616248 47908 /usr/lib/systemd/systemd
systemd 1 root mem REG 252,1 20032 25897 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 252,1 252704 25043 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 252,1 90632 25988 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 252,1 153192 25496 /usr/lib64/liblzma.so.5.0.99
systemd 1 root mem REG 252,1 23968 25065 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 252,1 19888 25018 /usr/lib64/libattr.so.1.1.0

COMMAND:进程的名称

PID:进程标识符

TID:任务 ID。Linux 下 TID 为空表示该行为进程

USER:进程所有者

FD:文件描述符。主要有:

    cwd:应用程序当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改

    txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序

    lnn:库引用(AIX)

    err:FD 信息错误

    jld:监狱目录(FreeBSD)

    ltx:共享库文本(代码和数据)

    mxx:十六进制内存映射类型号 xx

    m86:DOS合并映射文件

    mem:内存映射文件

    mmap:内存映射设备

    pd:父目录

    rtd:根目录

    tr:内核跟踪文件(OpenBSD)

    v86:VP/ix 映射文件

    0:标准输出

    1:标准输入

    2:标准错误

以上是关于linux中,ps命令和top命令的区别的主要内容,如果未能解决你的问题,请参考以下文章

ps aux 命令和 top命令

Linux--命令大全/常用命令--管理类--内存/磁盘/进程--top/free/du/df/ps/pstree/kill/killall

⑩.linux查看各进程占用cpu/内存情况

Linux命令:ps / top

Linux进程和进程优先级(top+ps+kill+renice+df+free命令)

Linux指令ps,top