linux进程管理模块的组成,linux 进程管理命令详解

进程调度

Linux进程调度的目标

1.高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效;

2.加强交互性能:在系统相当的负载下,也要保证系统的响应时间;

3.保证公平和避免饥渴;

4.SMP调度:调度程序必须支持多处理系统;

5.软实时调度:系统必须有效的调用实时进程,但不保证一定满足其要求;

多任务:

多进程同时运行

抢占式多任务

进程分类:

CPU bound: CPU密集型

I/O bound: IO密集型

进程优先级:

140:0-139

1-99:实时优先级,数字越大优先级越高

100-139:数字越小,优先级越高;

进程与线程区别

进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。

线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。"进程——资源分配的最小单位,线程——程序执行的最小单位"

进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

总的来说就是:进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)。

使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计,总的说来,一个进程的开销大约是一个线程开销的30倍左右,当然,在具体的系统上,这个数据可能会有较大的区别。

使用多线程的理由之二是线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。

除了以上所说的优点外,不和进程比较,多线程程序作为一种多任务、并发的工作方式,当然有以下的优点:提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。

使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。

改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。

=============================

从函数调用上来说,进程创建使用fork()操作;线程创建使用clone()操作。

进程管理命令

pstree

进程树查看;

-p: 显示各进程的PID;

显示结果:[root@localhost ~]# pstree

init─┬─auditd───{auditd}

├─console-kit-dae───63*[{console-kit-da}]

├─crond

├─dbus-daemon───{dbus-daemon}

├─login───bash

├─master─┬─pickup

│        └─qmgr

├─5*[mingetty]

├─mysqld_safe───mysqld───20*[{mysqld}]

├─nginx───nginx

├─php-fpm───3*[php-fpm]

├─rsyslogd───3*[{rsyslogd}]

├─sshd───sshd───bash───pstree

└─udevd───2*[udevd]

ps

介绍

对系统中进程进行监测控制

常用选项

组合选项1:aux

a:与终端相关的进程

u:与终端无关的进程

x:以用户为中心组织进程状态信息显示

显示结果[root@localhost ~]# ps aux | head -n10

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root         1  0.0  0.0  19232   524 ?        Ss   Jul31   0:01 /sbin/init

root         2  0.0  0.0      0     0 ?        S    Jul31   0:00 [kthreadd]

root         3  0.0  0.0      0     0 ?        S    Jul31   0:00 [migration/0]

root         4  0.0  0.0      0     0 ?        S    Jul31   0:01 [ksoftirqd/0]

root         5  0.0  0.0      0     0 ?        S    Jul31   0:00 [migration/0]

root         6  0.0  0.0      0     0 ?        S    Jul31   0:01 [watchdog/0]

root         7  0.1  0.0      0     0 ?        S    Jul31   6:55 [events/0]

root         8  0.0  0.0      0     0 ?        S    Jul31   0:00 [cgroup]

root         9  0.0  0.0      0     0 ?        S    Jul31   0:00 [khelper]

USER:进程所属用户

PID:进程ID号

CPU:占用CPU百分比

MEM:占用内存百分比

VSZ: Virtual memory Size(线性地址空间占用的空间大小)

STAT:进程状态

R: running,运行状态;

S:interruptible sleeping,可中断睡眠

D:uniterruptible sleeping, 不可中断睡眠

T: stopped

Z: zombie

s: session leader

+: 前台进程,占据着某终端

l: 多线程进程

<:>

N: 低优先级进程

START: 启动时间

TIME: 占据CPU累积时长

COMMAND: 启动当前进程或线程的命令行程序,[]表示为内核线程;

组合选项2:-ef(注意这里前面有-,而aux前面没有-)

-e: 显示所有进程;

-f: 显示丰富格式信息

显示结果:[root@localhost ~]# ps -ef | head -n30

UID        PID  PPID  C STIME TTY          TIME CMD

root         1     0  0 Jul31 ?        00:00:01 /sbin/init

root         2     0  0 Jul31 ?        00:00:00 [kthreadd]

root         3     2  0 Jul31 ?        00:00:00 [migration/0]

root         4     2  0 Jul31 ?        00:00:01 [ksoftirqd/0]

root         5     2  0 Jul31 ?        00:00:00 [migration/0]

root         6     2  0 Jul31 ?        00:00:01 [watchdog/0]

root         7     2  0 Jul31 ?        00:06:55 [events/0]

root         8     2  0 Jul31 ?        00:00:00 [cgroup]

root         9     2  0 Jul31 ?        00:00:00 [khelper]

root        10     2  0 Jul31 ?        00:00:00 [netns]

root        11     2  0 Jul31 ?        00:00:00 [async/mgr]

root        12     2  0 Jul31 ?        00:00:00 [pm]

root        13     2  0 Jul31 ?        00:00:03 [sync_supers]

root        14     2  0 Jul31 ?        00:00:03 [bdi-default]

root        15     2  0 Jul31 ?        00:00:00 [kintegrityd/0]

root        16     2  0 Jul31 ?        00:00:10 [kblockd/0]

root        17     2  0 Jul31 ?        00:00:00 [kacpid]

root        18     2  0 Jul31 ?        00:00:00 [kacpi_notify]

root        19     2  0 Jul31 ?        00:00:00 [kacpi_hotplug]

root        20     2  0 Jul31 ?        00:00:00 [ata_aux]

root        21     2  0 Jul31 ?        00:00:00 [ata_sff/0]

root        22     2  0 Jul31 ?        00:00:00 [ksuspend_usbd]

root        23     2  0 Jul31 ?        00:00:00 [khubd]

root        24     2  0 Jul31 ?        00:00:00 [kseriod]

root        25     2  0 Jul31 ?        00:00:00 [md/0]

root        26     2  0 Jul31 ?        00:00:00 [md_misc/0]

root        27     2  0 Jul31 ?        00:00:00 [linkwatch]

root        28     2  0 Jul31 ?        00:00:00 [khungtaskd]

root        29     2  0 Jul31 ?        00:00:02 [kswapd0]

PPID:父进程的PID号

组合选项3:-efH

-e(上面已经讲述)

-F: 显示额外信息

-H: 以层级形式显示进程间关系;

显示结果[root@localhost ~]# ps -eFH | head -n20

UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD

root         2     0  0     0     0   0 Jul31 ?        00:00:00 [kthreadd]

root         3     2  0     0     0   0 Jul31 ?        00:00:00   [migration/0]

root         4     2  0     0     0   0 Jul31 ?        00:00:01   [ksoftirqd/0]

root         5     2  0     0     0   0 Jul31 ?        00:00:00   [migration/0]

root         6     2  0     0     0   0 Jul31 ?        00:00:01   [watchdog/0]

root         7     2  0     0     0   0 Jul31 ?        00:06:56   [events/0]

root         8     2  0     0     0   0 Jul31 ?        00:00:00   [cgroup]

root         9     2  0     0     0   0 Jul31 ?        00:00:00   [khelper]

root        10     2  0     0     0   0 Jul31 ?        00:00:00   [netns]

root        11     2  0     0     0   0 Jul31 ?        00:00:00   [async/mgr]

root        12     2  0     0     0   0 Jul31 ?        00:00:00   [pm]

root        13     2  0     0     0   0 Jul31 ?        00:00:03   [sync_supers]

root        14     2  0     0     0   0 Jul31 ?        00:00:03   [bdi-default]

root        15     2  0     0     0   0 Jul31 ?        00:00:00   [kintegrityd/0]

root        16     2  0     0     0   0 Jul31 ?        00:00:10   [kblockd/0]

root        17     2  0     0     0   0 Jul31 ?        00:00:00   [kacpid]

root        18     2  0     0     0   0 Jul31 ?        00:00:00   [kacpi_notify]

root        19     2  0     0     0   0 Jul31 ?        00:00:00   [kacpi_hotplug]

root        20     2  0     0     0   0 Jul31 ?        00:00:00   [ata_aux]

pgrep

通过进程名称获得进程ID

语法格式:pgrep [OPTIONS] "PATTERN"

选项

-U UID:仅显示以指定用户身份运行的进程;

-G GID

-l: 显示PID和进程名;

实例:pgrep nginx[root@localhost ~]# pgrep nginx

43489

50697

pidof

通过进程名称获得进程ID

实例:pidof nginx[root@localhost ~]# pidof nginx

50697 43489

top

动态显示系统任务状态.工作中经常要用到的命令

交互子命令:

P:以占据的CPU百分比大小排序;

M:以占据Memory空间大小排序;

T:CPU累积占用时间排序;

l: 是否显示系统负载行;

队列长度的合理区间:CPU颗数*0.7

t: 是否显示进程摘要信息及CPU负载状态;

1:平均或单独显示CPU的负载状态;

m: 是否显示内存相关的状态信息;

q: 退出命令

s: 修改延迟时长

k: 终止指定进程

top命令的选项:

-b: batch,批次显示

-n #: 显示的批次数量

-d #: 指明延迟时长

结果截图:

06142f1c5185cb73b75a55ae5486c638.png

htop

htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses。与Linux传统的top相比,htop更加人性化。它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。

与top相比,htop有以下优点:

可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。在启动上,比top 更快。杀进程时不需要输入进程号。htop 支持鼠标操作。top 已经很老了。

安装:

直接yum -y install htop即可,但前提是要有epel的yum源哈!

我的yum源epel配置(貌似系统默认的)[root@localhost yum.repos.d]# more /etc/yum.repos.d/epel.repo

[epel]

name=Extra Packages for Enterprise Linux 6 - $basearch

#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch

mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch

failovermethod=priority

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

键入htop 命令,打开htop。

# htop

5847ca72add621760a490627ef458dae.png

上面左上角显示CPU、内存、交换区的使用情况,右边显示任务、负载、开机时间,下面就是进程实时状况。

下面是 F1~F10 的功能和对应的字母快捷键。Shortcut KeyFunction KeyDescription中文说明

h, ?F1Invoke htop Help查看htop使用说明

SF2Htop Setup Menuhtop 设定

/F3Search for a Process搜索进程

\F4Incremental process filtering增量进程过滤器

tF5Tree View显示树形结构

F6Sort by a column选择排序方式

[F7Nice - (change priority)可减少nice值,这样就可以提高对应进程的优先级

]F8Nice + (change priority)可增加nice值,这样就可以降低对应进程的优先级

kF9Kill a Process可对进程传递信号

qF10Quit htop结束htop

命令行选项(COMMAND-LINE OPTIONS)

-C --no-color        使用一个单色的配色方案

-d --delay=DELAY     设置延迟更新时间,单位秒

-h --help           显示htop 命令帮助信息

-u --user=USERNAME    只显示一个给定的用户的过程

-p --pid=PID,PID…       只显示给定的PIDs

-s --sort-key COLUMN     依此列来排序

-v –version          显示版本信息

交互式命令(INTERACTIVE COMMANDS)

上下键或PgUP, PgDn 选定想要的进程,左右键或Home, End 移动字段,当然也可以直接用鼠标选定进程;

Space    标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程

U    取消标记所有进程

s    选择某一进程,按s:用strace追踪进程的系统调用

l    显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件

I    倒转排序顺序,如果排序是正序的,则反转成倒序的,反之亦然

+, -    When in tree view mode, expand or collapse subtree. When a subtree is collapsed a "+" sign shows to the left of the process name.

a (在有多处理器的机器上)    设置 CPU affinity: 标记一个进程允许使用哪些CPU

u    显示特定用户进程

M   按Memory 使用排序

P    按CPU 使用排序

T   按Time+ 使用排序

F    跟踪进程: 如果排序顺序引起选定的进程在列表上到处移动,让选定条跟随该进程。这对监视一个进程非常有用:通过这种方式,你可以让一个进程在屏幕上一直可见。使用方向键会停止该功能。

K    显示/隐藏内核线程

H   显示/隐藏用户线程

Ctrl-L    刷新

Numbers   PID 查找: 输入PID,光标将移动到相应的进程上

htop使用

1.显示自带帮助

键盘按下?或者F1或者h 显示自带帮助

7e9d8ad9e97dec4f40e8169b0bcf2a2c.png

2.htop 设定

F2+S 进入设定界面

b80a89233ec043a08c06d0bc5c899fe7.png

上方左右两栏的显示方式分为Text Bar Graph Led 四种,下图我就把 cpu memory swap 改成文本模式显示,然后右栏的改成Bar 显示,clock 用LED方式显示。数据显示都差不多,只是这样看有点不习惯了。

12224053-eca0d56c388240e495c0b3226ed45472.jpg

关于Display options 的设定,可要根据管理者自己的需要来设定。

12224054-97538b88011d4b6fb49e7d48ec7b4263.jpg

颜色选择,除了基本的颜色显示之外,htop 还提供了换面板的功能,其实也只是改变一些色彩显示的设定,虽然说不能自定义到细部的颜色显示,但是至少提供了几种风格可以选择。

12224056-2f6114304f37492095545a4ad6a68986.jpg

最后一项的设定是调整 Columns 的显示,就是在一般htop 指令进来希望可以看到的什么样的数据及信息,字段的调整可以在这边做个人化的设定,一般使用系统默认值就好了。

12224059-a5ece1fdc31e420da897d01167e97550.jpg

4.3. 搜索进程

鼠标点击Search 或者按下F3 或者输入"/", 输入进程名进行搜索,例如搜索ssh

12224101-da92613d580148e7a74b5bde960bbbb8.jpg

4.4. 过滤器

按下F4,进入过滤器,相当于关键字搜索,不区分大小写,例如过滤dev

12224103-ee01abbe5a7d4f5388057a52bd52e109.jpg

4.5. 显示树形结构

输入"t"或按下F5,显示树形结构,意思跟pstree 差不多,能看到所有程序树状执行的结构,这对于系统管理来说相当方便,理清程序是如何产生的,当然树状结构的浏览也可以依照其他数据来排序。

12224105-44b98e747b494234929f8af4e3eeb5e4.jpg

4.6. 选择排序方式

按下F6 就可以选择依照什么来排序,最常排序的内容就是cpu 和memory 吧!

12224111-2f34d96612bd420ebcf9471c7339fc63.jpg

4.7 操作进程

F7、F8分别对应nice-和nice+,F9对应kill给进程发信号,选好信号回车就OK了

12224113-0e383c20b0e74196a393586b72a67ba1.jpg

4.8. 显示某个用户的进程,在左侧选择用户

输入"u",在左侧选择用户

12224116-5b7ca92b8c644464a65a11204e346f49.jpg

总结:htop感觉比top强大多了,以后可以考虑让htop代替top了

vmstat

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

间隔2秒采集1次:[root@localhost ~]# vmstat 2 1

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----

r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

0  0  13184 121696 100332 241528    0    0    10    17   18   22  0  0 99  0  0

间隔2秒采集5次:[root@localhost ~]# vmstat 2 5

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----

r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

0  0  13184 121704 100348 241528    0    0    10    17   18   22  0  0 99  0  0

0  0  13184 121688 100348 241528    0    0     0     0   16   19  0  0 100  0  0

0  0  13184 121688 100348 241528    0    0     0     0   13   18  0  0 100  0  0

0  0  13184 121688 100348 241528    0    0     0     0   14   17  0  0 100  0  0

0  0  13184 121688 100348 241528    0    0     0     0   14   17  0  0 100  0  0

这表示vmstat每2秒采集数据,一直采集,直到我结束程序,这里采集了5次数据我就结束了程序。

好了,命令介绍完毕,现在开始实战讲解每个参数的意思。

r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free   空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M

cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

in 每秒CPU的中断次数,包括时间中断

cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wt 等待IO CPU时间。

iostat

安装iostat:

只需安装sysstat包即可:yum -y install sysstat

iostat用于输出CPU和磁盘I/O相关的统计信息.

使用iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ device [ ... ] | ALL ] [ -p [ device | ALL ]  ]

[ interval [ count ] ]

iostat简单使用[root@localhost ~]# iostat

Linux 2.6.32-431.el6.x86_64 (localhost.localdomain)     2015年08月05日  _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

0.33    0.00    0.26    0.02    0.00   99.39

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda               0.51        20.33        34.72    7632038   13031808

各个输出项目的含义如下:avg-cpu段:

%user: 在用户级别运行所使用的CPU的百分比.

%nice: nice操作所使用的CPU的百分比.

%sys: 在系统级别(kernel)运行所使用CPU的百分比.

%iowait: CPU等待硬件I/O时,所占用CPU百分比.

%idle: CPU空闲时间的百分比.

Device段:

tps: 每秒钟发送到的I/O请求数.

Blk_read /s: 每秒读取的block数.

Blk_wrtn/s: 每秒写入的block数.

Blk_read:   读入的block总数.

Blk_wrtn:  写入的block总数.

命令选项-c 仅显示CPU统计信息.与-d选项互斥.

-d 仅显示磁盘统计信息.与-c选项互斥.

-k 以K为单位显示每秒的磁盘请求数,默认单位块.

-p device | ALL

与-x选项互斥,用于显示块设备及系统分区的统计信息.也可以在-p后指定一个设备名,如:

# iostat -p sda

-t 在输出数据时,打印搜集数据的时间.

-V 打印版本号和帮助信息.

-x 输出扩展信息.

实例:

1.cpu信息每隔两秒输出两次[root@localhost ~]# iostat -c 2 2

Linux 2.6.32-431.el6.x86_64 (localhost.localdomain)     2015年08月05日  _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

0.33    0.00    0.26    0.02    0.00   99.39

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

0.00    0.00    0.00    0.00    0.00  100.00

2.cpu和硬盘信息每隔两秒输出两次[root@localhost ~]# iostat 2 2

Linux 2.6.32-431.el6.x86_64 (localhost.localdomain)     2015年08月05日  _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

0.33    0.00    0.26    0.02    0.00   99.39

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda               0.51        20.30        34.66    7632294   13032456

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

0.00    0.00    0.00    0.00    0.00  100.00

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda               0.00         0.00         0.00          0          0

uptime

告诉系统已经运行了多长时间

命令详情:[root@localhost ~]# uptime

03:19:57 up 4 days,  8:42,  2 users,  load average: 0.00, 0.00, 0.00

pmap

Pmap 提供了进程的内存映射,pmap命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息。Pmap实际上是一个Sun OS上的命令,linux仅支持其有限的功能。但是它还是对查看完整的进程地址空间很有帮助。我们需要PID或者运行的进程的唯一进程ID来查看进程内存状态,我们可以通过/proc或者常规命令比如top或ps得到它。语法或用法

#pmap PID 或者 #pmap [options] PID

在输出中它显示全部的地址,kbytes,mode还有mapping。

选项

-x extended显示扩展格式

-d device显示设备格式

-q quiet不显示header/footer行

-V 显示版本信息

实例

单一进程状态[root@localhost ~]# pmap 1000

1000:   /sbin/mingetty /dev/tty6

0000000000400000     12K r-x--  /sbin/mingetty

0000000000603000      4K rw---  /sbin/mingetty

00000000015aa000    132K rw---    [ anon ]

00007f9afb742000   1580K r-x--  /lib64/libc-2.12.so (deleted)

00007f9afb8cd000   2044K -----  /lib64/libc-2.12.so (deleted)

00007f9afbacc000     16K r----  /lib64/libc-2.12.so (deleted)

00007f9afbad0000      4K rw---  /lib64/libc-2.12.so (deleted)

00007f9afbad1000     20K rw---    [ anon ]

00007f9afbad6000    128K r-x--  /lib64/ld-2.12.so (deleted)

00007f9afbcea000     12K rw---    [ anon ]

00007f9afbcf3000      8K rw---    [ anon ]

00007f9afbcf5000      4K r----  /lib64/ld-2.12.so (deleted)

00007f9afbcf6000      4K rw---  /lib64/ld-2.12.so (deleted)

00007f9afbcf7000      4K rw---    [ anon ]

00007fff2df92000     84K rw---    [ stack ]

00007fff2dfff000      4K r-x--    [ anon ]

ffffffffff600000      4K r-x--    [ anon ]

total             4064K

多进程状态查看

pmap 1041 1042 1043

扩展进程状态查看

pmap -x 1041

glances

glances 是一款用于 Linux、BSD 的开源命令行系统监视工具,它使用 Python 语言开发,使用psutil库来采集系统数据,能够监视 CPU、负载、内存、磁盘 I/O、网络流量、文件系统、系统温度等信息。相对于top/vmstat/iostat等老牌监控工具,glances具有的优点是:Glances 可以监控本机也可以通过客户端服务器模式监控其他机器;Glances 提供了基于 XML/RPC 的 API 便于其他程序调用,可编程;Glances 可以将数据输出保存到 csv 或 html 格式的文件方便其他程序处理(报告或绘制图形)。

安装:

yum -y install glances 依赖epel yum源

glances的参数

glances 是一个命令行工具包括如下命令选项:

-b:显示网络连接速度 Byte/ 秒

-B @IP|host :绑定服务器端 IP 地址或者主机名称

-c @IP|host:连接 glances 服务器端

-C file:设置配置文件默认是 /etc/glances/glances.conf

-d:关闭磁盘 I/O 模块

-e:显示传感器温度

-f file:设置输出文件(格式是 HTML 或者 CSV)

-m:关闭挂载的磁盘模块

-n:关闭网络模块

-p PORT:设置运行端口默认是 61209

-P password:设置客户端 / 服务器密码

-s:设置 glances 运行模式为服务器

-t sec:设置屏幕刷新的时间间隔,单位为秒,默认值为 2 秒,数值许可范围:1~32767

-h : 显示帮助信息

-v : 显示版本信息

注:如果要输出温度,需要lm_sensors的支持,安装方法为:yum -y install lm_sensors

dstat

dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具.与sysstat相比, dstat拥有一个彩色的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都会每秒刷新显示. 和sysstat相同的是, dstat也可以收集指定的性能资源, 譬如 dstat -c 即显示CPU的使用情况.

dstat安装:yum -y install dstat即可

使用:[root@localhost ~]# dstat

----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--

usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw

0   0  99   0   0   0|  10k   17k|   0     0 |  95B  285B|  18    22

0   0 100   0   0   0|   0     0 |  60B  842B|   0     0 |  20    20

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  20    19

1   1  98   0   0   0|   0     0 |  60B  452B|   0     0 |  19    22

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  21    21

0   0  99   0   0   1|   0     0 |  60B  346B|   0     0 |  16    20

0   0 100   0   0   0|   0    40k|  60B  346B|   0     0 |  21    26

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  15    19

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  19    23

0   1  99   0   0   0|   0     0 |  60B  346B|   0     0 |  16    21

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  19    22

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  16    19

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  18    19

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  17    20

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  18    21

1   0  99   0   0   0|   0     0 |  60B  346B|   0     0 |  16    20

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  19    20

0   1  99   0   0   0|   0     0 |  60B  346B|   0     0 |  17    17

0   0  99   0   0   1|   0   332k|  60B  346B|   0     0 |  78    31

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  18    21

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  20    25

0   1  99   0   0   0|   0     0 |  60B  346B|   0     0 |  17    19

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  18    20

0   0 100   0   0   0|   0  2440k|  60B  346B|   0     0 |  32    22

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  18    21

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  17    21

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  18    19

1   1  98   0   0   0|   0     0 |  60B  346B|   0     0 |  15    17

0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  17    21

安装完成后, 执行 dstat 命令, 默认情况它会收集-cpu-,-disk-,-net-,-paging-,-system-的数据, 一秒钟收集一次. 默认输入dstat等于输入了dstat-cdngy 1或dstat -a 1. 推荐使用 date && dstat -tclmdny 60 一分钟监视一次(注意调节显示的宽度, 或去掉-t选项).

dstat 选项

-c,-cpu 显示CPU情况-C 0,3,total include cpu0, cpu3 and total-d,-disk 显示磁盘情况-D total,hda include hda and total-g,-page enable page stats-i,-int enable interrupt stats-I5,eth2 include int5 and interrupt used by eth2-l,-load enable load stats-m,-mem 显示内存情况-n,-net 显示网络情况-N eth1,total 可以指定网络接口-p,-proc enable process stats-s,-swap 显示swap情况-S swap1,total 可以指定多个swap-t, -time enable time counter-y,-sys enable system stats-ipc 报告IPC消息队列和信号量的使用情况-lock enable lock stats-raw enable raw stats-tcp enable tcp stats-udp enable udp stats-unix enable unix stats-M stat1,stat2 enable externalstats-mods stat1,stat2-a,-all 使用-cdngy 缺省的就是这样显示-f,-full 使用 -C, -D,-I, -N and -S 显示-v, -vmstat 使用-pmgdsc -D 显示-integer show integer values-nocolor disable colors (implies -noupdate)-noheaders 只显示一次表头以后就不显示了,使用重定向写入文件时很有用-noupdate disable intermediate updates-output file 写入到CVS文件中这个软件和vmstat很像, 不过和vmstat相比好像少了io部份的显示, dstat只能显示磁盘的吞吐量而不是显示负载情况, dstat和几乎所有监控软件一样, 只能对整个系统进行监控而不能对某一个进程或某一个程序进行深入分析. 我常使用的参数是dstat -cdlmnpsy, 做个别名链接alias dstat='dstat -cdlmnpsy'

kill

Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令。通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。kill命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。

1.命令格式:

kill[参数][进程号]

2.命令功能:

发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。

3.命令参数:

-l  信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称

-a  当处理当前进程时,不限制命令名和进程号的对应关系

-p  指定kill 命令只打印相关进程的进程号,而不发送任何信号

-s  指定发送信号

-u  指定用户

注意:

1、kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。例如:

kill -2 123

它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号。

2、kill可以带有进程ID号作为参数。当用kill向这些进程发送信号时,必须是这些进程的主人。如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,就会得到一个错误信息。

3、可以向多个进程发信号或终止它们。

4、当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。

5、应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法。

4.使用实例:

实例1:列出所有信号名称

命令:

kill -l[root@localhost ~]# kill -l

1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP

6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1

11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM

16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP

21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ

26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR

31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3

38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8

43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13

48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12

53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7

58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2

63) SIGRTMAX-1  64) SIGRTMAX

说明:

只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。下面是常用的信号:HUP    1    终端断线

INT     2    中断(同 Ctrl + C)

QUIT    3    退出(同 Ctrl + \)

TERM   15    终止

KILL    9    强制终止

CONT   18    继续(与STOP相反, fg/bg命令)

STOP    19    暂停(同 Ctrl + Z)

实例2:得到指定信号的数值[root@localhost test6]# kill -l KILL

9[root@localhost test6]# kill -l SIGKILL

9[root@localhost test6]# kill -l TERM

15[root@localhost test6]# kill -l SIGTERM

15[root@localhost test6]#

实例3:先用ps查找进程,然后用kill杀掉[root@localhost test6]# ps -ef|grep vim

root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log

root      3370  2822  0 16:21 pts/0    00:00:00 grep vim

[root@localhost test6]# kill 3268

[root@localhost test6]# kill 3268

-bash: kill: (3268) - 没有那个进程

[root@localhost test6]#

实例4:彻底杀死进程[root@localhost test6]# ps -ef|grep vim

root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log

root      3370  2822  0 16:21 pts/0    00:00:00 grep vim

[root@localhost test6]# kill –9 3268

[root@localhost test6]# kill 3268

-bash: kill: (3268) - 没有那个进程

[root@localhost test6]#

实例5:杀死指定用户所有进程[root@localhost ~]# kill -9 $(ps -ef | grep peidalinux)

[root@localhost ~]# kill -u peidalinux

实例6:init进程是不可杀的[root@localhost ~]# ps -ef|grep init

root         1     0  0 Nov02 ?        00:00:00 init [3]

root     17563 17534  0 17:37 pts/1    00:00:00 grep init

[root@localhost ~]# kill -9 1

[root@localhost ~]# kill -HUP 1

[root@localhost ~]# ps -ef|grep init

root         1     0  0 Nov02 ?        00:00:00 init [3]

root     17565 17534  0 17:38 pts/1    00:00:00 grep init

[root@localhost ~]# kill -KILL 1

[root@localhost ~]# ps -ef|grep init

root         1     0  0 Nov02 ?        00:00:00 init [3]

root     17567 17534  0 17:38 pts/1    00:00:00 grep init

[root@localhost ~]#

killall

通过进程名称删掉一系列名称一样的pid

举例:

killall nginx

该命令删除了所有nginx进程(包括父进程以及父进程所产生的子进程)

sar

sar 既能报告当前数据,也能报告历史数据

不带选项执行会以10分钟为间隔报告自午夜起当天的CPU利用率。

脚本sal收集了这些历史数据,它是sar软件包的一部分,必须设置为定期从cron里运行

sar把自已收集的数据以二进制格式保存在/var/log/sa里

使用 sar -d 可以得到当天磁盘活动的情况汇总

sar -n  DEV 则能给出网络接口的统计信息

sar -A 可以报告所有的信息

sar 适用于快速粗略了解历史信息。

sar 命令行的常用格式: sar [options] [-o file] t [n]

options 为命令行选项,sar命令的选项很多,下面只列出常用选项:

-A:所有报告的总和。

-u:CPU利用率

-v:进程、I节点、文件和锁表状态。

-d:硬盘使用报告。

-r:没有使用的内存页面和硬盘块。

-g:串口I/O的情况。

-b:缓冲区使用情况。

-a:文件读写情况。

-c:系统调用情况。

-R:进程的活动情况。

-y:终端设备活动情况。

-w:系统交换活动。

ifstat

ifstat工具是个网络接口监测工具,比较简单看网络流量

简单使用#ifstat

eth0                eth1

KB/s in  KB/s out   KB/s in  KB/s out    0.07      0.20      0.00      0.00

0.07      0.15      0.58      0.00

默认ifstat不监控回环接口,显示的流量单位是KB。

监控所有网络接口# ifstat -a

lo                 eth0                eth1

KB/s in  KB/s out   KB/s in  KB/s out   KB/s in  KB/s out    0.00      0.00      0.28      0.58      0.06      0.06

0.00      0.00      1.41      1.13      0.00      0.00

0.61      0.61      0.26      0.23      0.00      0.00

实际上上面的dstat命令已经包含了ifstat的所有信息,之后用dstat就行了

作业管理

前台作业:通过终端启动,并且在停止之前也会一直占据终端;

后台作业:作业启动之时与终端无关,或者是在前台启动,但启动后转为与终端无关模式运行;

如何让作业运行于后台?

1、对于已经启动并处于运行中的作业:只用ctrl+z就可以将进程送到后台

Note: 作业被送往后台后,默认处于stopped状态;

2、对于尚未启动的作业:

COMMAND &

注意: 此两类方式相关作业,仍然与终端相关;这意味着,终端终止,将会导致与此终端相关的所有作业被终止;

剥离进程与终端的关系:

# nohup COMMAND &

jobs

显示作业号、作业状态、启动命令行程序

fg

将后台的程序调到前台中来

bg

将前台程序放到后台去运行

进程优先级调整:

静态优先级:

通过指定进程的nice值来调整其优先级;用户 空间运行的进程一般都有其nice值;

nice值: -20, 19

优先级:  100, 139

默认启动进程时,其nice值为0, 其优先级为120;

(1) 对于尚未启动的进程:

# nice -n N COMMAND

(2) 对于已经启动并处于运行中的进程:

# renice -n N PID

注意:普通用户仅能够调大nice,调低优先级;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值