Linux进程管理与性能分析
概述
系统维护的一个重要工作就是监控Linux系统的运行状态是否正常,分析系统资源的使用情况,进而对系统进行优化,提高其性能。在实际环境中,系统稳定性尤为重要,可以说系统的稳定性关系到企业的存亡。因此,第一时间掌握CPU、Memory、IO、Network的等系统资源的状态则可以在系统出现问题时及时解决,把损失降到最低。
本篇主要介绍Linux下性能监控的常用工具,进程管理的有效办法,做到以下几点:
-
查看所有运行中的进程
-
查看进程消耗资源
-
定位个别进程并且对其执行指定操作
-
改变进程的优先级
-
杀死指定进程
-
限制进程可用的系统资源等
进程
进程的概念
程序是指令的集合,进程是程序执行的基本单元。进程是由程序运行时创建的,是被载入内存的指令集合、数据以及一些用于存放程序命令行参数、环境变量的栈空间等内容。
因此,程序是静态的,进程则是动态的。
在Linux中通过fork(),clone()创建同一程序的多个进程,并且每个进程由PID来标记,同时执行不会互相干扰。
Linux中的一切皆文件思想决定了进程对文件系统的存取和访问权限通常继承自程序发起者。进程的优先级:
系统优先级(system):0 – 139,共140个优先级数字越小优先级越高。
实时优先级(realtime):99 – 0 对应系统优先级的0-99,数值越大优先级高。这些优先级都要高于正常进程的优先级(nice值)。
Nice优先级(man nice):-20 ~ +19 对应系统优先级中的100 – 139或99。正值表示低优先级,负值表示高优先级,值为零则表示不会调整该进程的优先级。具有最高优先级的程序,其nice值最低,所以在LINUX系统中,值-20使得一项任务变得非常重要;与之相反,如果任务的nice为+19,则表示它是一个高尚的、无私的任务,允许所有其他任务比自己享有宝贵的CPU时间的更大使用份额,这也就是nice的名称的来意。
进程的上下文:
上下文切换(Context Switch)是多任务操作系统的基石,每个进程都有自己的执行环境就是进程的上下文,这些上下文就是当前进程使用的寄存器,比如PC、栈指针%esp、帧指针%ebp等。
当系统执行进程调度时会进行进程的上下文保存与恢复,因此,当系统中的进程繁多的情况下,频繁的上下文切换会消耗CPU时间进程间通信
在同一主机上通过signal、共享空间(shm)、信号量(semophore)实现
在不同主机上:rpc(remote procedure call)、socket机制内存资源
Linux系统中的内存采取分页机制进行管理,页框用来存储页面数据,大小为4k
Linux系统中内存回收算法用的是LRU(Least Recently Used) 最近最少使用算法进行轮询释放内存的。
通常程序执行从逻辑上的“0地址”开始的,所以必须把物理内存地址映射为逻辑地址,由CPU上的内存管理单元(MMU)负责转换线地址与物理地址的转换。进程的类型:
守护进程:daemon,在系统引导过程中启动的进程,和终端无关进程
前台进程:依赖终端,通过终端启动的进程
注意:两者可相互转换进程状态:
进程的分类:
CPU密集型:CPU开销很高的程序,如高并发的 web服务、图形图像处理、科学计算等类型的程序
IO密集型:IO相关的程序通常处理大量数据,需要大量内存和存储,频繁IO读写数据,对CPU要求较小,如数据库服务、文件服务等
交互型、非交互型
【SIGNAL】信号机制
信号(signal)是一种软中断,信号机制是进程间通信的一种方式
数值1~31为不可靠信号也称为非实时信号,信号可能会丢失, 比如发送多次相同的信号, 进程只能收到一次。
man 7 signal
kill -l #信号列表
1) SIGHUP(HUP): 无须关闭进程而让其重读配置文件
2) SIGINT(INT): 中止正在运行的进程;相当于Ctrl+c
9) SIGKILL(KILL): 杀死正在运行的进程
15) SIGTERM(TERM):终止正在运行的进程,kill pid 默认发送的信号,非正常退出
18) SIGCONT(CONT):继续运行
19) SIGSTOP(STOP):后台休眠
nice 、renice进程优先级调整
nice – run a program with modified scheduling priority
nice [OPTION] [COMMAND [ARG]…]
-n [+|-]# #执行时设置优先级最大为-20,如果不加-n设置负值为–n
renice – alter priority of running processes
top — r — pid — nice值 #同top设置pid的NI值
普通user只能调整进程大于当前nice且为正数的nice值,如用户自己用renice调整为5,下次调整必须大于5,最大为19,超了还是19。
renice [-n] priority [-gpu] identifier…
renice [+|-]# pid
-g # as GID
-u # as usernames or UIDs
rtprio实时优先级调整
chrt #显示所有选项
[root@cent7]~>chrt
chrt - manipulate real-time attributes of a process
Set policy:
chrt [options] [-policy] <priority> [-p <pid> | <command> <arg> ...]
Get policy:
chrt [options] -p <pid>
Scheduling policies:
-b | --batch set policy to SCHED_BATCH
-f | --fifo set policy to SCHED_FIFO
-i | --idle set policy to SCHED_IDLE
-o | --other set policy to SCHED_OTHER
-r | --rr set policy to SCHED_RR (default)
Scheduling flags:
-R | --reset-on-fork set SCHED_RESET_ON_FORK for FIFO or RR
Options:
-a | --all-tasks operate on all the tasks (threads) for a given pid
-h | --help display this help
-m | --max show min and max valid priorities
-p | --pid operate on existing given pid
-v | --verbose display status information
-V | --version output version information
chrt # comm #以0-99的优先级范围执行命令,值越大优先级越高
chrt -p $$ #显示当前bash 的调度策略,实时优先级
前、后台作业管理
前台作业:通过终端启动,且启动后一直占据终端;
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
并行任务
脚本调用多个脚本,加上&使之在后台运行
parallel.sh
a.sh&
b.sh&
c.sh&以子进程方式执行
(f1.sh&);(f2.sh&);(f3.sh&)无名函数
{ f1.sh& f2.sh& f3.sh& }
后台运行作业
COMMAND & #后台,Running态
Ctrl + z #后台,Stopped态
#执行命令终端退出,进程也将关闭剥离进程与终端的关系
nohup comm& #如法和screen那样再切回来
screen ;comm #中断可恢复,常用选项 -S -ls -x -r
管理当前终端的后台进程(运行、终止态)
jobs -l #作业号,pid,stat,comm
jobs #查看所有作业,如果有标准输出则正常输出,但是屏蔽了标准输入
fg[[%]JOB_NUM]:把指定的后台作业调回前台;
bg[[%]JOB_NUM]:后台作业在后台继续运行;手动调入后台的进程为Stopped态
kill [%JOB_NUM]:终止指定的作业;
killall comm #-9强制kill,comm的所有进程都kill
pkill -t pts/x #kill终端产生的进程,建议先用ps看看终端或bash产生的进程,以免误杀其他重要进程
进程管理工具
kill [-SIGNAL] pid…
killall[-SIGNAL] comm…
pkill[options] pattern
-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名
-a: 显示完整格式的进程名
-P pid: 显示父进程为此处指定的进程的进程列表
进程查看工具
pgrep
pgrep[options] pattern
-u uid: effective user,生效者euser
-U uid: real user,真正发起运行命令者ruser
-t terminal: 与指定终端相关的进程
-l: 显示进程名
-a:显示进程名和参数
-P pid: 显示指定进程的子进程列表,与pidof的结果互逆
[root@cent7]~>pgrep -t pts/3
2701
3053
3112
[root@cent7]~>pgrep -t pts/3 -l
2701 bash
3053 vim
3112 ping
[root@cent7]~>pgrep -P 2701
3053
3112
[root@cent7]~>pgrep -P 2701 -l
3053 vim
3112 ping
[root@cent7]~>pgrep -P 2701 -a
3053 vim
3112 ping 127.0.0.1
pidof
find the process ID of a running program
pidof comm #逆序显示comm产生的子进程,comm的pid在最后
pidof -s comm #显示上面的第一个pid,即最后一个子进程的pid
pstree
display a tree of processes #打印系统进程调用树,可以非常清楚地看到当前系统中所有活动进程之间的调用关系
-a显示每个进程的参数或选项,如─ping 127.0.0.1
pstree pid #指定pid的进程树
[root@cent7]~>pstree -a 3160
bash
└─vim f1.txt
pstree #默认从init(pid=1)输出整个进程树
init-+-getty
|-getty
|-getty
`-getty
ps
ps [options] #默认显示当前终端的进程,查看系统中瞬间进程信息,来自/proc下的pid文件
UNIX选项:-A -e
BSD选项:a f
GNU选项:–help
[option] 不带 – 的BSD格式
•a:选项包括所有终端的依赖进程,包括会话发起者
•-a:所有终端的依赖进程,不包括会话发起者
•-e = -A:所有进程=ax
•x:包括所有不链接终端的进程
•u:选项显示进程所有者的信息
•f:显示进程的父进程,进程树,pstree更直接
l:长格式显示,最全的输出
•o:属性… 选项显示定制的信息
pid , comm , %cpu , %mem , state , tty , euser , ruser , nice
[VSZ]:Virtual memory SiZe,虚拟内存集,线性内存,给每个进程最大3G
[RSS]:ReSidentSize, 常驻内存集,实际分配的内存
[STAT]: 进程的状态,zombie状态时会造成资源不可回收
常用组合:-ef,区别于ef(父子进程关系及参数)
-e: 显示所有进程
-f: 显示完整格式程序信息
[root@cent7]~>ps -ef
UID PID PPID C STIME TTY TIME CMD
常用组合:-eFH
-F: 显示更完整格式的进程信息
-H: 以进程层级格式显示进程相关信息
[root@cent7]~>ps -eFH | head -2
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
ps通过进程名过滤,显示效果优于pgrep、pidof
[root@cent7]~>ps -C vim
PID TTY TIME CMD
3689 pts/0 00:00:00 vim
[root@cent7]~>pgrep -a vim
3689 vim
[root@cent7]~>ps aux | grep [v]im
root 3053 0.0 1.2 152332 6048 pts/3 T Sep09 0:00 vim
[root@cent7]~>ps aux | grep -v grep | grep vim
root 3053 0.0 1.2 152332 6048 pts/3 T Sep09 0:00 vim
常用组合:自定义在o之后
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
-axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
性能监控
查看和管理工具:pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill,pkill, job, bg, fg, nohup
性能指标
CPU
CPU 利用率,如果 CPU 有 100% 利用率,那么应该到达这样一个平衡:65%-70% User Time,30%-35% System Time,0%-5% Idle Time;
上下文切换,上下文切换应该和 CPU 利用率联系起来看,如果能保持上面的 CPU 利用率平衡,大量的上下文切换是可以接受的;
可运行队列,每个可运行队列不应该有超过1-3个线程(每处理器),比如:双处理器系统的可运行队列里不应该超过6个线程。Memroy
内存不足:free memory 急剧减少,回收buffer和cache也无济于事,大量使用交换分区(swpd),页面交换(swap)频繁,读写磁盘数量(io)增多,缺页中断(in)增多,上下文切换(cs)次数增多,等待IO的进程数(b)增多,大量CPU时间用于等待IO(wa)。SWAP
当系统没有足够物理内存来应付所有请求的时候就会用到 swap 设备,swap 设备可以是一个文件,也可以是一个磁盘分区。
使用 swap 的代价非常大,如果系统没有物理内存可用,就会频繁 swapping,如果 swap 设备和程序正要访问的数据在同一个文件系统上,那会碰到严重的 IO 问题,最终导致整个系统迟缓,甚至崩溃。
swap 设备和内存之间的 swapping 状况是判断 Linux 系统性能的重要参考,我们已经有很多工具可以用来监测 swap 和 swapping 情况,比如:top
、cat /proc/meminfo
、vmstat
等network
网络的监测是所有 Linux 子系统里面最复杂的,有太多的因素在里面,比如:延迟、阻塞、冲突、丢包等,更糟的是与 Linux 主机相连的路由器、交换机、无线信号都会影响到整体网络并且很难判断是因为 Linux 网络子系统的问题还是别的设备的问题,增加了监测和判断的复杂度。使用ethtool可以查看网口的信息。IOPS
IO 可分为顺序 IO 和 随机 IO 两种,性能监测前需要弄清楚系统偏向顺序 IO 的应用还是随机 IO 应用。
顺序 IO 是指同时顺序请求大量数据,比如数据库执行大量的查询、流媒体服务等,顺序 IO 可以同时很快的移动大量数据。
随机 IO 是指随机请求数据,其 IO 速度不依赖于数据的大小和排列,依赖于磁盘的每秒能 IO 的次数,比如 Web 服务、Mail 服务等每次请求的数据都很小,随机 IO 每秒同时会有更多的请求数产生,所以磁盘的每秒能 IO 多少次是关键。
top – Linux Process Monitoring
top可以实时监控系统和进程的状态,相比瞬时的结果可以实时的变化,但是不能清晰显示数据随时间变动的情况。相较而言,vmstat和pidstat的输出不会覆盖掉之前的结果,因此更适合查看数据随时间的变动情况。另外,如果你不能及时暂停top的输出(Ctrl-s 暂停,Ctrl-q 继续),也许某些关键线索会湮灭在新的输出中。
top - 03:53:00 up 12:56, 4 users, load average: 0.00, 0.01, 0.05
Tasks: 371 total, 2 running, 368 sleeping, 1 stopped, 0 zombie
%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 s
KiB Mem : 485252 total, 23704 free, 132008 used, 329540 buff/cache
KiB Swap: 2098172 total, 2098172 free, 0 used. 304324 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4109 root 20 0 146276 2268 1420 R 0.3 0.5 0:00.25 top
CPU栏目信息:
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间进程栏目信息
PID (Process Id):任务的进程ID
PPID (Parent Process Pid):父任务的进程ID
RUSER (Real User Name):任务的所有者真实名称
UID (User Id):任务所有者ID
USER (User Name):任务所有者名称
GROUP (Group Name):任务所有者群组名
TTY (Controlling Tty):终端
PR (Priority):优先级
%CPU (CPU usage):CPU使用率
%MEM (Memory usage (RES)):内存使用率
S (Process Status):进程状态
TIME+ (CPU Time, hundredths):CPU时间,精确到秒暂停与恢复
Ctrl s
Ctrl q常用内置命令
排序:(shiht + p m t)
P:以占据的CPU百分比,%CPU
M:占据内存百分比,%MEM
T:累积占据CPU时长,TIME+首部信息开关显示:
uptime信息:l
tasks及cpu信息:t
cpu切换显示各核心(默认为总和):1 (数字)
memory信息:m退出命令:q
修改刷新时间间隔:s
终止指定进程:k
保存文件/root/.toprc:W
命令选项
-d #: 指定刷新时间间隔,默认为3秒
-b: 以批次方式
-n #: 显示多少批次
htop
interactive process viewer,更容易被理解,色彩丰富
htop 1
CPU[| 0.1%] Tasks: 47, 20 thr; 2 running
Mem[||||||||||||||||||||219/473MB] Load average: 0.00 0.01 0.05
Swp[ 0/2048MB] Uptime: 13:23:53
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
4223 root 20 0 119M 2080 1428 R 0.1 0.4 0:00.05 htop
F1Help F2Setup F3SearchF4FilterF5Tree F6SortByF7Nice -F8Nice +F9Kill F10Quit
htop 1.0.3 - (C) 2004-2012 Hisham Muhammad
选项:
-d #: 指定延迟时间;
-u UserName: 仅显示指定用户的进程;
-s COLUME: 以指定字段进行排序;内置命令:
s: 跟踪选定进程的系统调用;
l: 显示选定进程打开的文件列表;
a:将选定的进程绑定至某指定CPU核心;
t: 显示进程树
F1 – F9:F7和F8改变优先级,F9杀死进程
uptime
这个命令显示了要运行的任务(进程)数,通过它能够快速了解系统的平均负载。在 Linux 上,这些数值既包括正在或准备运行在 CPU 上的进程,也包括阻塞在不可中断 I/O(通常是磁盘 I/O)上的进程。它展示了资源负载(或需求)的大致情况,不过进一步的解读还有待其它工具的协助。
$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02
最右的三个数值分别是1分钟、5分钟、15分钟系统负载的移动平均值。它们共同展现了负载随时间变动的情况。举个例子,假设你被要求去检查一个出了问题的服务器,而它最近1分钟的负载远远低于15分钟的负载,那么你很可能已经扑了个空。
在上面的例子中,负载均值最近呈上升态势,其中1分钟值高达30,而15分钟值仅有19。这种现象有许多种解释,很有可能是对 CPU 的争用;——vmstat和mpstat——可以帮助我们进一步确定问题所在。
vmstat – Virtual Memory Statistics
Report virtual memory statistics
vmstat[options] [delay [count]]
选项:
-s: 显示内存的统计数据
[root@cent7]/home/nethogs>vmstat 1 5
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
procs:
r:等待运行的进程的个数,和核心数有关
b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)memory:
swpd: 交换内存的使用总量
free:空闲物理内存总量
buffer:用于buffer的内存总量
cache:用于cache的内存总量swap:
si:从磁盘交换进内存的数据速率(kb/s),不为0,性能已经急剧下降
so:从内存交换至磁盘的数据速率(kb/s)
-io:
bi:从块设备读入数据到系统的速率(kb/s)
bo: 保存数据至块设备的速率system:
in: interrupts, 中断速率,包括时钟
cs: context switch, 进程切换速率,超过几十万次则不正常cpu:
us:Timespent running non-kernel code,用户空间
sy: Time spent running kernel code,内核空间
id: Time spent idle. 空闲 #Linux 2.5.41前,包括IO-wait time.
wa: Time spent waiting for IO.等待IO时间 2.5.41前,包括in idle.
st: Time stolen from a virtual machine.虚拟化 2.6.11前, unknown.总结
通过相加 us 和 sy 的百分比,你可以确定 CPU 是否处于忙碌状态。一个持续不变的 I/O 等待意味着瓶颈在硬盘上,这种情况往往伴随着 CPU 的空闲,因为任务都卡在磁盘 I/O 上了。你可以把 I/O 等待当作 CPU 空闲的另一种形式,它额外给出了 CPU 空闲的线索。
I/O 处理同样会消耗系统时间。一个高于20%的平均系统时间,往往值得进一步发掘:也许系统花在 I/O 的时间太长了。
在上面的例子中,CPU 基本把时间花在用户态里面,意味着跑在上面的应用占用了大部分时间。此外,CPU 平均使用率在90%之上。这不一定是个问题;检查下“r”列,看看是否饱和了。
pidstat
类似于top,但数据不会被覆盖,pidstat的输出则添加在之前的输出的后面。这有利于观察数据随时间的变动情况,也便于把你看到的内容复制粘贴到调查报告中。
$ pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 09/6/2016 _x86_64_ (32 CPU)
09:41:02 PM UID PID %usr %system %guest %CPU CPU Command
09:41:03 PM 0 6521 1596.23 1.89 0.00 1.94 1 nginx
07:41:03 PM UID PID %usr %system %guest %CPU CPU Command
07:41:04 PM 0 6521 1596.23 1.89 0.00 1.94 15 mesos-slave
上面的例子表明,CPU 主要消耗在两个 Java 进程上。%CPU列是在各个 CPU 上的使用量的总和;1591%意味着 nginx 进程消耗了将近2个 CPU。
iostat – Input/Output Statistics
监控磁盘的状况,包括工作负载和处理性能
[root@cent7]~>iostat -xz 1
Linux 3.10.0-327.el7.x86_64 (cent7) 09/10/2016 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.17 0.00 0.91 0.01 0.00 98.91
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09
r/s,w/s,rkB/s,wkB/s:分别表示每秒设备读次数,写次数,读的 KB 数,写的 KB 数。它们描述了磁盘的工作负载。也许性能问题就是由过高的负载所造成的。
await:I/O 平均时间,以毫秒作单位。它是应用中 I/O 处理所实际消耗的时间,因为其中既包括排队用时也包括处理用时。如果它比预期的大,就意味着设备饱和了,或者设备出了问题。
avgqu-sz:分配给设备的平均请求数。大于1表示设备已经饱和了。(不过有些设备可以并行处理请求,比如由多个磁盘组成的虚拟设备)
%util:设备使用率。这个值显示了设备每秒内工作时间的百分比,一般都处于高位。低于60%通常是低性能的表现(也可以从 await 中看出),不过这个得看设备的类型。接近100%通常意味着饱和。
如果某个存储设备是由多个物理磁盘组成的逻辑磁盘设备,100%的使用率可能只是意味着 I/O 占用。
磁盘 I/O 性能低不一定是个问题。应用的 I/O 往往是异步的(比如预读read-ahead和写缓冲buffering for writes),所以不一定会被阻塞并遭受延迟。
free
显示Mem和Swap的使用情况,还可以显示被buffer和cache的内存。
$ free -m
total used free shared buffers cached
Mem: 245998 24545 221453 83 59 541
-/+ buffers/cache: 23944 222053
Swap: 0 0 0
buffers:用于块设备 I/O 的缓冲区缓存
cached:用于文件系统的页缓存
-buffers/cache反映的是被程序占用的内存,而+buffers/cache反映的是可以挪用的内存。这两个值接近0时往往导致较高的磁盘I/O(iostat 1)
CentOS6中total=used+free,used – buffers – cached,free + buffers + cached
dstat
统计系统资源,显示cpu使用情况,磁盘io 情况,网络发包情况和换页情况
iostat和vmstat 的输出虽然详细,但是不够直观,不如dstat 好用,且dstat具有色彩,显示更直观,dstat综合了 vmstat, iostat, ifstat, netstat 等多个信息
dstat[-afv] [options..] [delay [count]]
-c: 显示cpu相关信息
-C #,#,…,total
-d: 显示disk相关信息
-D total,sda,sdb,…
-l:平均负载
-g:显示page相关统计数据
-m:显示memory相关统计数据
-n:显示network相关统计数据
-p:显示process相关统计数据
-r:显示io请求相关的统计数据
-s:显示swapped相关的统计数据
-y:系统system相关的统计数据dstat -lcdmnprgsy
[root@cent7]/home/nethogs>dstat
You did not select any stats, using -cdngy by default.
----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|1491k 1195B| 0 0 | 2B 9B| 31 27
–tcp
–udp
–unix
–raw
–socket
–ipc
–top-cpu:显示最占用CPU的进程
–top-io: 显示最占用io的进程
–top-mem: 显示最占用内存的进程
–top-latency: 显示延迟最大的进程
[root@cent7]~>dstat --tcp --udp --top-io
----tcp-sockets---- --udp-- ----most-expensive----
lis act syn tim clo|lis act| i/o process
5 4 0 0 0| 2 0|bash 2337k 2328k
5 4 0 0 0| 2 0|sshd: root@ 466B 516B
glances
A cross-platform curses-based monitoring tool
glance是一款Python语言开发的系统监控工具,能够监视CPU、负载、内存、磁盘I/O、网络流量、文件系统、系统温度等信息。
功能
CPU 使用率
内存使用情况
内核统计信息和运行队列信息
磁盘 I/O 速度、传输和读/写比率
文件系统中的可用空间
磁盘适配器
网络 I/O 速度、传输和读/写比率
页面空间和页面速度
消耗资源最多的进程
计算机信息和系统资源glance实时显示系统信息,占用CPU资源通常低于2%,默认刷新间隔2秒,可输出.csv或.html格式报表
常用选项
-b: 以Byte为单位显示网卡数据速率
-d: 关闭磁盘I/O模块
-f /path/to/somefile: 设定输入文件位置
-o {HTML|CSV}:输出格式
-m: 禁用mount模块
-n: 禁用网络模块
-t #: 延迟时间间隔
-1:每个CPU的相关数据单独显示
工作界面
cent6 (CentOS 6.8 64bit / Linux 2.6.32-642.el6.x86_64) Uptime: 3:35:25
CPU 3.2% Load 1-core Mem 49.2% active: 53.9M Swap 1.1%
user: 1.3% 1 min: 0.00 total: 475M inactive: 163M total: 1024M
system: 1.9% 5 min: 0.01 used: 233M buffers: 8.40M used: 11.4M
idle: 96.8% 15 min: 0.05 free: 241M cached: 110M free: 1013M
Network Rx/s Tx/s Tasks 135 (221 thr), 1 run, 134 slp, 0 oth
bond0 6Kb 2Kb
eth0 3Kb 0b VIRT RES CPU% MEM% NAME
eth1 3Kb 2Kb 205M 12M 2.9 2.4 glances
lo 0b 0b 19M 1M 0.0 0.3 /sbin/init
0 0 0.0 0.0 kthreadd
Disk I/O In/s Out/s 0 0 0.0 0.0 migration/0
sda1 0 0 0 0 0.0 0.0 ksoftirqd/0
sda2 0 0 0 0 0.0 0.0 stopper/0
sda3 0 0 0 0 0.0 0.0 watchdog/0
0 0 0.0 0.0 events/0
Mount Used Total 0 0 0.0 0.0 events/0
/ 3.35G 11.5G 0 0 0.0 0.0 events_long/0
/boot 33.3M 141M 0 0 0.0 0.0 cgroup
Press 'h' for help
参数说明
VIRT: 虚拟内存大小
RES: 进程占用的物理内存值
%CPU:该进程占用的 CPU 使用率
%MEM:该进程占用的物理内存和总内存的百分比
PID: 进程 ID 号
USER: 进程所有者的用户名
TIME+: 该进程启动后占用的总的 CPU 时间
IO_R 和 IO_W: 进程的读写 I/O 速率
NAME: 进程名称
NI: 进程优先级
S: 进程状态,其中 S 表示休眠,R 表示正在运行,Z 表示僵死状态。
快捷键
h : 显示帮助信息
q : 离开程序退出
c :按照 CPU 实时负载对系统进程进行排序
m :按照内存使用状况对系统进程排序
i:按照 I/O 使用状况对系统进程排序
p: 按照进程名称排序
d : 显示磁盘读写状况
w : 删除日志文件
l :显示日志
s: 显示传感器信息
f : 显示系统信息
1 :轮流显示每个 CPU 内核的使用情况(次选项仅仅使用在多核 CPU 系统)
服务器 / 客户端工作方式
Server端:
glances -s -B IPADDR #本机ip
Client端:
glances -c IPADDR #服务端ip
总结
理解所有的 linux 性能分析工具并做出理性的选择是一个浩大的工程,这是一个很好的例程:
原创文章,作者:helloc,如若转载,请注明出处:http://www.178linux.com/45404