1、进程简介
进程就是正在运行的一个程序或命令。每个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
任何程序只要在运行,就会产生至少一个进程。对于比较复杂的程序,比如apache,运行时,会产生多个进程。
命令产生的进程一般都是临时的,因为大多数命令运行的时间很短,命令结束后,进程就自动终止了。
2、进程管理的作用
1. 判断服务器的健康状态(最主要的作用)。
主要查看CPU的使用率、内存的占用情况。
Windows系统中通过任务管理器查看计算机的健康状态。
2. 查看系统中所有的进程。
查看所有的进程(包括正常进程和异常进程)。
查看它们对系统资源的占用情况。
如果是进程出现了异常,就找出原因,并尽快恢复正常。
如果是病毒进程,不要直接杀死,而是找到它的本体所在,根除本体。
3. 杀死进程。
优先使用正常终止(关闭)进程。
只有当无法正常终止进程时,才考虑使用强制终止进程的方式。
3、查看系统中的所有进程
查看进程的命令为ps。最常见的用法为 ps aux 。
其中,a代表前台进程,x代表后台进程,u代表进程的发起者。
[root@localhost ~]# ps aux
查看系统中所有的进程,使用BSD(Unix)操作系统格式。
说明:由于使用的是Unix格式,所以aux前不能加短横线;
否则,输出结果的第一行会有报错信息,但几乎没有影响。
上述命令的部分输出信息,如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 2904 1416 ? Ss Jan31 0:01 /sbin/init
每一行代表一个进程。PID为1的进程是init,它是系统启动的第一个进程,是所有其他进程的父进程。
root 2 0.0 0.0 0 0 ? S Jan31 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jan31 0:00 [migration/0]
···
共有11列,分别是USER、PID、%CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME、COMMAND 。
说明如下:
USER:进程是由哪个用户产生的。
PID:进程的id,也称作进程号。
%CPU:进程占用的CPU资源的百分比,占用越高,越浪费资源。
%MEM:进程占用的物理内存的百分比,占用越高,越浪费资源。
VSZ:进程占用的虚拟内存的大小,单位KB。
RSS:进程占用的实际物理内存的大小,单位KB。
TTY:进程是在哪个终端中运行的。其中tty1到tty7代表本地控制台终端,tty1到tty6是本地的字符界面终端,tty7是本地的图形界面终端。pts/0-255代表虚拟终端(即远程登录终端)。
STAT:进程的状态。常见的进程状态有:R 正在运行;S 睡眠状态;T 停止状态;s 包含子进程;+ 位于后台。
START:进程是在什么时间启动的。
TIME:进程占用CPU的运算时间,值越大,越耗费资源。
COMMAND:产生进程的命令,也就是进程的全名。
[root@localhost ~]# ps -le
查看系统中所有的进程,使用Linux标准命令格式。-l代表显示进程的详细信息,-e代表显示所有进程。
它和ps aux的输出结果差不多,只不过没有ps aux显示的直观易懂。故用得较少。
说明:查看系统中所有的进程的命令主要是ps aux。
4、查看服务器的健康状态
[root@localhost ~]# top [选项]
选项:
-d 秒数:指定top命令每隔几秒更新一次。默认是3秒。
在top命令的交互模式中,可以执行的命令主要有:
? 或 h 显示交互模式的帮助信息。
P 以CPU占用率排序,默认排序。
M 以内存的占用率排序。
N 以进程的PID排序。
R 切换降序排列和升序排序。默认降序。
q 退出。或者用Ctrl+C。
常见用法:
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
4527 root 20 0 2676 1120 888 R 0.3 0.1 0:00.61 top
1 root 20 0 2904 1416 1208 S 0.0 0.1 0:01.56 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
top命令最重要的输出信息在前五行。
第一行是任务队列信息。
top - 12:26:46 up 1 day, 13:32, 2 users, load average: 0.00, 0.00, 0.00
内容 | 说明 |
---|---|
12:26:46 | 系统当前的时间。 |
up 1 day, 13:32 | 系统的运行时间。本机已连续运行1天13小时32分钟。 |
2 users | 当前登录了2个用户(包括本地登录和远程登录)。 |
load average: 0.00, 0.00, 0.00 | 系统在1分钟、5分钟、15分钟之前的平均负载。对于单核服务器,平均负载小于1时,说明负载较小;如果大于1,说明系统已超出负荷。(四核就以4为标准。) |
第二行是进程信息。
Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie
内容 | 说明 |
---|---|
95 total | 系统的进程总数。 |
1 running | 正在运行的进程数。 |
94 sleeping | 睡眠的进程数。 |
0 stopped | 正在停止的进程数。 |
0 zombie | 僵尸进程数。如果不是0,需要手工检查僵尸进程。 |
僵尸进程是指进程正在终止,但还没有终止完全。过一会儿再查看,如果终止完全了就没事;否则,需要手工将其终止。
第三行是CPU信息。
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
内容 | 说明 |
---|---|
0.1%us | 用户占用的CPU百分比。 |
0.1%sy | 系统占用的CPU百分比。 |
0.0%ni | 改变过优先级的用户进程占用的CPU百分比。 |
99.7%id | 空闲CPU的百分比。(最重要) |
0.1%wa | 等待输入/输出的进程占用的CPU百分比。 |
0.0%hi | 硬中断请求服务占用的CPU百分比。 |
0.1%si | 软中断请求服务占用的CPU百分比。 |
0.0%st | steal time 虚拟时间百分比。就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比。 |
第四行是物理内存信息。
Mem: 625344k total, 571504k used, 53840k free, 65800k buffers
内容 | 说明 |
---|---|
625344k total | 物理内存的总大小,单位KB。 |
571504k used | 已使用的物理内存大小。 |
53840k free | 空闲的物理内存大小。(最重要) |
65800k buffers | 作为缓冲的内存大小。 |
第五行是交换分区(swap)信息。
Swap: 524280k total, 0k used, 524280k free, 409280k cached
内容 | 说明 |
---|---|
524280k total | 交换分区(虚拟内存)的总大小,单位KB。 |
0k used | 已使用的交换分区的大小。 |
524280k free | 空闲的交换分区的大小。 |
409280k cached | 作为缓存的交换分区的大小。 |
对于前五行信息,最主要进行查看的指标有三个:
服务器的平均负载
CPU的空闲率
内存(物理内存)的空闲大小
对于第七行及后面的行,它和ps aux的输出结果类似。
5、查看进程树pstree
[root@localhost ~]# pstree [选项]
选项:
-p 显示所有进程(主进程和子进程)的PID(进程号)。
-u 显示进程的所属用户。
常见用法:
[root@localhost ~]# pstree
init─┬─auditd───{auditd}
├─console-kit-dae───63*[{console-kit-da}]
├─crond
├─dbus-daemon───{dbus-daemon}
├─dhclient
├─httpd───8*[httpd]
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─5*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───pstree
└─udevd───2*[udevd]
如上,init进程是所有进程的父进程;同时,对于apache的进程(httpd),有1个主进程和8个子进程。
如果想看到更为详细的进程树信息,可以用:
[root@localhost ~]# pstree -p
查看所有进程的进程号。