CentOS进程管理

CentOS进程管理

笔记

Linux系统中的基本运行单位是进程,通过对系统系统中的进程的管理能够对系统的实时运行状态进行了解和调度。Linux中提供了用于查看、调整和停止进程的命令。本文仍然以RHEL6说明Linux系统的进程管理。


一、进程概述

程序是保存在存储介质中的可执行机器代码(或指令)和数据的集合,而进程是在计算机处理器执行中的计算机程序。他们的关系如下:

·程序是保存在外部存储介质中的可执行代码和数据,是静态保存的代码。 
·进程是程序代码在处理器中的运行,是动态执行的代码。 
·操作系统在执行程序时,将代码有外部存储介质(硬盘)读取到内部存储介质(内存)中,驻留在内存中的程序代码 作为进程在CPU中被动态执行。 
·Linux是多进程操作系统,每个程序启动时可以创建多个进程,与其他程序创建的进程共同运行在Linux内核空间。每 个进程都是一个独立的任务,它们一招操作系统内核制定的规则交替被CPU执行。每个单独的进程运行在自己的虚拟地址空间,并且只能通过安全的内核管理机制与其他进程进行交互。 
·在进程的生存期内将使用许多系统资源,它将使用CPU来运行指令,使用物理内存来保存执行代码和数据,它将打开和使用文件子系统中的文件,并直接或间接地使用系统中的物理设备。

二、查看进程

1、使用ps命令

常用参数: 
a 显示所有用户的所有进程(包括其它用户); 
u 按用户名和启动时间的顺序来显示进程; 
x 显示无控制终端的进程; 
e 显示所有进程,包括没有控制端的进程; 
f 用树形格式来显示进程; 
l 长格式输出; 
w 为了避免详细参数被截断,可以用多个w来让其显示完整(比如说ww或者是www); 
o 需要查看的选项

举例说明:

~ ]#ps aux | more USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root  1  0.0  0.3 193648  6648 ?        Ss   5月06   1:09 /usr/lib/systemd/systemd --system --deserialize 13
root  2  0.0  0.0  0   0 ?        S     May06   0:00 [kthreadd]
root  3  0.0  0.0  0   0 ?        S     May06   0:01 [ksoftirqd/0]
root  5  0.0  0.0  0   0 ?        S<    May月06   0:00 [kworker/0:0H]
root  7  0.0  0.0  0   0 ?        S     May06   0:04 [migration/0]
root  8  0.0  0.0  0   0 ?        S     May06   0:00 [rcu_bh]
root  9  0.0  0.0  0   0 ?        S     May06   2:33 [rcu_sched]
root  10  0.0  0.0  0   0 ?        S     May06   0:05 [watchdog/0]
root  11  0.0  0.0  0   0 ?        S     May06   0:05 [watchdog/1]
root  12  0.0  0.0  0   0 ?        S     May06   0:05 [migration/1]
root  13  0.0  0.0  0   0 ?        S     May06   0:08 [ksoftirqd/1]

ps命令输出中包含的信息:

USER:进程的属主; 
PID :进程的ID; 
PPID :父进程; 
%CPU :进程占用的CPU百分比; 
%MEM :占用内存的百分比; 
NI :进程的NICE值,也就是进程的优先值(-20~19之间),数值越大,优先级越底; 
VSZ :进程虚拟大小; 
RS :驻留中页的数量; 
TTY :终端ID。问号表示是无终端的,也就是系统本身。 
STAT :进程状态 
D Uninterruptible sleep (usually IO) 
R 正在运行可中在队列中可过行的; 
S 处于休眠状态; 
T 停止或被追踪; 
W 进入内存交换(从内核2.6开始无效); 
X 死掉的进程(从来没见过); 
Z 僵尸进程; 
< 优先级高的进程 
N 优先级较低的进程 
L 有些页被锁进内存; 
s 进程的领导者(在它之下有子进程); 
l 多线程 (using CLONE_THREAD, like NPTL pthreads do) 
+ 位于后台的进程组; 
WCHAN :正在等待的进程资源; 
START : 启动进程的时间; 
TIME : 进程消耗CPU的时间; 
COMMAND: 启动进程的命令的名称和参数; 
ps命令的其他用法:

(1)

~]# ps aux |grep httpd                       ###查看httpd程序的进程 root  1879  0.0  1.6  33096  8548 ?        Ss   13:31   0:00 /usr/sbin/httpd
apache  1887  0.0  0.8  33096  4212 ?        S    13:31   0:00 /usr/sbin/httpd

(2)

~]# ps axo pid,%cpu,%mem,comm |grep httpd   ##只查看pid,%cpu,%mem,comm这几项 1879 0.0 1.6 httpd 1887 0.0 0.8 httpd 1888 0.0 0.8 httpd

至于其他的参数,大家可以自行练习一下。

Tips:什么是僵尸进程。通常,造成僵尸进程的成因是因为该进程应该已经执行完毕,或者是因故应该要终止了, 但是该进程的父进程却无法完整的将该进程结束掉,而造成那个进程一直存在内存当中。如果你发现在某个进程的 CMD 后面还接上 时,就代表该进程是僵尸进程。当系统不稳定的时候就容易造成所谓的僵尸进程。也有可能是因为程序写的不完善,或者是使用者的操作习惯不良等等所造成。如果你发现系统中很多僵尸进程时,记得要找出该进程的父进程,然后做个跟踪排除问题!

2、top命令

top命令会在当前终端全屏显示系统运行信息,实时跟踪系统资源的使用情况,显示内容包括CPU、内存占用情况,系统运行进程的列表和每一个进程运行的状态等信息,对于分析系统运行中的问题很有帮助。

[root@Vtest ~]# top

以下是top某一刻的输出信息:

top - 20:49:29 up 9 days, 17:02,  3 users,  load average: 0.00, 0.01, 0.05
Tasks: 198 total,  2 running, 196 sleeping,  0 stopped,  0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1867292 total,  150628 free,  734708 used,  981956 buff/cache
KiB Swap:  2098172 total,  2098172 free,  0 used.  842256 avail Mem 

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND  67748 root  20   0  157708   2324   1564 R   0.3  0.1   0:00.08 top  1 root  20   0  193648   6648   3872 S   0.0  0.4   1:09.78 systemd  2 root  20   0   0   0   0 S   0.0  0.0   0:00.78 kthreadd  3 root  20   0   0   0   0 S   0.0  0.0   0:01.45 ksoftirqd/0  5 root  0 -20  0   0   0 S   0.0  0.0   0:00.00 kworker/0:0H  7 root      rt  0   0   0   0 S   0.0  0.0   0:04.57 migration/0  8 root  20   0   0   0   0 S   0.0  0.0   0:00.00 rcu_bh  9 root  20   0   0   0   0 S   0.0  0.0   2:33.51 rcu_sched  10 root      rt  0   0   0   0 S   0.0  0.0   0:05.65 watchdog/0  11 root      rt  0   0   0   0 S   0.0  0.0   0:05.26 watchdog/1  12 root      rt  0   0   0   0 S   0.0  0.0   0:05.15 migration/1  13 root  20   0   0   0   0 S   0.0  0.0   0:08.54 ksoftirqd/1  15 root  0 -20  0   0   0 S   0.0  0.0   0:00.00 kworker/1:0H  16 root      rt  0   0   0   0 S   0.0  0.0   0:06.32 watchdog/2  17 root      rt  0   0   0   0 S   0.0  0.0   0:03.65 migration/2  18 root  20   0   0   0   0 S   0.0  0.0   0:01.72 ksoftirqd/2  21 root      rt  0   0   0   0 S   0.0  0.0   0:05.62 watchdog/3  22 root      rt  0   0   0   0 S   0.0  0.0   0:03.74 migration/3  23 root  20   0   0   0   0 S   0.0  0.0   0:00.91 ksoftirqd/3  27 root  0 -20  0   0   0 S   0.0  0.0   0:00.00 khelper  28 root  20   0   0   0   0 S   0.0  0.0   0:00.01 kdevtmpfs  29 root  0 -20  0   0   0 S   0.0  0.0   0:00.00 netns  30 root  20   0   0   0   0 S   0.0  0.0   0:01.24 khungtaskd  31 root  0 -20  0   0   0 S   0.0  0.0   0:00.00 writeback  32 root  0 -20  0   0   0 S   0.0  0.0   0:00.00 kintegrityd  33 root  0 -20  0   0   0 S   0.0  0.0   0:00.00 bioset  34 root  0 -20  0   0   0 S   0.0  0.0   0:00.00 kblockd  35 root  0 -20  0   0   0 S   0.0  0.0   0:00.00 md  41 root  20   0   0   0   0 S   0.0  0.0   0:01.18 kswapd0  42 root  25   5   0   0   0 S   0.0  0.0   0:00.00 ksmd  43 root  39  19   0   0   0 S   0.0  0.0   0:15.76 khugepaged  44 root  20   0   0   0   0 S   0.0  0.0   0:00.31 fsnotify_mark  45 root  0 -20  0   0   0 S   0.0  0.0   0:00.00 crypto

我们把输出信息划分为三部分:

1-5行为第一部分:

第1行:

top – 20:49:29 : 当前时间,默认每三秒更新一次。 
up 9 days :系统运行了多长时间,格式为时:分 
3 users :当前登录用户数 
load average: 0.00, 0.01, 0.15 :系统负载,即任务队列的平均长度。三个数值分别为> 1分钟、5分钟、15分钟前到现在的平均值。

第2行:

Tasks: 198 total :系统总的进程数 
2 running :正在运行的进程数 196 
sleeping :休眠状态的进程数 
0 stopped :停止的进程数 
0 zombie :僵尸进程数

第3行:

Cpu(s): 0.0%us :(user mode)用户所占用CPU百分比 
0.1%sy :(system mode)内核所占用CPU百分比 
0.0%ni :(nice)用户进程内改变过优先级的进程占用CPU百分比 
99.9% :id(idle task) 空闲CPU百分比 
0.0%wa :(I/O waiting)等待输入输出的CPU时间百分比(I/O 产生的问题,会严重的影响您的服务器性能,因为I/O是消耗CPU的) 
0.0%hi :(servicing IRQs)硬中断百分比 
0.0%si :(servicing soft IRQs)软中断百分比 
0.0%st :(steal (time given to other DomU instances))虚拟化被偷时间

第4行:

Mem: 1867292 tota :物理内存总量 
734708 used :已使用的物理内存 
150628 free :未使用的物理内存 
981956 buff/cache:内核缓存占用的物理内存

第5行:

Swap: 2098172 total:交换分区总容量 
0k used:已使用的交换分区容量 
2098172 free:未使用的交换分区容量 
842256 avail Mem :缓存的总容量

如果存在未使用的物理内存,则cached占用的是物理内存,如果未使用的物理内存为0,则cached将会占用部分swap分区,那么cached的容量是它占用的物理内存部分加上占用的swap分区的部分。

第6行为第二部分:

此为top的内部命令输入部分,常用命令有:

s 改变top命令的刷新频率(默认是3秒),Change delay from 3.0 to:输入相应的数字 
l 关闭或开启第一行 top 信息 
t 关闭或开启第二行 Tasks 和第三行 Cpus 信息 
m 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息 
N 以 PID 的大小的顺序排列表示进程列表 
P 以 CPU 占用率大小的顺序排列进程列表 
M 以内存占用率大小的顺序排列进程列表 
R 对排列进行反转 
u 显示指定用户的进程,默认是全部用户的进程 
c 显示进程的全路径,默认是只有进程名 
n 或者 # 设置在进程列表所显示进程的数量,但最多是显示满屏 
f 调整top命令显示列表项。如增加GROUP列或UID列等等。但在下次使用top命令,还是原来成默认的。 
k 结束进程 
r 调整进程的优先级(Linux和AIX是从-20到19,HP-UX为0到39),至于如何得到的,可以通过man nice来查看。 
h 显示帮助 
q 退出 top

其余部分为进程信息,top进程信息列表中各列的含义:

PID 进程id 
PPID 父进程id 
RUSER Real user name 
UID 进程所有者的用户id 
USER 进程所有者的用户名 
GROUP 进程所有者的组名 
TTY 启动进程的终端名。不是从终端启动的进程则显示为 ? 
PR 优先级 
NI nice值。负值表示高优先级,正值表示低优先级(Linux和AIX是从-20到19,HP-UX为0到39) 
P 最后使用的CPU,仅在多CPU环境下有意义 
%CPU 上次更新到现在的CPU时间占用百分比 
TIME 进程使用的CPU时间总计,单位秒 
TIME+ 进程使用的CPU时间总计,单位1/100秒 
%MEM 进程使用的物理内存百分比 
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES 
SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。 
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA 
CODE 可执行代码占用的物理内存大小,单位kb 
DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb 
SHR 共享内存大小,单位kb 
nFLT 页面错误次数 
nDRT 最后一次写入到现在,被修改过的页面数 
S 进程状态

D=不可中断的睡眠状态 
R=运行 
S=休眠 
T=跟踪/停止 
Z=僵尸进程 
COMMAND 命令名/命令行 
WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名 
Flags 任务标志

默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过我们上面所说的内部的f命令,来调整列表选项。

原创文章,作者:zero,如若转载,请注明出处:http://www.178linux.com/75831

(0)
zerozero
上一篇 2017-05-15
下一篇 2017-05-15

相关推荐

  • Linux基础–命令帮助的获取及history历史命令

    第一部分    Linux系统如何获取命令帮助     1、命令类型以及简单帮助的获取         linux系统上,基本命令分为两类,一类是内建命令,一类是外部命令。所谓内建命令,是指由linux内核自带的系统命令…

    Linux干货 2016-07-28
  • Linux运维学习历程-第二天-虚拟机的配置

    学习Linux我自己的感觉是可以按Linus的哲学思想来学习 比如一切皆文件,那我们首先可以记住一些重要的常见的路径和文件,并知道有什么作用,这样在初期学习时,我们要干什么时,知道在哪里找;   而命令我们可以每天记忆并练习一些,本身Linux的基本命令都是一下短小精悍的而且有些命令名本身就是英文单词,像date命令就是和系统时间有关的命令用来显示…

    Linux干货 2016-08-03
  • 网络班N22期第三周博客作业

    一、列出当前系统所有已经登录的用户名,且同一个用户登录多次只显示一次 [root@bogon ~]# w  15:17:44 up 15:28,  2 users,  load average: 0.00, 0.00, …

    Linux干货 2016-08-29
  • 零距离接触软RAID0和RAID5以及逻辑卷LVM

    一、创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录 1、首先手动给虚拟机添加两块硬盘 2、添加硬盘后,无需关机,直接让内核扫描添加的磁盘 [root@centos6 ~]# echo '- – -' >&nbsp…

    Linux干货 2016-09-01
  • 文件查找命令find

      在文件系统上常常需要根据文件的各种属性去查找符合条件的文件。在Linux下也有相当优异的查找命令。今天只要将find和locate。find通常不常用,因为速度慢!通常我们先使用locate来进行模糊查找,如果真找不到了,才以find来查找。为什么呢?因为locate是利用数据库来查找数据,所以速度非常快,而且并没有实际查询硬盘比较省时间。 l…

    Linux干货 2016-08-22
  • M22 用户、组学习总结

    Linux系统的登录方式是通过账号和密码。每一个登录账号都有一个主组可能有附加组。Linux内的文件和目录都有所有者和属组,只有相应权限的账户可以对其进行操作,下面我对用户权限相关内容进行了总结。   1、  用户ID,每个用户具有相应的ID号码,主要分为两类:系统ID和用户ID,在Centos6中系统ID为1-499,用户ID >…

    2017-02-22