码迷,mamicode.com
首页 > 系统相关 > 详细

进程管理,及性能监控 ps, pstree, pidof, top, htop, pmap, vmstat, dstat

时间:2016-03-30 18:02:06      阅读:435      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!