[linux command]top+ps+vmstat+iostat+cpuinfo


ps进程查看命令

使用该命令能够肯定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多 的资源等等。总之大部分信息都是能够经过执行该命令获得的。 ios

-A 显示全部进程(等价于-e)(utility)
-a 显示一个终端的全部进程,除了会话引线
-N 忽略选择。
-d 显示全部进程,但省略全部的会话引线(utility)
-x 显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility)
-p pid 进程使用cpu的时间
-u uid or username 选择有效的用户id或者是用户名
-g gid or groupname 显示组的全部进程。
U username 显示该用户下的全部进程,且显示各个命令的详细路径。如:ps U zhang;(utility)
-f 所有列出,一般和其余选项联用。如:ps -fa or ps -fx and so on.
-l 长格式(有F,wchan,C 等字段)
-j 做业格式
-o 用户自定义格式输出,如设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)。
v 以虚拟存储器格式显示
s 以信号格式显示    -m 显示全部的线程
-H 显示进程的层次(和其它的命令合用,如:ps -Ha)(utility)
e 命令以后显示环境(如:ps -d e; ps -a e)(utility)
h 不显示第一行
web

r 显示运行中的进程; 算法

ww 避免详细参数被截断; shell

咱们经常使用的选项是组合是 aux 或 lax,还有参数 f 的应用。 缓存

二、ps aux 或 lax 输出的解释 网络

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

USER 进程的属主; 性能

PID 进程的ID; 优化

PPID 父进程; ui

%CPU 进程占用的CPU百分比;

%MEM 占用内存的百分比;

NI 进程的NICE值,数值大,表示较少占用CPU时间;

VSZ 进程虚拟大小;

RSS 驻留中页的数量;

TTY 终端ID

STAT状态码:

< 优先级高的进程

N 优先级较低的进程

L 有些页被锁进内存;

s 进程的领导者(在它之下有子进程);

l 多进程的(使用 CLONE_THREAD, 相似 NPTL pthreads);

+ 位于后台的进程组;

WCHAN 正在等待的进程资源;

START 启动进程的时间;

TIME 进程消耗CPU的时间;

STAT: 

D 不可中断 uninterruptible sleep (usually IO) 

R 运行 runnable (on run queue) 

S 中断 sleeping 

T 中止 traced or stopped

Z 僵死 a defunct("zombie") process

如何杀死僵死进程?

ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
-o:定义输出格式,stat状态、ppid父进程id,pid进程id,cmd命令

kill子进程,若是失败则kill 父进程


kill -HUP 12339(父进程)



top实时动态地查看系统的总体运行状况

top命令一个综合了多方信息监测系统性能和运行信息的实用工具。经过top命令所提供的互动式界面,用热键能够管理。

top - 09:44:56[当前系统时间], 16 days[系统已经运行了16天], 1 user[个用户当前登陆], load average: 9.59, 4.75, 1.92[系统负载,即任务队列的平均长度]

Tasks: 145 total[总进程数], 2 running[正在运行的进程数], 143 sleeping[睡眠的进程数], 0 stopped[中止的进程数], 0 zombie[冻结进程数],

Cpu(s): 99.8%us[用户空间占用CPU百分比], 0.1%sy[内核空间占用CPU百分比], 0.0%ni[用户进程空间内改变过优先级的进程占用CPU百分比], 0.2%id[空闲CPU百分比], 0.0%wa[等待输入输出的CPU时间百分比], 0.0%hi[], 0.0%st[],

Mem: 4147888k total[物理内存总量], 2493092k used[使用的物理内存总量], 1654796k free[空闲内存总量], 158188k buffers[用做内核缓存的内存量]

Swap:  5144568k total[交换区总量], 56k used[使用的交换区总量], 5144512k free[空闲交换区总量], 2013180k cached[缓冲的交换区总量],

统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

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

序号列名含义
PID    进程id
PPID    父进程id
RUSER    Realusername
UID    进程全部者的用户id
USER    进程全部者的用户名
GROUP    进程全部者的组名
TTY    启动进程的终端名。不是从终端启动的进程则显示为?
PR    优先级
NInice     值。负值表示高优先级,正值表示低优先级
P    最后使用的CPU,仅在多CPU环境下有意义
%CPU    上次更新到如今的CPU时间占用百分比
TIME    进程使用的CPU时间总计,单位秒
TIME+    进程使用的CPU时间总计,单位1/100秒
%MEM    进程使用的物理内存百分比
VIRT    进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP    进程使用的虚拟内存中,被换出的大小,单位kb。
RES    进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE    可执行代码占用的物理内存大小,单位kb
DATA    可执行代码之外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR    共享内存大小,单位kb
nFLT    页面错误次数
nDRT    最后一次写入到如今,被修改过的页面数。

top 也是个挺不错的程序观察工具!但不一样于 ps 是静态的结果输出, top 这个程序能够持续的监测 (monitor) 整个系统的程序工做状态,例如上面的范例一所示啊! 在预设的状况下,每次更新程序资源的时间为5 秒,不过,可使用 -d 来进行修改。 top 主要分为两个画面,上面的画面为整个系统的资源使用状态,基本上总共有六行, 显示的内容依序是:
• 第一行:显示系统已启动的时间、目前上线人数、系统总体的负载(load)。 比较须要注意的是系统的负载,三个数据分别表明1,5,10 分钟的平均负载。 通常来讲,这个负载值应该不太可能超过1 才对,除非您的系统很忙碌。 若是持续高于5 的话,那么.....仔细的看看究竟是那个程序在影响总体系统吧!
• 第二行:显示的是目前的观察程序数量,比较须要注意的是最后的 zombie 那个数值,若是不是0 ,嘿嘿!好好看看究竟是那个 process 变成疆尸了吧?!
• 第三行:显示的是CPU 的总体负载,每一个项目可以使用 ? 查阅。须要观察的是 id (idle) 的数值,通常来讲,他应该要接近100% 才好,表示系统不多资源被使用啊! ^_^。
• 第四行与第五行:表示目前的物理内存与虚拟内存 (Mem/Swap) 的使用状况。
• 第六行:这个是当在 top 程序当中输入指令时,显示状态的地方。 例如范例四就是一个简单的使用例子。
至于 top 底下的画面,则是每一个 process 使用的资源状况。比较须要注意的是:
•PID :每一个 process 的ID 啦!
•USER:该 process 所属的使用者;
•PR :Priority 的简写,程序的优先执行顺序,越小越早被执行;
•NI :Nice 的简写,与 Priority 有关,也是越小越早被执行;
• %CPU:CPU 的使用率;
• %MEM:内存的使用率;
•TIME+:CPU 使用时间的累加;
通常来讲,若是鸟哥想要找出最损耗CPU 资源的那个程序时,大多使用的就是 top 这支程序啦!而后强制以CPU 使用资源来排序 (在 top 当中按下P 便可), 就能够很快的知道啦! ^_^。多多爱用这个好用的东西喔!


Load 负载

Load :对计算机干活多少的度量,简单的说是进程队列的长度。(The system Load is a measure of the amount of work that a compute system is doing)

Load Average 就是一段时间(1分钟、5分钟、15分钟)内平均Load。

【Load查看指令】
w

uptime

procinfo

top

【如何判断系统是否已经Over Load?】
对通常的系统来讲,根据cpu数量去判断。若是平均负载始终在1.2一下,而你有2颗cup的机器。那么基本不会出现cpu不够用的状况。也就是Load平均要小于Cpu的数量(cat /proc/cpuinfo
【Load与容量规划(Capacity Planning)】
通常是会根据15分钟那个load 平均值为首先。

【Load误解】
1:系统load高必定是性能有问题。
真相:Load高也许是由于在进行cpu密集型的计算
2:系统Load高必定是CPU能力问题或数量不够。
真相:Load高只是表明须要运行的队列累计过多了。但队列中的任务实际多是耗Cpu的,也多是耗i/0或其余因素的。
3:系统长期Load高,首先增长CPU
真相:Load只是表象,不是实质。增长CPU个别状况下会临时看到Load降低,但治标不治本。

【在Load average 高的状况下如何鉴别系统瓶颈】
是CPU不足,仍是io不够快形成或是内存不足?

vmstat查看系统负载

查看系统负载vmstat
$vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd     free   buff        cache    si   so    bi    bo   in     cs  us sy id wa
16  0      0 335916  56216 2657880    0    0     8     8  455  400 90  1  9  0

##procs
r 列表示运行和等待cpu时间片的进程数,若是长期大于1,说明cpu不足,须要增长cpu。
b 列表示在等待资源的进程数,好比正在等待I/O、或者内存交换等。
##cpu 表示cpu的使用状态
us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,可是若是长期大于50%,须要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,若是us+sy 大于 80%说明可能存在CPU不足。
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,若是wa超过30%,说明IO等待严重,这多是磁盘大量随机访问形成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈形成的(主要是块操做)。
id 列显示了cpu处在空闲状态的时间百分比
##system 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。
cs 列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
##memory
swpd 切换到内存交换区的内存数量(k表示)。若是swpd的值不为0,或者比较大,好比超过了100m,只要si、so的值长期为0,系统性能仍是正常
free 当前的空闲页面列表中内存数量(k表示)
buff 做为buffer cache的内存数量,通常对块设备的读写才须要缓冲。
cache: 做为page cache的内存数量,通常做为文件系统的cache,若是cache较大,说明用到cache的文件较多,若是此时IO中bi比较小,说明文件系统效率比较好。
##swap
si  由内存进入内存交换区数量。
so 由内存交换区进入内存数量。
##IO
bi 从块设备读入数据的总量(读磁盘)(每秒kb)。
bo 块设备写入数据的总量(写磁盘)(每秒kb)
这里咱们设置的bi+bo参考值为1000,若是超过1000,并且wa值较大应该考虑均衡磁盘负载,能够结合iostat输出来分析。

istat查看磁盘负载

查看磁盘负载iostat
每隔2秒统计一次磁盘IO信息,直到按Ctrl+C终止程序,-d 选项表示统计磁盘信息, -k 表示以每秒KB的形式显示,-t 要求打印出时间信息,2 表示每隔 2 秒输出一次。第一次输出的磁盘IO负载情况提供了关于自从系统启动以来的统计信息。随后的每一次输出则是每一个间隔之间的平均IO负载情况。

# iostat -x 1 10
Linux 2.6.18-92.el5xen 02/03/2009
avg-cpu: %user %nice %system %iowait %steal %idle
1.10 0.00 4.82 39.54 0.07 54.46
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 3.50 0.40 2.50 5.60 48.00 18.48 0.00 0.97 0.97 0.28
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sde 0.00 0.10 0.30 0.20 2.40 2.40 9.60 0.00 1.60 1.60 0.08
sdf 17.40 0.50 102.00 0.20 12095.20 5.60 118.40 0.70 6.81 2.09 21.36
sdg 232.40 1.90 379.70 0.50 76451.20 19.20 201.13 4.94 13.78 2.45 93.16
rrqm/s: 每秒进行 merge 的读操做数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操做数目。即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s: 每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,由于每扇区大小为512字节。(须要计算)
wkB/s: 每秒写K字节数。是 wsect/s 的一半。(须要计算)
avgrq-sz: 平均每次设备I/O操做的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (由于aveq的单位为毫秒)。
await: 平均每次设备I/O操做的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操做的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操做,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (由于use的单位为毫秒)

若是 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。
idle小于70% IO压力就较大了,通常读取速度有较多的wait.

同时能够结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)

另外还能够参考
通常:
svctm < await (由于同时等待的请求的等待时间被重复计算了),
svctm的大小通常和磁盘性能有关:CPU/内存的负荷也会对其有影响,请求过多也会间接致使 svctm 的增长。
await: await的大小通常取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。
若是 svctm 比较接近 await,说明I/O 几乎没有等待时间;
若是 await 远大于 svctm,说明 I/O队列太长,应用获得的响应时间变慢,
若是响应时间超过了用户能够允许的范围,这时能够考虑更换更快的磁盘,调整内核 elevator算法,优化应用,或者升级 CPU。
队列长度(avgqu-sz)也可做为衡量系统 I/O 负荷的指标,但因为 avgqu-sz 是按照单位时间的平均值,因此不能反映瞬间的 I/O 洪水。

别人一个不错的例子.(I/O 系统 vs. 超市排队)
举一个例子,咱们在超市排队 checkout 时,怎么决定该去哪一个交款台呢? 首当是看排的队人数,5我的总比20人要快吧?除了数人头,咱们也经常看看前面人购买的东西多少,若是前面有个采购了一星期食品的大妈,那么能够考虑换个队排了。还有就是收银员的速度了,若是碰上了连钱都点不清楚的新手,那就有的等了。另外,时机也很重要,可能 5分钟前还人满为患的收款台,如今已经是人去楼空,这时候交款但是很爽啊,固然,前提是那过去的 5 分钟里所作的事情比排队要有意义(不过我还没发现什么事情比排队还无聊的)。
I/O 系统也和超市排队有不少相似之处:
r/s+w/s 相似于交款人的总数
平均队列长度(avgqu-sz)相似于单位时间里平均排队人的个数
平均服务时间(svctm)相似于收银员的收款速度
平均等待时间(await)相似于平均每人的等待时间
平均I/O数据(avgrq-sz)相似于平均每人所买的东西多少
I/O 操做率 (%util)相似于收款台前有人排队的时间比例。
咱们能够根据这些数据分析出 I/O 请求的模式,以及 I/O 的速度和响应时间。
下面是别人写的这个参数输出的分析
# iostat -x 1
avg-cpu: %user %nice %sys %idle
16.24 0.00 4.31 79.44
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/cciss/c0d0
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p1
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p2
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
上面的 iostat 输出代表秒有 28.57 次设备 I/O 操做: 总IO(io)/s = r/s(读) +w/s(写) = 1.02+27.55 = 28.57 (次/秒) 其中写操做占了主体 (w:r = 27:1)。
平均每次设备 I/O 操做只须要 5ms 就能够完成,但每一个 I/O 请求却须要等上 78ms,为何? 由于发出的 I/O 请求太多 (每秒钟约 29 个),假设这些请求是同时发出的,那么平均等待时间能够这样计算:
平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + ... + 请求总数-1) / 请求总数
应用到上面的例子: 平均等待时间 = 5ms * (1+2+...+28)/29 = 70ms,和 iostat 给出的78ms 的平均等待时间很接近。这反过来代表 I/O 是同时发起的。
每秒发出的 I/O 请求不少 (约 29 个),平均队列却不长 (只有 2 个 左右),这代表这 29 个请求的到来并不均匀,大部分时间 I/O 是空闲的。
一秒中有 14.29% 的时间 I/O 队列中是有请求的,也就是说,85.71% 的时间里 I/O 系统无事可作,全部 29 个 I/O 请求都在142毫秒以内处理掉了。
delta(ruse+wuse)/delta(io) = await = 78.21 => delta(ruse+wuse)/s=78.21 * delta(io)/s = 78.21*28.57 =2232.8,代表每秒内的I/O请求总共须要等待2232.8ms。因此平均队列长度应为 2232.8ms/1000ms = 2.23,而iostat 给出的平均队列长度 (avgqu-sz) 却为 22.35,为何?! 由于 iostat 中有 bug,avgqu-sz值应为 2.23,而不是 22.35。

cat /proc/cpuinfo

CPU嘛,重点了解的就是几颗,几核,是否支持超线程?(何为物理CPU,逻辑CPU,超线程?)


processor:3 系统中逻辑处理核的编号。
对于单核处理器,则可认为是其CPU编号,对于多核处理器则能够是物理核、或者使用超线程技术虚拟的逻辑核
physical id:0 物理封装的惟一标识符
siblings :16 一个物理封装中逻辑处理器的数量
core id:3 一个物理封装中每一个内核的id
cpu cores:8 一个物理封装中的内核数量

1.拥有相同physical id的全部逻辑处理器共享同一个物理插座。每一个physical id表明一个惟一的物理封装,即一颗CPU.

2.Siblings表示位于一个物理封装的CPU上逻辑CPU的个数。

3.每一个core id 均表明一个惟一的处理器内核,全部带有相同core id 的逻辑CPU均位于同一处理器内核上。4.若是有一个以上逻辑CPU有用相同的core idphysical id ,则说明系统支持超线程(HT)技术。

5.若是有两个或两个以上的逻辑CPU拥有相同的physical id ,可是core id不一样,则说明这是一个多内核处理器,cpu cores字段也能够表示是否支持多内核

1.逻辑CPU个数:# cat /proc/cpuinfo | grep “processor” | wc –l

2.物理CPU个数:# cat /proc/cpuinfo | grep “physical id” | sort | uniq | wc –l

3.每一个物理cpucore的个数:# cat /proc/cpuinfo | grep “cpu cores” | wc –l

4.是否支持超线程?若是两个逻辑CPU具备相同的“core id”,那么说明超线程是打开的。

5.每一个物理CPU中逻辑CPU的个数: # cat /proc/cpuinfo | grep “siblings”

相关文章
相关标签/搜索