标签:linux 进程管理
进程的分类:
CPU-Bound: CPU密集型
I/O-Bound: I/O密集型
进程的分类:
批处理进程
交互式进程
实时进程
进程调度器:
进程优先级:0-139
实时优先级:1-99,数字越大,优先级越高
静态优先级:100-139, nice值调整,数字越大,优先级越低
nice: -20, 19
priority: 100, 139
动态优先级:由内核维护,动态调整
进程状态:running
运行态:
就绪态:
睡眠态:sleeping
可中断睡眠: inruptable
不可中断睡眠: uninruptable
停止态:不会被调度,stopped
僵死态:zombie
进程管理命令:
ps, pstree, pidof, top, htop, pmap, vmstat, dstat
linux 终端
控制台:/dev/console
物理终端:
虚拟终端:/dev/tty[1-6]
模拟终端:/dev/pts/#
串行终端:/dev/ttyS#
1、ps: 显示进程状态的命令
常用组合1:ps -aux
-a:与终端相关的进程
-x:与终端无关的进程
-u:以用户为中心显示相关的进程
-o:自定义需要显示的字段,不能和u组合
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 2900 1404 ? Ss Feb28 0:05 /sbin/init
STAT: 进程状态
R: 运行中
S: 可中断
D: 不可中断
T:停止
Z:僵死
s: session leader
+:前台进程
l: 多线程进程
N: 低优先级进程
<: 高优先级进程
-u: 以用户为中心显示进程相关信息
%CPU:cputime(进程运行总时长)/realtime(cpu总共运行时长)
%MEM:
VSZ: Virutal memory SiZe(虚拟地址空间大小)
RSS: 常驻内存集
其它常用组合
ps -ef
-e: 显示所有进程
-f: 显示完整格式列表
ps -eFH
-F: 显示额外信息
-H: 显示进程的层次信息
2、pgrep 查找进程的PID号
# pgrep -U root \\ 只显示root用户的PID号 # pgrep -G root \\ 只显示root组的PID号 # pgrep -f ping.sh \\列出和ping.sh程序相关的PID号,此-f 选项可省
3、pidof 显示指定命令启动的进程PID号
# pidof COMMAND
4、dstat 性能检测工具
[root@zibbix ~]# 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| 978B 78k| 0 0 | 0 0 | 107 104 0 0 97 2 0 0| 0 464k|1592B 826B| 0 0 | 149 176 0 0 100 0 0 0| 0 44k|1656B 346B| 0 0 | 107 76
上而示例为dstat执行的结果,默认每秒对cpu、disk(磁盘)、net(网络)、paging(页面)、system(系统)进行监控。
CPU状态:显示了用户、系统、空闲、I/0等待
磁盘统计:磁盘的读写操作,这一栏显示磁盘的读(read)、写(writ)总数
网络统计:网络设备发送和接受的数据,这一栏显示的网络收(rece)、发(send)数据总数。
分页统计:系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散,大多数情况下你都希望看到page in(换入)和page out(换出)的值是0 0。
系统统计:这一项显示的是中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。
dstat 可以通过两个参数来控制输出信息,dstat [delay [count]]
如下,第一个参数控制每3秒更新一次数据,只显示8次。
dstat 3 8
常用选项如下:
-l :显示负载统计量
-m :显示内存使用率(包括used,buffer,cache,free值)
-r :显示I/O统计
-s :显示交换分区使用情况
-t :将当前时间显示在第一行
–fs :显示文件系统统计数据(包括文件总数量和inodes值)
–nocolor :不显示颜色(有时候有用)
–socket :显示网络统计数据
–tcp :显示常用的TCP统计
–udp :显示监听的UDP接口及其当前用量的一些动态数据
5、nice、renice 手动调整进程优先级
可调整nice值的级别: -20, 19 调整的值,对应系统上100, 139(系统的优先别有0-139)
默认nice为0,其默认优先级为120,普通用户只能调大nice值,nice值越小优先级越高。
(a)、对于尚未启用的程序:
# nice -n # COMMAND
(b)、对于运行中的进程:
# renice # PID
(c)、查询nice值可以使用如下命令完成
# ps axo ni,command,pid
6、进程间通信,kill命令的使用
kill命令,用于实现向其它进程发送信息。
显示常用信号
# kill -l # man 7 signal
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
kill命令使用格式
# kill [-signal] PID
默认不带参数信号为15,常用的几个signal如下:
1) SIGHUP: 让程序重读配置文件,而不用重启程序
2) SIGINT: 中断信号,Ctrl+c即发送此信号
9) SIGKILL:杀死进程
15) SIGTERM:终止进程
也可以使用killall来终止一个程序的所有进程
# killall [-SIGNAL] command
7、linux作业控制
前台作业:占据着一个终端
后台作业:作业执行时不占据终端,作业启动后就释放终端
(a)、非守护进程类的程序,启动以后都在前台工作,如果想送往后台可以有如下几种方式
(1) 如果已经启动:前台-->后台,Ctrl+z把前台作业送往后台,但作业将被“停止”
(2)如果尚未启动:COMMAND &
(3)以上两种方式送到后台后,如果此时退出当前会话,作业也将一并退出,因为作业与当前终端相关,如果不期望作来随终端结束而终止可以使用nohup操作如下:
# nohup COMMAND &
(b)、如何查看后台的作业?
# jobs \\ 使用jobs命令可以查看后台作业 [1]+ Stopped cat
(c)、如何操作后台作业?
# fg [[%]job_num]: 将作业调回前台继续运行
# fg %1 \\ 此处的%号也是可以省略的,1为jobs查看的作业号
# bg [[%]job_num]:让送往后台的作业继续运行
# bg %1
(d)、如何结束一个后台作业?
# kill [%job_num] \\ 此处的%号是不可以省略
# kill %1
******************
系统监控是系统管理员的日常工作之一,它可以分为性能监控和故障监控。
系统性能监控
系统性能主要关注CPU、内存、磁盘IO和网络这4个方面。有关系统性能的几个工具有 vmstat、mpstat、iostat、sar、top
性能分析准则
要衡量一个系统性能状态可以从系统的响应时间以及系统吞吐量两个角度来进行分析。
系统响应时间:能够快速响应客户端请求,即响应时间短。
系统吞吐量:在指定时间内系统能完成的用户或系统请求数,该值越大说明系统的吞吐量越大,处理能力也越高。
一个计算机是由各种实现不同功能的软硬件资源所组成,这些资源之间是相互联系的,任何一个地方出现问题都会影响整个系统性能,如水桶效应,水桶的水量取决于最短的那块。
系统管理员进行系统监控的主要目的在于就是找出系统的性能瓶颈所在,然后有针对性的进行调整,计算机组成很复杂,但关键主要对CPU、内存、磁盘IO和网络这4个方面进行监控。
8、TOP命令
TOP是一个非常优秀的交互式性能监控工具,可以在一个统一的界面中按照用户指定的时间间隔刷新显示内存、cpu、进程、用户数据、运行时间等性能信息。
命令格式:
top -hv | -d delay -n -u user -p pid
常用选项说明
-p pid :只显示指定pid进程信息
-u user:只显示指定用户的进程信息
-n :指定top命令在刷新n显示后退出
-d delay:指定top命令刷新显示的时间间隔(秒),默认为3秒
-n #:指定显示的次数
-b 以批次显示TOP的刷新
to命令运行结果:
在top界面下,按数字1可以展开多个CPU核心
t不显示CPU性能参数
l 不显示负载那一行
m 不显示内存那一行
q 退出top命令
k:kill 终止一个进程
s改变TOP刷新时间间隔,默认为3秒
上面所示第一行显示系统运行时间、用户数以及负载的平均信息
top - 11:48:01 up 1 day, 10:24, 1 user, load average: 0.00, 0.00, 0.00
当前系统时间为”11:48:01“,至今运行了1天,10个小时24分;当前登录用户数为1个;最近1分钟、5分钟、15分钟的负载平均值分别为 0.00, 0.00, 0.00
第二行显示进程的概要信息:
Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie
total 系统当前的进程总数
running 系统正在运行的进程数
sleeping 系统正在休眠的进程数
stopped 系统中停止的进程数
zombie 系统中僵死的进程数
第三行是CPU的信息
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
us 表示用户进程占用cpu百分比
sy 表示系统进程占用cpu百分比
ni 表示改变过优先级的用户进程占用的cpu百分比
id 空闲cpu百分比
wa 等待IO所占用的cpu百分比(数值太高意味着磁盘太慢了)
hi 硬件中断占用的cpu百分比
si 输件中断占用的cpu百分比
st 虚拟设备的cpu百分比
第四行物理内存信息
Mem: 1906492k total, 1403288k used, 503204k free, 89960k buffers
total 物理内存总数
used 己经使用的物理内存
free 空闲的物理内存数
bufers 用作缓冲区的内存数
第四行是虚拟内存的信息
Swap: 4095996k total, 6824k used, 4089172k free, 480704k cached
total 虚拟内存总数
used 己经使用的虚拟内存数
free 空闲的虚拟内存数
cached 用作缓存的虚拟内存数
第五其余部份是进程信息
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2350 mysql 20 0 685m 37m 6532 S 0.3 2.0 0:47.68 mysqld
PID 进程ID
USER 进程运行者
PR 优先级
NI nice值,-20是最高级,19是最低级
VIRT 进程使用的虚拟内存大小
RES 进程使用的物理内存大小
SHR 共享内存大小
S 进程状态
%CPU 进程占用的CPU百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的总的CPU时间比
COMMAND 进程的名称
9、vmstat 内存监控
Linux系统内存分为物理内存和虚拟内存两种。物理内存是真实的,虚拟内存则是使用磁盘空间来补充物理内存,将暂时不使用的内存页写到硬盘上,当这些内存页需要时使用将会从硬盘(虚拟内存)读到内存中,在Linux系统中虚拟内存就是磁盘上的swap分区。
vmstat使用格示
vmstat [delay [counts]]
delay (每隔几秒显示一次)
counts (只显示几次)
-s:显示内存统计数据
vmstat(Virtual Meomory Statistics,虚拟内存统计)是Linux系统监控内存的常用工具,可对操作系统的虚拟内存、进程和CPU等情况进行监控。
[root@lsof ~]# vmstatprocs -----------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 1346760 27768 367168 0 0 24 17 16 15 0 0 99 0 0
procs(进程)
r 在运行队列中等待的进程数
b 被阻塞的,在等待io的进程数
memory(内存)
swpd 己经在使用的交换内存(swap虚拟内存)
free 空闲(未使用)的物理内存
buff 用作缓冲区的内存数,通用与缓存写操作相关
cache 用作高速缓存区的内存数,通常用来缓读操作相关。
swap(交换页面)
si 从磁盘到交换内存的交换页数量(KB/S)
so 从内存交换到磁盘的的交换页数据(KB/S)
IO(块设备)
bi (block in)从块设备读入的数据量,(块/秒)
bo (block out)保存至块设备中的数据量,(块/秒)
system(系统)
in 每秒的中断数,包括时间中断
cs (context switch)每称的上下文切换的次数
CPU(处理器)
us 用户进程使用的CPU时间(%)
sy 系统进程使用的CPU时间(%)
id CPU空闲时间
wa 等待IO所消耗的CPU时间(%)
st 从虚拟设备中获得的时间(%)
对于内存监控只需要关心 swpd、free、buff、cache、si、so尤其需要关注free和si、so三个指数。当物理内存不能满足需求时系统就会把内存中的交换数据交换到磁盘中,这时si、so的数据将会增加。
-------------------------- CPU监控 ----------------------------------
CPU性能主要关注3个指示:运行队列、CPU使用率、和上下文切换
1.运行队列
每个CPU都维护一个运行队列,调度器会不断的轮循让队列中的进程运行,直到进程运行完成后将其队列删除;如果CPU过载,调度器跟不上系统要求,则会导致运行队列中等礴的进程越来越多;正常来说每个CPU的运行队列不要超过3,双核心的不要超过6以此类推。
2.CPU使用率
CPU使用率一般可以分为以下几个部份
用户进程:运行用户进程所点用的CPU时间的百分比
系统进程:运行系统进程和中断所点用的CPU时间百分比。
等待IO:因为IO等待而使CPU处于idle状态的时间百分比
空闲:CPU处于空闲状态的时间百分比;
如果CPU空闲率长期低于10%,那么表示CPU资源己经非常紧张了,应该考虑进行优化或添加更多的CPU。而“等待IO”表示CPU等待IO资源而被迫处于空闲状态,这个时候CPU没有处于运算状态,所以“等待IO”值越小越好。
3.上下文切换
通过CPU时间轮循的方法,Linux能够支持多任务同时运行。每个进程会被分配CPU时间片来运行。当一个进程用完时间片或被更高优先级的进程抢占时间块后,它会被转到CPU等待运行队列中,同时让其它进程在CPU上运行,这个进程切换的过程称为上下文切换。过多的上下文切换会造成系统很大的开销。
procs(进程)
r 在运行队列中等待的进程数
b 在等待io的进程数
system(系统)
in 每秒的中断数,包括时间中断
cs 每称的上下文切换的次数...
CPU(处理器)
us 用户进程使用的CPU时间(%)...
sy 系统进程使用的CPU时间(%)...
id CPU空闲时间...
wa 等待IO所消耗的CPU时间(%)...
st 从虚拟设备中获得的时间(%)
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 1 0 609920 13892 216408 0 0 2468 568 1748 7937 5 5 66 24 0 0 2 0 585756 13948 239764 0 0 1680 36 1584 6402 4 3 82 11 0
补充资料:关于mmap
系统调用mmap()可以将某文件映射至内存(进程空间),如此可以把对文件的操作转为对内存的操作,以此避免更多的lseek()与read()、write()操作,这点对于大文件或者频繁访问的文件而言尤其受益。
1、 Linux采用了投机取巧的分配策略,用到时,才分配物理内存。也就是说进程调用brk()或mmap()时,只是占用了虚拟地址空间,并没有真正占用物理内存。这也正是free –m中used并不意味着消耗的全都是物理内存。
2、 mmap()通过指定标志(flag) MAP_ANONYMOUS来表明该映射是匿名内存映射,此时可以忽略fd,可将它设置为-1。如果不支持MAP_ANONYMOUS标志的类unix系统,可以映射至特殊设备文件/dev/zero实现匿名内存映射。
3、 调用mmap()时就决定了映射大小,不能再增加。换句话说,映射不能改变文件的大小。反过来,由文件被映射部分,而不是由文件大小来决定进程可访问内存空间范围(映射时,指定offset最好是内存页面大小的整数倍)。
4、通常使用mmap()的三种情况.提高I/O效率、匿名内存映射、共享内存进程通信。
mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。
当使用mmap映射文件到进程后,就可以直接操作这段虚拟地址进行文件的读写等操作,不必再调用read,write等系统调用.但需注意,直接对该段内存写时不会写入超过当前文件大小的内容.
采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。
进程:
使用命令 pmap -x <pid> 可以查看进程的内存占用信息; lsof -a -p <pid> 可以查看一个进程打开的文件信息。ps -Lf <pid> 可以查看进程的线程数。
另外procfs也是一个分析进程结构的好地方。procfs是一个虚拟的文件系统,它把系统中正在运行的进程都显现在/proc/<pid>目录下。
练习:写一个脚本
1、提示用户输入一个nice值;
2、显示以指定nice值运行的所有进程名及PID;
3、指示用户选择要修改其nice值的进程的PID和nice值
4、执行修改;
5、修改结束后不退出,提示用户可以继续修改其它进程的nice值;
本文出自 “菜鸟日志” 博客,请务必保留此出处http://zkxfoo.blog.51cto.com/1605971/1758526
进程管理,及性能监控 ps, pstree, pidof, top, htop, pmap, vmstat, dstat
标签:linux 进程管理
原文地址:http://zkxfoo.blog.51cto.com/1605971/1758526