1-linux 性能操作 top ps

linux 性能

###

一,top

top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。

输入top,就会动态展示下面的信息

####

分成两部分:

统计信息:前五行是系统整体的统计信息;

进程信息:统计信息下方类似表格区域显示的是各个进程的详细信息,默认5秒刷新一次。

####

1 统计信息说明:

 

 

第1行:Top 任务队列信息(系统运行状态及平均负载)

第1段:系统当前时间,例如:16:07:37

第2段:系统运行时间,未重启的时间,时间越长系统越稳定。 格式:up xx days, HH:MM。例如:5 days, 17:54, 表示连续运行了5天17小时54分钟

第3段:当前登录用户数,例如:1 user,表示当前只有1个用户登录

第4段:系统负载,即任务队列的平均长度,3个数值分别统计最近1,5,15分钟的系统平均负载

系统平均负载:单核CPU情况下,0.00 表示没有任何负荷,1.00表示刚好满负荷,超过1侧表示超负荷,理想值是0.7;
多核CPU负载:CPU核数 * 理想值0.7 = 理想负荷,例如:4核CPU负载不超过2.8何表示没有出现高负载。

 

第2行:Tasks 进程相关信息

第1段:进程总数,例如:Tasks: 121 total,表示总共运行121个进程

第2段:正在运行的进程数,例如:1 running,表示正在运行1个进程

第3段:睡眠的进程数,例如:120 sleeping,表示120个睡眠进程

第4段:停止的进程数,例如:0 stopped,表示0个stop进程

第5段:僵尸进程数,例如:0 zombie,表示0个僵尸进程

 

第3行:Cpus CPU相关信息,如果是多核CPU,按数字1可显示各核CPU信息,此时1行将转为Cpu核数行,数字1可以来回切换。

第1段:us 用户空间占用CPU百分比,例如:Cpu(s): 0.3% us

第2段:sy 内核空间占用CPU百分比,例如:0.3% sy

第3段:ni 用户进程空间内改变过优先级的进程占用CPU百分比,例如:0.0%ni,

第4段:id 空闲CPU百分比,例如:99.3 %id

第5段:wa 等待输入输出的CPU时间百分比,例如:0.0%wa

第6段:hi CPU服务于硬件中断所耗费的时间总额,例如:0.0%hi

第7段:si CPU服务软中断所耗费的时间总额,例如:0.0%si

第8段:st Steal time 虚拟机被hypervisor偷去的CPU时间(如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)

 

第4行:Mem 内存相关信息

第1段:物理内存总量,例如:Mem:1882736 total

第2段:使用的物理内存总量,例如:82100 used

第3段:空闲内存总量,例如:Mem:1013200 free

第4段:用作内核缓存的内存量,例如:787436 buffers

 

第5行:Swap 交换分区相关信息

第1段:交换区总量,例如:Swap: 524284 total

第2段:使用的交换区总量,例如:0 used

第3段:空闲交换区总量,例如:524284 free

第4段:缓冲的交换区总量,190468 cached

 

2 进程信息说明:  

2.1 配置

top支持的字段很多,可以配置是否展示,可以排序,等

在top命令中按f按可以查看显示的列信息,按对应字母来开启/关闭列,大写字母表示开启,小写字母表示关闭。带*号的是默认列。

A: PID = (Process Id) 进程Id;
E: USER = (User Name) 进程所有者的用户名;
H: PR = (Priority) 优先级
I: NI = (Nice value) nice值。负值表示高优先级,正值表示低优先级
O: VIRT = (Virtual Image (kb)) 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
Q: RES = (Resident size (kb)) 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
T: SHR = (Shared Mem size (kb)) 共享内存大小,单位kb
W: S = (Process Status) 进程状态。D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
K: %CPU = (CPU usage) 上次更新到现在的CPU时间占用百分比
N: %MEM = (Memory usage (RES)) 进程使用的物理内存百分比
M: TIME+ = (CPU Time, hundredths) 进程使用的CPU时间总计,单位1/100秒
b: PPID = (Parent Process Pid) 父进程Id
c: RUSER = (Real user name)
d: UID = (User Id) 进程所有者的用户id
f: GROUP = (Group Name) 进程所有者的组名
g: TTY = (Controlling Tty) 启动进程的终端名。不是从终端启动的进程则显示为 ?
j: P = (Last used cpu (SMP)) 最后使用的CPU,仅在多CPU环境下有意义
p: SWAP = (Swapped size (kb)) 进程使用的虚拟内存中,被换出的大小,单位kb
l: TIME = (CPU Time) 进程使用的CPU时间总计,单位秒
r: CODE = (Code size (kb)) 可执行代码占用的物理内存大小,单位kb
s: DATA = (Data+Stack size (kb)) 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
u: nFLT = (Page Fault count) 页面错误次数
v: nDRT = (Dirty Pages count) 最后一次写入到现在,被修改过的页面数
y: WCHAN = (Sleeping in Function) 若该进程在睡眠,则显示睡眠中的系统函数名
z: Flags = (Task Flags <sched.h>) 任务标志,参考 sched.h
X: COMMAND = (Command name/line) 命令名/命令行

注意,centos7可以使用'd' or <Space> toggles display

###

2.2 top命令选项

-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。

###

2.3 top命令交互 很重要,可以提高你的操作效率,看你想看的东西

基础操作

1:显示CPU详细信息,每核显示一行
d / s :修改刷新频率,单位为秒
h:可显示帮助界面
n:指定进程列表显示行数,默认为满屏行数
q:退出top

面板隐藏显示

l:隐藏/显示第1行负载信息;
t:隐藏/显示第2~3行CPU信息;
m:隐藏/显示第4~5行内存信息;

进程列表排序

M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;

 

###

二,ps

###

Linux 中的 ps 命令是 Process Status 的缩写。ps 命令用来列出系统中 当前正在运行 的那些进程,就是执行 ps 命令的那个时刻的那些进程的快照。

使用该命令可以确定有哪些进程 正在运行 和 运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。

ps 查看的结果不是动态连续的,如果想要动态的显示进程信息,就可以使用 top、htop 命令。

kill 命令用于杀死进程。

示例:

批量杀死gunicorn:ps -ef | grep gunicorn |  grep -v grep | awk '{print $3}' | xargs sudo kill -9   

一旦你知道Firefox处理PID以终止所有PID,请输入:kill -9 2551 2514 1963 1856 1771

当然也可以终止一个,kill -9 2551

####

ps --help 可以查看ps使用的帮助信息

man ps 也可以查看帮助信息

###

1 linux上进程有5种状态

5 种进程状态

1. 运行 ( 正在运行或在运行队列中等待 )
2. 中断 ( 休眠中, 受阻, 在等待某个条件的形成或接受到信号 )
3. 不可中断 ( 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生 )
4. 僵死 ( 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放 )
5. 停止 ( 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行 )


ps 工具标识进程的 5 种状态码:

D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process

###

2  示例

下面可以通过示例看看效果:

[root@lsbhjshyn ~]# ps aux

[root@ lsbhjshyn ~]# ps -lA

[root@ lsbhjshyn ~]# ps axjf

参数:

-A :所有的进程均显示出来,与 -e 具有同样的效用;

-a : 显示现行终端机下的所有进程,包括其他用户的进程;

-u :以用户为主的进程状态 ;

x :通常与 a 这个参数一起使用,可列出较完整信息。

输出格式规划:

l :较长、较详细的将该 PID 的的信息列出;

j :工作的格式 (jobs format)

-f :做一个更为完整的输出。

特别说明:

由于 ps 能够支持的系统类型相当的多,所以他的参数多的离谱!

而且有没有加上 - 差很多!详细的用法应该要参考 man ps 喔!

 

3 将目前属于您自己这次登入的 PID 与相关信息列示出来

ps -l 将目前属于您自己这次登入的 PID 与相关信息列示出来

返回参数的解释:

# 各相关信息的意义为:

# F 代表这个程序的旗标 (flag), 4 代表使用者为 superuser;

# S 代表这个程序的状态 (STAT); 具体可以看上面的状态码,

# UID 代表执行者身份

# PID 进程的ID号!底下的 PPID 则父进程的ID;

# C CPU 使用的资源百分比

# PRI指进程的执行优先权(Priority的简写),其值越小越早被执行;

# NI 这个进程的nice值,其表示进程可被执行的优先级的修正数值。

# ADDR 这个是内核函数,指出该程序在内存的那个部分。如果是个执行的程序,一般就是『 - 』

# SZ 使用掉的内存大小;

# WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作;

# TTY 登入者的终端机位置啰;

# TIME 使用掉的 CPU 时间。

# CMD 所下达的指令名称

###

4 ps 命令常用用法(方便查看系统进程)

1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。
2)ps -A 显示所有进程。
3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
4)ps -e 此参数的效果和指定"A"参数相同。
5)ps e 列出程序时,显示每个程序所使用的环境变量。
6)ps f 用 ASCII 字符显示树状结构,表达程序间的相互关系。
7)ps -H 显示树状结构,表示程序间的相互关系。
8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
9)ps s 采用程序信号的格式显示程序状况。
10)ps S 列出程序时,包括已中断的子程序资料。
11)ps -t<终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。
12)ps -u root  显示root用户信息
13)ps x   显示所有程序,不以终端机来区分。

 

5 列出目前所有的正在内存当中的程序

ps -aux 最常用的方法,然后再利用一个管道符号导向到 grep 去查找特定的进程,
然后再对特定的进程进行操作。
ps aux 列出目前所有的正在内存当中的程序

ps -ef 显示所有进程信息,连同命令行
ps -ef | grep ssh ps 与grep 常用组合用法,查找特定进程

ps -axjf 列出类似程序树的程序显示
ps aux | egrep '(cron|syslog)' 找出与 cron 与 syslog 这两个服务有关的 PID 号码

 

返回参数的解释:

• USER:该进程属于那个使用者账号的?

• PID :该进程的进程ID号。

• %CPU:该进程使用掉的 CPU 资源百分比;

• %MEM:该进程所占用的物理内存百分比;

• VSZ :该进程使用掉的虚拟内存量 (Kbytes)

• RSS :该进程占用的固定的内存量 (Kbytes)

• TTY :该进程是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。

• STAT:该程序目前的状态,主要的状态有:

   R :该程序目前正在运作,或者是可被运作;

   S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。

   T :该程序目前正在侦测或者是停止了;

   Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态

• START:该进程被触发启动的时间;

• TIME :该进程实际使用 CPU 运作的时间。

• COMMAND:该程序的实际指令为什么?

这个命令跟上,grep,就是查询进程的最常用的方式了,

####

 

####

posted @ 2021-11-15 19:21  技术改变命运Andy  阅读(80)  评论(0编辑  收藏  举报