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

进程的分类:
    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 性能检测工具

[[email protected] ~]# 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等情况进行监控。

[[email protected] ~]# 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值;

时间: 2024-08-06 15:56:23

进程管理,及性能监控 ps, pstree, pidof, top, htop, pmap, vmstat, dstat的相关文章

Linux之进程管理,性能监控与计划任务

进程管理 ps ps [OPTION]...常用选项 aux,-ef,-eFH,-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,commaxo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm 选项:默认显示当前终端中的进程 a 选项包括所有终端中的进程x 选项包括不链接终端的进程u 选项显示进程所有者的信息f 选项显示进程树,相当于 --forestk|--sort 属性 对属性排序,属性前加

Linux进程管理和系统监控ps,top

在Linux下进程查看和进程管理是经常使用的命令,我们可以使用ps来查看上一个状态中,各进程的信息,也可以通过top命令来实时的查看进程的属性信息.可以通过kill来管理进程运行,通过调整renice值来调整进程的优先级. 而htop.dstat.glances则是非常优秀Linux的系统监控命令,接下来就一步一步介绍他们的使用. ps的使用 查看ps是shell内置的命令还是外部命令 [[email protected] ~]# type psps is /bin/ps 由上可知ps是外部命令

#21 在Linux里进程管理详解,与pstree、ps、pgrep、pkill、pidof、top命令的应用

进程管理: 所谓进程:process,一个活动的程序的实体的副本: 生命周期: 可能包含一个或多个执行流: 创建进程: 每个进程的组织结构是一致的: 内核在正常启动并且全面接管硬件资源之后,会创建一个init的进程:而这个名叫init的进程负责用户空间的进程管理: centos5及以前:sysV init,classic init 有缺陷:在启动系统时,init通过写脚本的方式来创建各个子进程:利用shell来实现,因此其执行速度非常慢:导致系统的启动速度和进程的创建速度都非常慢: centos

【linux之进程管理,系统监控】

一.进程管理 前台进程:一般是指占据着标准输入和/或标准输出的进程后台进程:不占据默认开启的进程都是前台进程ctrl+C 中断ctrl+z 从前台转入后台bg 后台进程编号 让其在后台运行ls -R / & 让其在后台进行 使一个进程在后台进行1.ctrl+z将前台进程调入后台,默认进行到后台后处于停止状态 若想要在后台运行该后台进程,使用 bg # (#表示后台进程编号),此时ctrl+c不管用2.在开启进程的时候,使用&符号缀在命令之后,也是在后台运行该进程 使用fg命令可以将已被调入

38.进程管理与计划任务---PS、Top、Crontab

控制进程管理的命令有: 命令 选项 描述 示例 ps a:显示当前终端的进程 u:以用户为主的格式显示 x:显示当前用户所有进程 -e:显示系统内所有进程信息 -i:以长格式显示 -f:使用完整格式显示 静态查看进程 ps aux ps -eif top 打开进程管理器 top pgrep -l:显示进程名 -P:显示父进程 -g:显示进程组 -t:指定开启进程的终端 -u:指定进程的有效用户ID 查询服务对应进程信息 pgrep http pstree -p:列出对应的PID号 -u:列出对应

linux-进程管理,ps,pstree,nice,top,vmstat,kill,jobs

进程及作业管理 进程状态 stoped:停止 ready:就绪 executing:正在运行 zombie:僵尸 Uninterruptible sleep: 不可中断的睡眠Interruptible sleep:可中断睡眠 kernel:init:第一个进程,所有进程的父进程 pstree:查看进程树 [[email protected] ~]# pstreeinit─┬─NetworkManager─┬─dhclient     │                └─{NetworkMana

几个进程管理的命令:pkill,pidof,kill,killall,job

pkill命令可以按照进程名杀死进程.pkill和killall应用方法差不多,也是直接杀死运行中的程序:如果您想杀掉单个进程,请用kill来杀掉.pkill命令可以按照进程名杀死进程.pkill和killall应用方法差不多,也是直接杀死运行中的程序:如果您想杀掉单个进程,请用kill来杀掉.语法: pkill(选项)(参数)使用实例: [[email protected] ~]# pkill top pidof命令用于查找指定名称的进程的进程号id号 [[email protected] ~

马哥教育第十二天、进程管理、top、dstat、htop、case

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体. cpu环0只运行内核,环3运行用户进程,当用户进程需要运行特权指令时(和硬件交互等)会发起软中断由用户模式转为内核模式,由内核代为执行相关操作. 进程被内核调度分为不同进程状态: 运行态(running)

进程管理工具的使用

Linux进程管理工具: pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, job, pstree: 显示进程树 -p: 显示各进程的PID ps: 显示进程状态的命令 Linux各进程的相关信息在/proc目录有一个以其PID命令的目录下的众多文件中: 支持两种使用风格:SysV, BSD 进程分类(根据进程是否通过终端启动): 与终端相关的进程: a 与终端无关的进程: x 常用组合1:aux u: