top命令

top命令经常用来监控Linux的系统状况,比如cpu,内存使用。下面我们来解释一下该命令显示信息的含义:

linux命令积累(1)——top/ps/kill命令的使用_用户登录


第一行

10:01:23 当前系统时间;

126 days, 14:29 系统已经运行了126天14小时29分钟;

2 users 当前有2个用户登录系统;

load average: 1.15, 1.42, 1.44 load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第二行Tasks 任务(进程),系统现在共有183个进程,其中处于运行中的有1个,182个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
第三行6.7% us: 用户空间占用CPU的百分比。
0.4% sy: 内核空间占用CPU的百分比。
0.0% ni: 改变
过优先级的进程占用CPU的百分比;
92.9% id: 空闲CPU百分比;
0.0% wa: IO等待占用CPU的百分比;
0.0% hi: 硬中断(Hardware IRQ)占用CPU的百分比;
0.0% si: 软中断(Software Interrupts)占用CPU的百分比;

第四行

内存状态

8306544k total 物理内存总量(8GB)
7775876k used 使用中的内存总量(7.7GB)
530668k free 空闲内存总量(530M)
79236k buffers 缓存的内存量 (79M)

第五行

swap交换分区

2031608k total 交换区总量(2GB)
2556k used 使用的交换区总量(2.5M)
2029052k free 空闲交换区总量(2GB)
4231276k cached 缓冲的交换区总量(4GB)
第六行

空行

第七行


各进程(任务)的状态监控

PID:进程id
USER:进程所有者
PR:进程优先级
NI:nice值。负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:共享内存大小,单位kb
S:进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU:上次更新到现在的CPU时间占用百分比
%MEM:进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 进程名称(命令名/命令行)

多U多核CPU监控

注:第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:530668+79236+4231276 = 4.7GB。

对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

其他操作:

(1)按键盘数字1,可监控每个逻辑CPU的状况;

(2)改变进程显示字段

1. 敲击f键,top进入另一个视图,在这里可以编排基本视图中的显示字段:

linux命令积累(1)——top/ps/kill命令的使用_百分比_02

这里列出了所有可在top基本视图中显示的进程字段,有*并且标注为大写字母的字段是可显示的,没有*并且是小写字母的字段是不显示的。如果要在基本视图中显示CODE和DATA两个字段,可以通过敲击r和s键,回车返回基本视图,可以看到多了CODE和DATA两个字段。


PS命令

ps命令是Process status的缩写,用来列出当前正在运行的那些进程。 ps 命令是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。linux中有五种状态:运行(R)、中断(S)、不可中断(D)、僵死(Z)、停止(T)

命令格式:ps [参数]

参数:

a  显示所有进程

-a 显示同一终端下的所有程序

-A 显示所有进程

c  显示进程的真实名称

-N 反向选择

-e 等于“-A”

e  显示环境变量

f  显示程序间的关系

-H 显示树状结构

r  显示当前终端的进程

T  显示当前终端的所有程序

u  指定用户的所有进程

-au 显示较详细的资讯

-aux 显示所有包含其他使用者的行程 

-C<命令> 列出指定命令的状况

--lines<行数> 每页显示的行数

--width<字符数> 每页显示的字符数

--help 显示帮助信息

--version 显示版本显示

常用命令有:

1、列出所有运行进程(ps -ef, ps -aux)

2、基于用户或运行的程序来列出进程 (ps -u, ps -C) 

-u选项用来显示只属于此user的进程。多个用户时使用逗号隔开。例:$ ps -f -u user1,user2

3、列出目前所有程序的详细信息:ps -aux

开头字段的解释:

USER
 PID 
%CPU 
%MEM
VSZ 
RSS 
TTY
STAT
 START
TIME
用户名
用户ID
cpu占用率
内存占用率
虚存使用大小
 进程使用的实际内存大小
与进程关联的终端
进程状态
进程启动的时间和日期进程使用的总CPU时间 
COMMAND









正在执行的命令行命令










ps命令通常与管道结合起来查看进程,例如我们使用ps命令查看系统中的僵尸进程,僵尸进程的状态标记为Z:ps aux | grep -w 'Z'

PK: ps & top

ps是一次性显示当前进程的运行状态,而top则是动态显示,可以通过按键不断刷新当前状态。


Kill命令

kill命令用来终止一个进程。

格式:

kill [ -s signal | -p ] [ -a ] pid ... 
kill -l [ signal ]  

参数:

-s:指定发送的信号。 
-p:模拟发送信号。 
-l:指定信号的名称列表。 
pid:要中止进程的ID号。 
Signal:表示信号。通过man 7 查看signal有哪些

-1 :重新读取一次参数的设定档 (类似 reload);
-2 :代表与由键盘输入 [ctrl]-c 同样的动作;
-9 :立刻强制删除一个工作;
-15:以正常的程序方式终止一项工作。与 -9 是不一样的。

 kill命令的工作原理:kill 命令向linux系统的内核发送一个操作信号和进程的标识符,然后内核根据给定进程标识符对进程进行操作。当一个进程出错造成系统死锁时,可以切换到其他虚拟控制台工作关闭这个程序。linux中,常用ALT+CTRL+Fn(1-7)切换控制台。

kill 的使用:

(1)强行终止一个进程标识号为324的进程:#kill -9 324 

(2)解除Linux系统的死锁

在Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态。此时一般不用重新启动计算机,只需要中止(或者说是关闭)这个有问题的程序即可。当kill处于X-Window界面时,主要的程序(除了崩溃的程序之外)一般都已经正常启动了。此时打开一个终端,在那里中止有问题的程序。比如,如果Mozilla浏览器程序出现了锁死的情况,可以使用kill命令来中止所有包含有Firefox浏览器的程序。首先用top命令查处该程序的 PID,然后使用kill命令停止这个程序: 
#kill -SIGKILL XXX 
其中,XXX是包含有Firefox浏览器的程序的进程标识号。 

(3)使用命令回收内存 
我们知道内存对于系统是非常重要的,回收内存可以提高系统资源。kill命令可以及时地中止一些“越轨”的程序或很长时间没有相应的程序。例如,使用top命令发现一个无用 (Zombie) 的进程,此时可以使用下面命令: 
#kill -9 XXX 
其中,XXX是无用的进程标识号

(4)killall命令 
Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如: 
# killall -HUP inetd 

(5)绝杀 kill -9 PID 
or: kill -s SIGKILL 
这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。 
当使用此命令时,一定要通过ps -ef确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被init收养,问题就比较严重了。杀死init进程意味着关闭系统。 
如果系统中有僵尸进程,并且其父进程是init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了。