Linux运维之进程管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维之进程管理相关的知识,希望对你有一定的参考价值。

  • 进程概念

进程是内核的一个功能,在Linux中,运行一个程序或命令可以出发一个事件而驱动一个PID,在linux系统中,系统只识别二进制程序文件,我们可以通过执行系统上的二进制程序来运行程序,进而产生进程。在linux系统中第一个进程是init程序,它是系统开机第一个加载的程序,用来支撑系统的正常运行的一个程序,内核启动的一个用户级进程。

 

  1. 1.        进程优先级

         进程优先级被分为系统优先级和实时优先级

         系统优先级:数字越小,优先级越高

         0-139(老版本操作系统如4,5

         各有140个运行队列和过期队列,当一个进程支执行完成后会将进程放到过期队列上来,如果一个进程的优先级低,进程执行了一会,系统将会把它丢到过期队列当中来。

         实时优先级:99-0:值越大优先级越高

 

         nice值:-2019对应系统优先级100-13999

 

  1. 2.        进程状态

         linux中,进程是抢占式多任务的,进程的类型被分为:

         守护进程:在系统引导过程中启动的进程,即跟终端无关的进程

         前台进程:跟终端有关,通过终端启动的进程;需要注意的是,也可以吧前台启动的进程送往后台,以守护模式运行。

 

运行态: running进程正在运行中

就绪态:ready

睡眠态:sleeping

                  可中断:interruptable

                  不可中断:uninterruptable,通常是指被IO阻塞的进程,等待IO满足之前无法继续运行

停止态:stopped,暂停于内存中,但不会被调度,除非手动启动

僵死态:zombie,进程结束,父进程结束前,子进程不关闭

根据进程占用资源的多少可以将进程分为:

CPU密集型:对CPU占用率高的进程

IO密集型:等待I/O时间长的进程

 

 

  1. 3.        进程管理

linux系统中,有很多的进程都在运行,但其中有一个程序很重要,那该如何让这个最重要的程序先运行呢,所以这些情况下,我们都应该先查询系统当前运行的进程,此时我们可以通过一些进程的管理工具来获得进程的管理工具有:toppstreepspidofpgreppkillhtopglancespmapvmstatedstatiostatsarkilljobsbgfg

 

pstree:以显示当前系统上的进程树

 

psprocess state 进程状态

默认显示当前终端中的进程

命令格式:ps [options]

-a:所有与终端有关的进程

-x:所有与终端无关的进程,通常与-a选项一起使用,可列出教完整信息

-u:显示与进程所有者的信息

-f:显示进程的父进程

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

-o 显示指定的信息如 pid(进程号),comm(命令),%cpucpu占用百分比),%mem(内存占用百分比),state(进程状态),tty(终端),euser(进程生效者),ruser(进程真正执行者)

组合选项

-ef

                  -e:显示所有进程

                  -f:显示完整格式程序信息

-eFH

                  -F:显示更完整格式的进程信息

                  -H:以进程层级格式显示进程相关信息

 

ps显示字段解释

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

root          1  0.0  0.0  19352  1552 ?        Ss   15:41   0:01 /sbin/init

root          2  0.0  0.0      0     0 ?        S    15:41   0:00 [kthreadd]

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

root          4  0.0  0.0      0     0 ?        S    15:41   0:00 [ksoftirqd/0]

root          5  0.0  0.0      0     0 ?        S    15:41   0:00 [stopper/0]

root          6  0.0  0.0      0     0 ?        S    15:41   0:00 [watchdog/0]

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

-----------------------------------------------------------------------------------------------------------------------------

USER:用户

PID:进程ID

%CPU:占用cpu百分比

%MEM:占用内存百分比

VSZVirtual memory Size,虚拟内存集,线性内存

RSSReSident Size,常驻内存及

STAT:进程状态

Rrunning

s:interruptable sleeping

D:uninterruptable sleeping

T:stopped

Z:zombie

+:前台进程

l:多线程进程

N:低优先级进程

<:高优先级进程

ssession leader,会话进程首进程

START:进程起始时间

TIME:进程运行时长

COMMAND:运行进程的命令

ninice

pripriority优先级

psrprocessor,cpu编号

rtprio:实时优先级

 

 

pgrep 搜索进程

pgrep [-flvx] [-d delimiter] [-n|-o] [-P ppid,...] [-g pgrp,...] [-s sid,...] [-u euid,...] [-U uid,...] [-G gid,...] [-t term,...] [pattern]

           

-u uid:进程生效者

-U uid:进程真正发起者(比如我普通用户运行passwd运行,可执行程序passwdsuid它是以root的身份来运行程序,但进程真正的发起者是普通用户)

-t terminal:与指定终端相关的进程

-l:显示进程名

-a:显示完整格式的进程名

-p pid:显示指定进程的子进程

 

示例:

pgrep  -u   hadoop  查找生效者是hadoop用户的进程

pgrep  -t  pts/2

 

 

 

pidof  根据程序名查找pid

命令格式:pidof [-s] [-c] [-x] [-m] [-o omitpid] [-o omitpid..]  program [program..]

pidof bash

 

uptime

显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1510分钟的分军服在,一般不会超过1

系统平均负载:在特定时间间隔内运行队列中的平均进程数

 

如果每个CPU内核当前活动的进程数不大于3,那么系统新能良好,如果CPU内核任务数大于5,这台机器性能有严重问题,如果主机是一个双核CPU的话,当Load Average6的时候说明机器已经被充分使用了

20:49:12 up  5:07,  3 users,  load average: 0.00, 0.02, 0.05

 

  1. 4.        进程管理工具

 top

技术分享

top栏位信息介绍

us:用户空间

sy:内核控件

ni:调整nice时间

id:空闲

waI/O等待时间

hi:硬终端

si:软终端(模式切换)

st:被偷走的时间

 

PID:任务的进程ID

PPID:父进程ID

RUSER:进程真正执行者

UID:任务所有者ID

USER:任务所有者名称

GROUP:任务所有者群组名

TTY:终端

PR:优先级

%CPUCPU使用率

%MEM:内存使用率

S:进程状态

TIME+:CPU时间,精确到秒

 

top命令有许多命令,当我们执行top命令后,在交互界面敲一下键会显示不同的效果

排序

P:以占据CPU百分比排序 %CPU

M:以占据内存百分比排序 %MEM

T:累计占据CPU时长,TIME+

 

首部信息显示:

uptime信息: l命令

taskscpu信息:t命令

cpu分别显示:1(数字)

memory信息: m命令

退出命令:q

修改刷新时间间隔: s  #

终止指定进程: k  pid

保存文件:W,默认保存在/root/.toprc文件中

 

选项:

-d #:指定刷新时间间隔,默认为3

-b:以批次方式显示

-n #:显示多少批次

 

htop命令该命令系统默认不会安装,需要从epel源上安装htop命令

命令格式:   htop [-dChusv]

选项:

-d # :指定延迟时间

-u username:仅显示指定用户的进程

-s colume :以指定字段进行排序

 

子命令:(在执行htop命令后在进入界面输入一下子命令)

s:跟踪选定进程的系统调用

l:显示选定进程打开的文件列表

a:选定的进程绑定至某指定CPU核心

t:显示进程树

技术分享

 

  1. 5.        内存工具

vmstate命令:虚拟内存信息

vmstat[options] [delay [count]]

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

 1  0      0 1169128  32640 403716    0    0     8     1   12    9  0  0 100  0  0        

 1  0      0 1169048  32640 403720    0    0     0     0   37   26  0  0 100  0  0        

 0  0      0 1169048  32648 403720    0    0     0     6   46   48  0  0 100  0  0        

 0  0      0 1169112  32648 403720    0    0     0    16   42   33  0  0 100  0  0        

 1  0      0 1169112  32648 403720    0    0     0     0   40   26  0  0 100  0  0        

栏位信息

procs

r:等待运行的进程个数,和核心数有关

b:处于不可中断睡眠态的进程个数(被阻塞的队列长度)

 

memory

         swap:交换内存的使用总量

         free:空闲屋里内存总量

         buffer:用于缓冲的内存总量

         cache:用于缓存的内存总量

 

swap

         si:从磁盘交换内存的数据速率(kb/s

         so:从内存交换至磁盘的数据速率(kb/s

 

io

         bi:从块设备读入数据到系统的速率(kb/s

         bo:保存数据到块设备的速率(kb/s

 

system

         ininterrupts,中断速率,包括时钟

         cscontext switch,进程切换速率

 

cpu

         us:用户空间

sy:内核控件

ni:调整nice时间

id:空闲

waI/O等待时间

hi:硬终端

si:软终端(模式切换)

st:被偷走的时间

 

选项

-s:显示内存的统计数据

 


pmap:进程对应的内存映射

命令格式:pmap [ -x | -d ] [ -q ] pids...

-x:显示详细格式的信息

或者查看文件来显示此信息

cat /proc/pid/pmap      pid进程编号

 

 

系统监控工具

glances

命令格式glances  [-bdehmnrsvyz1]  [-B  bind]  [-c  server]  [-C  conffile]  [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]

 

选项

-b:以Byte为单位显示网卡的数据速率

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

-f /path/to/somefile:设定输入文件位置

-o {html|csv}:输出格式

-m:禁用mount模块

-n:禁用网络模块

-t #:延迟时间间隔

-l:每个CPU相关数据单独显示

      

C/S模式下运行glances

服务模式:

glances –s –B ip

 技术分享

客户端模式

glances –c  ip

技术分享

 

dstate命令,系统资源统计

命令格式: dstat [-afv] [options..] [delay [count]]

-c:显示CPU相关信息

-d:显示disk相关信息

-g:显示page相关统计信息

-m:显示内存相关统计信息

-n:显示网络相关统计信息

-p:显示进程相关统计信息

-r:显示io请求相关的同属数据

-s:显示swaped相关的统计数据

技术分享

 

  1. 6.        进程管理工具

重要的信号

1SINGHUP:让一个进程不用重启就可以重读其配置文件,并让新的配置信息生效

2SIGINT:中止正在运行的进程相当于ctrl+c

9)SINGKILL:杀死正在运行的进程

15)SINGTERM:终止正在运行的进程,正常结束进程

18)SINGCONT:继续运行一个进程

19)SINGSTOP:后台休眠

指定信号的方法:

信号的数字标识:1,2,9

信号完整名称:SIGHUP

信号简写名称:HUP

 

杀死进程

kill命令

命令格式kill [-s signal|-p] [--] pid..

示例:

kill  -1    120  使用1号信号重读该进程的配置文件

kill  -9    120  强制杀死该进程

 

killall  command(当某个命令运行多个进程时,想杀死该命令产生的全部进程)

 

pkill

命令格式:pgrep [-flvx] [-d delimiter] [-n|-o] [-P ppid,...] [-g pgrp,...] [-s sid,...] [-u euid,...] [-U uid,...] [-G gid,...]

-SIGNAL

-u uid: 生效者

-U uid real user ,进程真正发起者

-t terminal:与指定终端相关的进程

-l:显示进程名

-a:显示整格式的进程名

-P pid:显示父进程为此处指定的进程的进程列表

 

示例:

pkill  -u   hadoop

pkill  -t   pts/3  

 

  • 作业管理

Linux的作业控制

前台作业:通过终端启动,且启动后一直占据终端

后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)

 

运行中的作业 ctrl+z让作业运行与后台

command & 作业未启动是执行此操作让作业进入后台

后台作业虽然被送往后台运行,但依然与终端相关,退出终端,将关闭后台作业。

nohup command     screen command 剥离与终端的关系,即使终端断开,也依然运行

 

jobs:查看所有作业

[[email protected] ~]# jobs

[1]   Stopped                 vim

[2]-  Stopped                 find / -name a

[3]+  Stopped                 vim

 

  1. 1.        作业控制

fg[[%]JOB_NUM]:把指定的后台作业调回前台;

bg[[%]JOB_NUM]:让送往后台的作业在后台继续运行;

kill [%JOB_NUM]:终止指定的作业

 

当工作中需要同时运行多个进程,提高工作效率,可以这么干

 

vi all.sh

f1.sh&

f2.sh&

f3.sh&

(f1.sh&);(f2.sh&);(f3.sh&)

{ f1.sh& f2.sh& f3.sh& }

 

2.        进程优先级调整

进程是存在优先级的,所谓优先级是指被执行的顺序,优先级越高,被执行的顺序越靠前,反之,越靠后

静态优先级:100-139

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

只有根用户才能降低nice值(提高优先性)

 

进程优先级的调整方法

nice命令

命令格式:nice [OPTION] [COMMAND [ARG]...] (程序未启动时)

nice  -n  -10   pid

 

renice

命令格式:renice [-n] priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]

renice –n  -10  pid   (进程已经运行)

 



本文出自 “运维生涯” 博客,请务必保留此出处http://fszxxxks.blog.51cto.com/10122713/1850938

以上是关于Linux运维之进程管理的主要内容,如果未能解决你的问题,请参考以下文章

linux运维之服务进程管理

企业运维之服务管理 -- supervisord

企业运维之服务管理 -- supervisord

Linux运维之Shell编程------监控MySQL错误码及主从复制同步异常

Linux运维之如何查看目录被哪些进程所占用,lsof命令

Linux运维之Ansible自动化运维管理工具