Linux运维 第二阶段 (十二) 进程管理

  1. 云栖社区>
  2. 博客>
  3. 正文

Linux运维 第二阶段 (十二) 进程管理

技术小阿哥 2017-11-27 15:19:00 浏览934
展开阅读全文

>线性内存;物理内存;页面-->页框(映射关系,页框固定的存储空间4K

>计算机所有运行只在CPU和内存中完成,而硬盘只是IO设备

>用户空间;内核空间

>进程上下文切换,环境切换,context switch

>VSZ虚拟内存集,逻辑上,包括shared librariesRSS常驻内存集,resident,一定不能被交换出去的指令、变量等核心数据

>MMU,memory management unit

>一个进程的两个指令不能同时在一个CPU上运行,对于双核可以在两个上运行,但不是同时运行

>多进程模型;多线程模型(单进程多线程)

#ls /proc(内核信息的映射,每一个数字代表一个进程,init进程号永远为1

#cat /proc/mem

#cat /proc/1/maps

>IPCinter process communication进程间通信):共享内存;信号signalsemaphore旗语

>单内核:ko(kernel object),内核所专用的模块

>redhat|suse,核心:可动态加载各种外围模块;/lib/modules/”内核版本号命名的目录”/kernel/{archcrypto,drivers/net(网卡驱动),fs,kernel,lib,mm,net(tcp/IP协议栈),sound}vmlinuz-2.6.32

#du -sh  /lib/modules/2.6.32-358.el6.x86_64/

#ls -lh  /boot/vmlinuz-2.6.32-358.el6.x86_64

>临时根文件系统:/proc,/sys,/dev;将物理内存的一段空间模拟成硬盘来使用;initrd(ramdisk,redhat5),initramfs(redhat6)

>运行级别:

0halt

1single user mode,直接以管理员身份切入,使用s,S,single

2multi user mode,noNFS

3multi user mode,textmode

4reserved

5multi usermode,graphical mode

6reboot

 

命令:ps,pstree,pgrep,top,vmstat,free

#psreport a snapshot ofthe current processesprocess state,有sysv风格(选项有-)BSD风格)

a(所有与终端有关的进程)

udisplay user-oriented format

x(所有与终端无关的进程,在内核启动时就启动了,用?表示)

#ps auxCOMMAND一栏,加[]表示内核线程;TIME一栏,占CPU时间非挂钟时钟)

注:进程的分类(与终端有关的进程;与终端无关的进程)

进程状态:D(不可中断的睡眠);R(运行或就绪);S(可中断的睡眠);T(停止);Z(僵死);<(高优先级进程);N(低优先级进程);+(前台进程组中的进程);l(多线程进程);s(会话进程首进程)

-eSelect allprocesses. Identical to –A

-llong format

-ffull format-F

#ps -ef

#ps -elf

 

nice值(默认0-20-19对应100-139,优先级0-139140种,数字越小优先级越高,其中0-99用于内核调整,100-139用户可控制):

注:普通用户仅能调大自己进程的nice值;优先级的调整可获得更多的CPU运行时间,更优先获得CPU运行的机会

oo(1)无论队列多长,时间一样,2.6kernelo(n)线性增长可预测,2.4kernelo(logn)o(n^2)o(2^n)

#renice NI  PIDalter priority of running processes,调整已在运行的进程的nice值)

#nice -n  NI  COMMANDrun a program with modified scheduling priority启动时指定nice值)

 

#pgrep PROCESS_NAME(仅显示指定进程进程号)

#pgrep -u  root  bash

#pgrep bash

#pidof PROCESS_NAME(显示PID,根据程序名查找ID号)

#pidof init

#pidof sshd

#pstreedisplay a tree ofprocesses,显示进程数)

#pkill

 

#topdisplay Linux tasks,监控系统性能,默认每5秒刷新一次)

load average1分钟5分钟15分钟的队列长度)

RES(resident常驻内存集)VIRT(VSZ虚拟内存集)

M(根据驻留内存大小进行排序)

P(根据CPU使用百分比排序,默认此项)

T(根据累计时间排序)

l(是否显示平均负载和启动时间)

t(是否显示进程和CPU状态相关信息)

m(是否显示内存相关信息)

c(是否显示完整的命令行信息)

q(退出top

k(终止某个进程)

#top -d  1delaytimeinterval指定延迟时长,每秒刷新一次)

#top -d  1  -bbatch mode,批模式)

#top -d  1  -b -n  3(在批模式下共显示多少批)

 

#kill -l(显示所有信号)

重要的信号:

1SIGHUP(让一个进程不用重启就可重读其配置文件,并让新的配置生效

2SIGINTinterrupt,中断一个前台进程,ctrl+c

9SIGKILL(杀死一个进程,暴力,不告知直接杀死)

15SIGTERM(终止一个进程,仁道,与其它进程通信并一一终止关闭)

#kill PIDterminate a process,后一定要要跟PID,默认15 SIGTERM

#kill -SIGKILL  PID

#kill -KILL  PID(信号名称简写)

#killall COMMANDkill processes by name

 

前台作业(占据了命令提示符)

后台作业(启动之后,释放命令提示符,后续的操作在后台完成)

ctrl+z(把正在前台的作业送至后台)

#COMMAND &(让命令在后台执行)

#jobs(查看后台的所有作业,注意作业号不同于进程号,+表示命令将默认操作的作业,-表示命令将第二个默认操作的作业)

#bg [%]JOBIDbackground,让后台的停止作业继续运行)

#fg %JOBIDfrontground,将后台的作业调回前台,bg,fg%可省)

#kill %JOBID(终止某个作业,此处%不可省,表示作业不是PID

 

#vmstatReport virtualmemory statistics,系统状态查看,至关重要,si(swap in),so(swap out),bi(block in),bo(block out),in(interruptnumber中断的次数),cs(context switch进程切换的次数)

#vmstat 1(每隔1秒显示一次)

#vmstat 1  5(每隔1秒显示一次,共5次)

 

#uptimeTell how long thesystem has been runningtop命令的第一行)

 

模拟进入自定义根:

#mkdir -pv  /test/virroot/{bin,lib64}

#cp /bin/bash  /test/virroot/

#ldd /bin/bashprint shared library dependencies,查询指定二进制文件依赖的共享库)

#cp  /lib64/libtinfo.so.5/test/virroot/lib/(复制上步查询到的依赖的库文件)

#cp  /lib64/libdl.so.2 /test/virroot/lib/

#cp  /lib64/libc.so.6  /test/virroot/lib/

#cp  /lib64/ld-linux-x86-64.so.2  /test/virroot/lib/

#chroot /test/virroot

#cd /lib64

#pwd

 附:进程状态

wKiom1YHtX_Q6gQLAAD-NTi_HLg880.jpg 

 

 

 

以上是学习《马哥网络视频》做的笔记。







一、进程管理

         1、进程:正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间并战胜一定的系统资源;程序:人使用计算机语言编写的可以实现特定目标或解决特定问题的代码集合。

         进程管理的作用:判断服务器健康状态;查看系统中所有进程;杀死进程。

         2、进程的查看:

         #ps  aux     (查看系统中所有进程,使用BSD操作系统格式

         a       与终端相关的进程

         u       用户导向的用户列表

         x       所有与终端无关的进程

         显示项目:

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

         STATD不可被唤醒的睡眠状态,通常用于I/O情况;R该进程正在运行;S该进程在睡眠状态,可被唤醒;T停止状态,可能在后台暂停或进程在除错状态;W内存交互状态(2.6内核开始无效);X死掉的进程;Z僵尸进程,进程已经终止,但部分程序还在内在中;<高优先级;N低优先级;L被锁入内存;s包含子进程;l多线程;+位于后台。

         TIME:该进程占用CPU的运算时间,注意不是系统时间。

         #ps  -le

         -l       long长格式显示

         -e      显示所有进程,与-A作用一致

         显示项目:

         F  S UID  PID  PPID C  PRI  NI ADDR  SZ  WCHAN TTY  TIME  CMD

         F:进程标志,说明进程的权限,常见的有:1进程可复制但不能执行,4进程使用超级用户权限;

         S:同#ps  auxSTAT一样;

         C:该进程的CPU使用率,单位是%

         ADDR:进程在内在的位置;

         SZ:该进程占用多大内存;

         WCHAN:该进程是否运行,“-”代表正在运行。

         #top  选项

         -d  秒数    (指定top命令每隔几秒更新一次

         -p  PID       (指定PID只查看某个PID进程

         -u  用户名      (只监听某个用户的进程

         -s          (使top在安全模式运行,避免在交互模式中出现错误

         -b          (使用批处理模式输出,与“-n”合用,重定向到文件中

         -n  次数    (指定top命令执行的次数,与“-b”合用。

         例:#top  -p 15273    (查看PID15273的进程信息

         #top  -b -n  1  > /tmp/top.log

         #top          r,交互状态,可修改优先级nice

         显示项目:分为两部分

         第一部分:

第一行信息:top  - 15:10:16  up  1 day ,15:10,2user,load average:0.00  0.00 0.00

         注:系统在1分钟5分钟15分钟的平均负载,cpu是单核,超过1是高负载,四核超过4是高负载(依据经验判断)

         第二行信息:Task:95  total , 1 running , 94 sleeping , 0 stopped,  0 zombie

         第三行为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当有虚拟机时,虚拟cpu等待实际cpu的时间百分比。

         第四行为物理内存信息:mem:total,used,free,buffers(作为缓冲的内存数量)

         第五行为swap信息:swap:total,used,free,cached(作为缓存的交互分区大小)

         第二部分输出:

         PID  USER PR  NI  VIRT RES  SHR  S %CPU  %MEM  TIME+ COMMAND

         VIRT:该进程使用的虚拟内在的大小,单元KB

         RES:该进程使用的物理内在的大小,单位KB

         SHR:共享内存大小

         S:state

         TIME+:该进程总共占用的CPU时间

         3、进程的管理:

         #pstree  -u|-p            -u显示进程的所属用户,-p显示进程的PID

         #kill  -l #man  7 signal   (查询系统可识别的信号

         #kill  -信号  PID       (注意kill后跟的是PID,例:#kill  -1 2246

         #killall  选项  -信号  进程名注意killall后跟的是进程名,例:#killall  -i -9  sshd

         -i  interactive交互式

         -I (ignore大小写

         #pkill  选项  -信号  进程名 (注意pkill后跟进程名,例:#pkill  -t -9  pts/1

         -t  指定终端

         例:#vi  test.sh

         #ps  aux | grep “vi” | grep  -v  “grep”

         #kill  -9 2313

         #ps  aux | grep “vi” | grep  -v  “grep”

         4、进程的优先级:PRI的值由内核动态调整,用户不能直接修改,可通过修改NI的值来影响PRI的值。

PRI和NI的关系:PRI(最终值)=PRI(原始值)+NI值

修改NI值注意事项:NI值的范围是-20-19;普通用户调整NI值的范围是0-19,而且只能调整自己的进程;普通用户只能调高NI值不能降低,如原本NI值为0,则只能调整为大于0;root才能设置NI值为负数,而且可调整任何用户的进程。

#nice  -n  NI值 命令         (给新执行的命令直接赋予NI值

例:#nice  -n -5  service  httpd start

#ps  aux | grep “httpd” | grep  -v  “grep”

#renice  优先级  PID   (修改已经存在的进程NI值

例:#renice  -10 2125

#ps  -le  |grep  “httpd” | grep  -v  “grep”

二、工作管理

         1、后台管理注意事项:

         前台是指当前可以操控和执行命令的操作环境,后台是指工作可以自行运行,但不能直接用ctrl+c终止,只能使用fg/bg来调用工作;

         当前的登陆终端只能管理当前终端的工作,如tty1是不能管理tty2的工作的;

         放入后台的命令必须可以持续运行一段时间,这样才能捕捉和操作这个工作;

         放入后台执行的命令不能和前台用户有交互或需要前台输入,否则放入后台只能暂停不能执行,如vitop等命令

         2、把命令放入后台:

         方一:#命令  &       (这种方法命令在后台是执行状态,命令不能与前台有交互,否则不能执行

         例:#find  / -name  install.log  &  (每个后台命令会分配一个工作号,也会有进程号

         方二:命令在执行过程中按ctrl+z,命令在后台是暂停状态,无论有无交互都暂停

         例:#tar  -zcf etc.tar.gz  /etc ctrl+z(状态为stopped

         3、后台管理命令:

         #jobs  -l  (显示进程的PID

         #fg  %工作号         (将后台暂停的工作恢复到前台执行,%可省略,注意工作号和PID号的区别

         #bg  %工作号        (将后台暂停的工作恢复到后台执行

         4、后台命令脱离登录终端运行:

         方一:#/etc/rc.d/rc.local         (启动时执行,若有临时后台任务不能执行

         方二:加入定时任务     (不依赖登录终端

         方三:#nohup  命令  &

                   例:#nohup  find /  -print  > /root/file.log  &

三、系统资源查看:

         1、#vmstat  刷新延时  刷新次数   (监控系统资源,例:#vmstat  1  3

         2、#dmesg |grep  “cpu”       (显示开机时内核检测的CPU信息

         #dmesg| grep “eth0”      

         3、#free  -b|-k|-m|-g            (默认以KB为显示单位

         4、#cat  /proc/cpuinfo           (查看CPU信息

         5、#w                (查看本机登陆用户信息

         #who                   (查看系统中已登录的用户

         6、#uptime top命令的第一行

         7、#uname  -a|-r|-s   -a查看系统所有相关信息,-r查看内核版本,-s查看内核名称

         #file  /bin/ls      (当前系统的位数

         #lsb_release  -a      (当前系统的发行版本

         8、#lsof  -c 字符串|+d 目录名|-u 用户名|-p PID 

         -c只列出以字串开关的进程打开的文件

         +d列出某个目录所有被进程调用的文件

         -u只列出某个用户的进程打开的文件

         -p列出某个PID进程打开的文件

         例:#lsof |more     (按PID号从1进程开始列出系统中所有的进程正在调用的文件

         #lsof  +d          /usr/lib          (查询某个目录下所有的文件是被哪些进程调用的

         #lsof  -c httpd     (查看httpd调用了哪些文件

         #lsof  -p  1    (查询PID是1的进程调用的文件

         #lsof  -u root       (按用户名查某用户的进程调用的文件

四、系统定时任务

         1、at一次性执行的定时任务

         #service  atd start

         #chkconfig  atd  on

         访问控制依靠两个文件来实现,/etc/at.allow/etc/at.deny,默认无/etc/at.allow,注意事项:若同一用户都在这两个文件中,那么这个用户可以使用at命令,因为/etc/at.allow优先于/etc/at.deny;若系统中只有/etc/at.deny,则在这个文件中的用户不能使用at命令;若系统中两个文件都不存在,则只有root才可使用at命令。

         #at  选项  时间

         -m    (当at工作完成后,无论是否有输出都用email通知执行at命令的用户

         -c  工作号      (显示该at工作的实际内容

         时间:HH:MM

         HH:MM  YYYY-MM-DD

         HH:MM[am|pm] [month] [date]

         HH:MM[am|pm] + [minutes|hours|days|weeks]

         例:#at  now +2minutes

         at>/root/hello.sh >> /root/hello.log

         at><EOT>         (使用ctrl+d保存at任务

         job1  at 2015-05-16  18:35

        

         #at  -c  8      (查询第8个at工作的内容

         #at  02:00 2015-5-16

         at>编辑

         #atq           (查询当前服务器上at的工作

         #atrm         (删除指定的at任务

         2、crontab循环执行定时任务

         》用户的crontab设置

         #service  crond start

         #chkconfig  crond on

         /etc/cron.allow/etc/cron.deny这两个文件同at的两个文件一样,默认无/etc/cron.allow

         #crontab  -e|-l|-r|-u      -e编辑crontab定时任务;-l查询;-r删除当前所有的任务,若只想删一个用#crontab  -e-u接用户名,修改或删除其他用户的crontab任务

         *  * *  *  * 执行的任务

         注意事项:

六个选项不能为空必须填写,不确定可用“*”代替为任意时间;

         最小有效时间是分,最大时间范围是月;

         日期和星期不要在一条定时任务中出现,若出现则是先碰到哪个执行哪个,最终都会执行;

         命令都要用绝对路径,因为/etc/crontab中PATH与环境变量的PATH不一致。

         第一个*  一小时当中的第几分钟   0-59

         第二个*  一天当中的第几小时     0-23

         第三个*  一个月当中的第几天     1-31

         第四个*  一年当中的第几月       1-12

         第五个*  一周当中的星期几       0-7(0和7都是sunday

         *       代表任何时间,例:第一个*代表一小时中的每分钟都执行一次

              代表不连续的时间,例:“0  8,12,16 *  *  * 命令”代表在每天的8点0分,12点0分,16点0分都执行一次

              代表连续的时间范围,例:“0  5 *  *  1-6  命令”代表周一到周六5点0分执行

         */n   代表每隔多久执行一次,例:“*/10  * *  *  *  命令”代表每隔10分钟执行一次

         例:#crontab  -e

         5  5 *  *  2       /sbin/shutdown  -r  now    (每周二的5点5分重启

         30  3 1,10,15  *  *  /root/sh/autobak.sh        (每月的1号10号15号执行脚本

         #crontab  -l

         #crontab  -r

         》系统的crontab设置:

         配置方法两种:

         方一:把需要定时执行的工作写成脚本,赋予执行权限,复制到/etc/cron.{hourly,daily,weekly,monthly}

         方二:修改/etc/crontab,自己加入自己的定时任务,需注意加入指定脚本的执行者身份(root才能修改此文件)

         #vi  /etc/crontab

         *  * *  *  * root  run-parts  /root/cron/

         注:run-parts/usr/bin/下的脚本,/root/cron/此目录下的脚本会按时执行

         3、anacron:解决服务器意外关机,定时任务没有执行

         检测周期为1天7天1个月,anacron会读取/var/spool/anacron/目录中的文件的时间与当前时间比较,若差值超过了anacron的指定时间(1天7天1个月),anacron会执行漏掉的定时任务。

         centos6.xanacron不再是单独的服务,而变成了系统命令;cronie-anacron取代了vixie-cron软件包),/etc/cron.{daily,weekly,monthly}只会被anacron调用,是为避免cronanacron重复执行同一个定时任务,所以可将定时任务的脚本放在此目录下。

         #anacron   选项  工作名

         -s      (开始anacron工作,依据/etc/anacrontab文件中设定的延迟时间执行

         -n      (立即执行/etc/anacrontab中所有工作,忽略所有的延迟时间

         -u      (更新/var/spool/anacron/cron.{daily,weekly,monthly}文件中的时间戳,但不执行任何工作。

         工作名:依据/etc/anacrontab文件中定义的工作名

         注:系统会依赖/etc/anacrontab文件中的设定通过anacron执行定时任务

         例:设定定时任务在每天的03:00-05:00执行

         #vi  /etc/anacrontab

         RANDOM_DELAY=0                   (最大随机延迟

         START_HOURS_RANGE=3-5        (执行时间范围

         periedin days  delay in minutes       job-identifier    command

         1            0            cron.daily       nice run-parts/etc/cron.daily

         7            0            cron.weekly    nice run-parts /etc/cron.weekly

         @monthly         0          cron.monthly  nice run-parts /etc/cron.monthly

        

        



本文转自 chaijowin 51CTO博客,原文链接:http://blog.51cto.com/jowin/1651931,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
技术小阿哥
+ 关注