文档库 最新最全的文档下载
当前位置:文档库 › Linux中CPU与内存性能监测

Linux中CPU与内存性能监测

Linux中CPU与内存性能监测
Linux中CPU与内存性能监测

Linux中CPU与内存性能监测(出处:)

在系统维护的过程中,随时可能有需要查看CPU 使用率内存使用情况的需要,尤其是涉及到JVM,程序调优的情况,并根据相应信息分析系统状况的需要。

top命令

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。运行top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式-- 用基于top 的命令,可以控制显示方式等等。退出top 的命令为q (在top 运行中敲q 键一次)。

可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看Oracle用户的进程内存使用情况的话可以使用top -u oracle,以下为在CentOS中top命令的截图:

内容解释:

第一行(top):

15:59:14 系统当前时刻

167 days 系统启动后到现在的运作时间

1 user 当前登录到系统的用户,更确切的说是登录到用户的终端数-- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目

load average 当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程

第二行(Tasks):

75 total 当前系统进程总数

1 running 当前运行中的进程数

74 sleeping 当前处于等待状态中的进程数

0 stoped 被停止的系统进程数

0 zombie 僵尸进程数

第三行(Cpus):

0.0% us 用户空间占用CPU百分比

0.3% sy 内核空间占用CPU百分比

0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比

99.7% id 空闲CPU百分比

0.0% wa 等待输入输出的CPU时间百分比

0.0% hi

0.0% si

0.0% st

第四行(Mem):

1018600k total 物理内存总量

798356k used 使用的物理内存总量

220244k free 空闲内存总量

180628k buffers 用作内核缓存的内存量

Swap: 192772k total 交换区总量

0k used 使用的交换区总量

192772k free 空闲交换区总量

123988k cached 缓冲的交换区总量

第五行(Swap):

表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。

0k total 交换区总量

0k used 使用的交换区总量

0k free 空闲交换区总量

420732k cached 缓冲的交换区总量

最下部分的进程列表栏:

以PID 区分的进程列表将根据所设定的画面更新时间定期的更新。通过top 内部

命令可以控制此处的显示方式:

PID:进程的ID

USER:进程所有者

PR:进程的优先级别,越小越优先被执行

NInice:值

VIRT:进程占用的虚拟内存

RES:进程占用的物理内存

SHR:进程使用的共享内存

S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优

先值为负数

%CPU:进程占用CPU的使用率

%MEM:进程使用的物理内存和总内存的百分比

TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。COMMAND:进程启动命令名称

top 运行中可以通过top 的内部命令对进程的显示方式进行控制。内部命令如下表:s- 改变画面更新频率

l - 关闭或开启第一部分第一行top 信息的表示

t - 关闭或开启第一部分第二行Tasks 和第三行Cpus 信息的表示

m - 关闭或开启第一部分第四行Mem 和第五行Swap 信息的表示

N - 以PID 的大小的顺序排列表示进程列表(第三部分后述)

P - 以CPU 占用率大小的顺序排列进程列表(第三部分后述)

M - 以内存占用率大小的顺序排列进程列表(第三部分后述)

h - 显示帮助

n - 设置在进程列表所显示进程的数量

q - 退出top

s -改变画面更新周期

sar命令

sar命令也是Linux系统中重要的性能监测工具之一,它可以周期性地对内存和

CPU使用情况进行采样。

基本语法如下:

sar [options] [-A] [-o file] t [n]

在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有

的参数,n为采样次数,是可选的,默认值是1,-o file表示将命令结果以二进制格

存放在文件中,file 在此处不是关键字,是文件名。options 为命令行选项,sar命

的选项很多,下面只列出常用选项:

-A:所有报告的总和

-u:CPU利用率

-v:进程、I节点、文件和锁表状态

-d:硬盘使用报告

-r:没有使用的内存页面和硬盘块

-g:串口I/O的情况

-b:缓冲区使用情况

-a:文件读写情况

-c:系统调用情况

-R:进程的活动情况

-y:终端设备活动情况

-w:系统交换活动

例一:

获取I/O信息,每秒钟采样一次,共计采样3次:

例二:使用命行sar -v t n

例如,每30秒采样一次,连续采样5次,观察核心表的状态,需键入如下命令:# sar -v 30 5

屏幕显示:

[java]view plain copy

1. SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001

2.10:33:23 proc-sz ov inod-sz ov ov lock-sz (-v)

3.10:33:53305/32101337/276401561/1706040/128

4.10:34:23308/32101340/276401587/1706037/128

5.10:34:53305/32101332/276401565/1706036/128

6.10:35:23308/32101338/276401592/1706037/128

7.10:35:53308/32101335/276401591/1706037/128

显示内容包括:

proc-sz:目前核心中正在使用或分配的进程表的表项数,由核心参数MAX-PROC 控制。

inod-sz:目前核心中正在使用或分配的i节点表的表项数,由核心参数MAX- INODE控制。

:目前核心中正在使用或分配的文件表的表项数,由核心参数MAX-FILE控制。ov:溢出出现的次数。

Lock-sz:目前核心中正在使用或分配的记录加锁的表项数,由核心参数MAX-FLCKRE控制。

显示格式为

实际使用表项/可以使用的表项数显示内容表示,核心使用完全正常,三个表没有出现溢出现象,核心参数不需调整,如果出现溢出时,要调整相应的核心参数,将对应的表项数加大。

例三:使用命行sar -d t n

例如,每30秒采样一次,连续采样5次,报告设备使用情况,需键入如下命令:

1.SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001

2.11:06:43 device%busy avque r+w/s blks/s avwait avserv (-d)

3.11:07:13 wd-0 1.47 2.75

4.6714.73

5.503.14

4.11:07:43 wd-00.4318.77 3.078.662

5.111.41

5.11:08:13 wd-00.77 2.78 2.777.26 4.942.77

6.11:08:43 wd-0 1.1011.18 4.1011.262

7.322.68

7.11:09:13 wd-0 1.9721.78 5.8634.0669.663.35

8.Average wd-0 1.1512.11 4.0915.1931.122.80

9.

显示内容包括:

device:sar命令正在监视的块设备的名字。

%busy:设备忙时,传送请求所占时间的百分比。

avque:队列站满时,未完成请求数量的平均值。

r+w/s:每秒传送到设备或从设备传出的数据量。

blks/s:每秒传送的块数,每块512字节。

avwait:队列占满时传送请求等待队列空闲的平均时间。

avserv:完成传送请求所需平均时间(毫秒)。

在显示的内容中,wd-0是硬盘的名字,%busy的值比较小,说明用于处理传送请求的有效时间太少,文件系统效率不高,一般来讲,%busy值高些,avque值低些,文件系统的效率比较高,如果%busy和avque值相对比较高,说明硬盘传输速度

太慢,需调整。

例四:使用命行sar -b t n

例如,每30秒采样一次,连续采样5次,报告缓冲区的使用情况,需键入如下命令:

# sar -b 30 5

屏幕显示:

[java]view plain copy

1.SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001

2.14:54:59 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s (-b)

3.14:55:2901471005217800

4.14:55:5901861005257900

5.14:56:294232988588600

6.14:56:5901251005237600

7.14:57:290891004126600

8.Average1156995288000

显示内容包括:

bread/s:每秒从硬盘读入系统缓冲区buffer的物理块数。

lread/s:平均每秒从系统buffer读出的逻辑块数。

%rcache:在buffer cache中进行逻辑读的百分比。

bwrit/s:平均每秒从系统buffer向磁盘所写的物理块数。

lwrit/s:平均每秒写到系统buffer逻辑块数。

%wcache:在buffer cache中进行逻辑读的百分比。

pread/s:平均每秒请求物理读的次数。

pwrit/s:平均每秒请求物理写的次数。

在显示的内容中,最重要的是%cache 和%wcache两列,它们的值体现着buffer的使用效率,%rcache的值小于90或者%wcache的值低于65,应适当增加系统buffer的数量,buffer 数量由核心参数NBUF控制,使%rcache达到90左

右,%wcache达到80左右。但buffer参数值的多少影响I/O效率,增加buffer,

应在较大内存的情况下,否则系统效率反而得不到提高。

例五:使用命行sar -g t n

例如,每30秒采样一次,连续采样5次,报告串口I/O的操作情况,需键入如下

命令:

# sar -g 30 5

[java]view plain copy

1.屏幕显示:

2.SCO_SV scosysv

3.2v5.0.5 i8038611/22/2001

3.17:07:03ovsiohw/s ovsiodma/s ovclist/s (-g)

4.17:07:330.000.000.00

5.17:08:030.000.000.00

6.17:08:330.000.000.00

7.17:09:030.000.000.00

8.17:09:330.000.000.00

9.Average 0.000.000.00

显示内容包括:

ovsiohw/s:每秒在串口I/O硬件出现的溢出。

ovsiodma/s:每秒在串口I/O的直接输入输出通道高速缓存出现的溢出。

ovclist/s :每秒字符队列出现的溢出。

在显示的内容中,每一列的值都是零,表明在采样时间内,系统中没有发生串口

I/O溢出现象。

sar命令的用法很多,有时判断一个问题,需要几个sar 命令结合起来使用,比如,怀疑CPU存在瓶颈,可用sar -u 和sar -q来看,怀疑I/O存在瓶颈,可用sar -b、sar -u和sar-d来看。

vmstat命令

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状

态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个

命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU 使用率和内存使用率(使用场景不一样)。

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间

隔数,单位是秒,第二个参数是采样的次数,如:

3表示每个三秒采集一次服务器状态,2表示只采集两次。

实际上,在应用过程中,我们会在一段时间内一直监控,不想直接结束vmstat监控,那么就直接把后边的表示采集次数的去掉即可,如:

其中,各个参数的意义如下:

r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比

较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这

个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10

就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。free 空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M

cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多

M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的

缓存,是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地

被使用。)

si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者

内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处

理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多

140M每秒

bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都

要接近0,不然就是IO过于频繁,需要调整。

in 每秒CPU的中断次数,包括时间中断

cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程

的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行

几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值

一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下

文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多

表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接

近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id 空闲CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wt 等待IO CPU时间。

iostat命令

iostat命令主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启

动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

语法:

[java]view plain copy

1.iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -

z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]

如iostat -d -k 1

参数-d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使

用Kilobytes为单位;1表示,数据显示每隔1秒刷新一次。

详细内容,请参考博文:Linux IO实时监控iostat命令详解

pidstat命令

pidstat命令用来监控被Linux内核管理的独立任务(进程)。它输出每个受内核管理

的任务的相关信息。pidstat命令也可以用来监控特定进程的子进程。间隔参数用于

指定每次报告间的时间间隔。它的值为0(或者没有参数)说明进程的统计数据的时间

是从系统启动开始计算的。

pidstat 是sysstat软件套件的一部分,sysstat包含很多监控linux系统状态的工具,它能够从大多数linux发行版的软件源中获得。

在Debian/Ubuntu系统中可以使用下面的命令来安装:

# apt-get install sysstat

CentOS/Fedora/RHEL版本的linux中则使用下面的命令:

# yum install sysstat

默认参数

执行pidstat,将输出系统启动后所有活动进程的cpu统计信息:

[java]view plain copy

1.linux:~ # pidstat

2.Linux 2.6.32.12-0.7-default (linux) 06/18/12 _x86_64_

3.

4.11:37:19 PID %usr %system %guest %CPU CPU Command

5.……

6.11:37:19114520.000.000.000.002 bash

7.11:37:19115090.000.000.000.003 dd

指定采样周期和采样次数

pidstat命令指定采样周期和采样次数,命令形式为”pidstat [option] interval [count]”,以下pidstat输出以2秒为采样周期,输出10次cpu使用统计信息:

[java]view plain copy

1.pidstat 210

cpu使用情况统计(-u)

使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执行”pidstat”的效果一样。

内存使用情况统计(-r)

使用-r选项,pidstat将显示各活动进程的内存使用统计:

[java]view plain copy

1.linux:~ # pidstat -r -p 130841

2.Linux 2.6.32.12-0.7-default (linux) 06/18/12 _x86_64_

3.

4.15:08:18 PID minflt/s majflt/s VSZ RSS %MEM Command

5.15:08:1913084133835.000.009

6.26 mmmm

6.15:08:20130843580

7.000.0097.07 mmmm

7.15:08:211308419273.870.0096.72 mmmm

1.minflt/s: 每秒次缺页错误次数(minor page faults),次缺页错误次数意即虚拟内存地址映射成物理内存地址产

生的page fault次数

2.majflt/s: 每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的page在

swap中,这样的page fault为major page fault,一般在内存使用紧张时产生

3.VSZ: 该进程使用的虚拟内存(以kB为单位)

4.RSS: 该进程使用的物理内存(以kB为单位)

5.%MEM: 该进程使用内存的百分比

https://www.wendangku.net/doc/c09739634.html,mand: 拉起进程对应的命令

IO情况统计(-d)

使用-d选项,我们可以查看进程IO的统计信息:

[java]view plain copy

1.linux:~ # pidstat -d 12

2.Linux 2.6.32.12-0.7-default (linux) 06/18/12 _x86_64_

3.

4.17:11:36 PID kB_rd/s kB_wr/s kB_ccwr/s Command

5.17:11:3714579124988.240.000.00 dd

6.

7.17:11:37 PID kB_rd/s kB_wr/s kB_ccwr/s Command

8.17:11:3814579105441.580.000.00 dd

1.kB_rd/s: 每秒进程从磁盘读取的数据量(以kB为单位)

2.kB_wr/s: 每秒进程向磁盘写的数据量(以kB为单位)

https://www.wendangku.net/doc/c09739634.html,mand: 拉起进程对应的命令

针对特定进程统计(-p)

使用-p选项,我们可以查看特定进程的系统资源使用情况:

[java]view plain copy

1.linux:~ # pidstat -r -p 11

2.Linux 2.6.32.12-0.7-default (linux) 06/18/12 _x86_64_

3.

4.18:26:17 PID minflt/s majflt/s VSZ RSS %MEM Command

5.18:26:1810.000.00103806400.00 init

6.18:26:1910.000.00103806400.00 init

7.……

pidstat常用命令

使用pidstat进行问题定位时,以下命令常被用到:

[java]view plain copy

1.pidstat -u 1

2.

3.pidstat -r 1

4.

5.pidstat -d 1

以上命令以1秒为信息采集周期,分别获取cpu、内存和磁盘IO的统计信息。

pmap命令

可以根据进程查看进程相关信息占用的内存情况。

用法

pmap [ -x | -d ] [ -q ] pids...

pmap -V

选项含义

-x extended Show the extended format. 显示扩展格式

-d device Show the device format. 显示设备格式

-q quiet Do not display some header/footer lines. 不显示头尾行

-V show version Displays version of program. 显示版本

扩展格式和设备格式域:

Address: start address of map 映像起始地址

Kbytes: size of map in kilobytes 映像大小

RSS: resident set size in kilobytes 驻留集大小

Dirty: dirty pages (both shared and private) in kilobytes 脏页大小

Mode: permissions on map 映像权限: r=read, w=write, x=execute,

s=shared, p=private (copy on write)

Mapping: the map , or '[ anon ]' for allocated memory, or '[ stack ]' for the program stack. 映像支持文件,[anon]为已分配内存[stack]为程序堆栈Offset: offset into the file 文件偏移

Device: device name (major:minor) 设备名

如:

pmap -d 6292

最后一行的值

mapped 表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小,即ps出的vsz

writeable/private 表示进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小

shared 表示进程和其他进程共享的内存大小

ps命令

以下来源《鸟哥的linux私房菜》

ps:将某个时间点的程序运作情况撷取下来

[java]view plain copy

1.[root@linux ~]# ps aux

2.

3.[root@linux ~]# ps -lA

4.

5.[root@linux ~]# ps axjf

参数:

-A :所有的process 均显示出来,与-e 具有同样的效用;

-a :不与terminal 有关的所有process ;

-u :有效使用者(effective user) 相关的process ;

-x :通常与a 这个参数一起使用,可列出较完整信息。

输出格式规划:

-l :较长、较详细的将该PID 的的信息列出;

-j :工作的格式(jobs format)

-f :做一个更为完整的输出。

特别说明:

由于ps 能够支持的OS 类型相当的多,所以他的参数多的离谱!

而且有没有加上- 差很多!详细的用法应该要参考man ps 喔!

范例1:将目前属于您自己这次登入的PID 与相关信息列示出来

[root@linux ~]# ps -l

[java]view plain copy

1. F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

2.

3.0 S 0588156540760 - 1303 wait pts/000:00:00 su

4.

5.4 S 0588258810750 - 1349 wait pts/000:00:00 bash

6.

7.4 R 0603758820760 - 1111 - pts/000:00:00 ps

# 上面这个信息其实很多喔!各相关信息的意义为:

# F 代表这个程序的旗标(flag),4 代表使用者为super user;

# S 代表这个程序的状态(STAT),关于各STAT 的意义将在内文介绍;

# PID 没问题吧!?就是这个程序的ID 啊!底下的PPID 则上父程序的ID;

# C CPU 使用的资源百分比

# PRI 这个是Priority (优先执行序) 的缩写,详细后面介绍;

# NI 这个是Nice 值,在下一小节我们会持续介绍。

# ADDR 这个是kernel function,指出该程序在内存的那个部分。如果是个

running

# 的程序,一般就是『- 』的啦!

# SZ 使用掉的内存大小;

# WCHAN 目前这个程序是否正在运作当中,若为- 表示正在运作;

# TTY 登入者的终端机位置啰;

# TIME 使用掉的CPU 时间。

# CMD 所下达的指令为何!?

# 仔细看到每一个程序的PID 与PPID 的相关性为何喔!上头列出的三个程序中,# 彼此间可是有相关性的吶!

1.[root@linux ~]# ps aux

2.

https://www.wendangku.net/doc/c09739634.html,ER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

4.

5.root 10.00.11740540 ? S Jul25 0:01 init [3]

6.

7.root 20.00.000 ? SN Jul25 0:00 [ksoftirqd/0]

8.

9.root 30.00.000 ? S< Jul25 0:00 [events/0]

10.

11......中间省略.....

12.

13.root 58810.00.352121204 pts/0 S 10:220:00 su

14.

15.root 58820.00.353961524 pts/0 S 10:220:00 bash

16.

17.root 61420.00.24488916 pts/0 R+ 11:450:00 ps aux

? USER:该process 属于那个使用者账号的?

? PID :该process 的号码。

? %CPU:该process 使用掉的CPU 资源百分比;

? %MEM:该process 所占用的物理内存百分比;

? VSZ :该process 使用掉的虚拟内存量(Kbytes)

? RSS :该process 占用的固定的内存量(Kbytes)

? TTY :该process 是在那个终端机上面运作,若与终端机无关,则显示?,另外,tty1-tty6 是本机上面的登入者程序,若为pts/0 等等的,则表示为由网络连接进主

机的程序。

? STAT:该程序目前的状态,主要的状态有:

o R :该程序目前正在运作,或者是可被运作;

o S :该程序目前正在睡眠当中(可说是idle 状态啦!),但可被某些讯号(signal) 唤醒。

o T :该程序目前正在侦测或者是停止了;

o Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成zombie (疆尸) 程序的状态

? START:该process 被触发启动的时间;

? TIME :该process 实际使用CPU 运作的时间。

? COMMAND:该程序的实际指令为何?

范例3:以范例一的显示内容,显示出所有的程序

[java]view plain copy

1.[root@linux ~]# ps -lA

2.

3. F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

4.

5.4 S 0100760 - 435 - ? 00:00:01 init

6.

7.1 S 02109419 - 0 ksofti ? 00:00:00 ksoftirqd/0

8.

9.1 S 031070 -5 - 0 worker ? 00:00:00 events/0

10.

11......以下省略.....

范例4:列出类似程序树的程序显示

[java]view plain copy

1.[root@linux ~]# ps -axjf

2.

3.PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND

4.

5.0100 ? -1 S 00:01 init [3]

6.

7.1200 ? -1 SN 00:00 [ksoftirqd/0]

8.

9......中间省略.....

10.

11.1528152815281 ? -1 Ss 00:00 /usr/sbin/sshd

12.

13.5281565156515651 ? -1 Ss 00:00 \_ sshd: dmtsai [priv]

14.

15.5651565356515651 ? -1 S 5000:00 \_ sshd: dmtsai@pts/0

16.

17.5653565456545654 pts/06151 Ss 5000:00 \_ -bash

18.

19.5654588158815654 pts/06151 S 00:00 \_ su

20.

21.5881588258825654 pts/06151 S 00:00 \_ bash

22.

23.5882615161515654 pts/06151 R+ 00:00 \_ ps -axjf

范例5:找出与cron 与syslog 这两个服务有关的PID 号码[java]view plain copy

1.[root@linux ~]# ps aux | egrep '(cron|syslog)'

2.

3.root 15390.00.11616616 ? Ss Jul25 0:03 syslogd -m 0

4.

5.root 16760.00.245441128 ? Ss Jul25 0:00 crond

6.

7.root 61570.00.13764664 pts/0 R+ 12:100:00 egrep (cron|syslog)

在预设的情况下,ps 仅会列出与目前所在的bash shell 有关的PID 而已,所以,当我使用ps -l 的时候,只有三个PID (范例一)。

free命令

在Linux下查看内存我们一般用free命令:

[java]view plain copy

1.[root@scs-2 tmp]# free

2.total used free shared buffers cached

3.Mem: 161760110652

4.-/+ buffers/cache: 471116

5.Swap: 80160

下面是对这些数值的解释:

total:总计物理内存的大小

used:已使用多大

free:可用有多少

Shared:多个进程共享的内存总额

Buffers/cached:磁盘缓存的大小

第三行(-/+ buffers/cached):

used:已使用多大。

free:可用有多少。

第四行就不多解释了。

区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。

这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的

+buffers+cached.

第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于

可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存

的时候,buffer/cached会很快地被回收。

所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。

如上例:

2795064=16176+110652+2668236

接下来解释什么时候内存会被交换,以及按什么方交换。当可用内存少于额定值的

时候,就会开会进行交换。

如何看额定值:

[java]view plain copy

1.cat /proc/meminfo

2.

3.[root@scs-2 tmp]# cat /proc/meminfo

4.MemTotal: kB

5.MemFree: 17456 kB

6.Buffers: 111328 kB

7.Cached: kB

8.S: 0 kB

9.Active: 467236 kB

10.Inactive: kB

11.HighTotal: 0 kB

12.HighFree: 0 kB

13.LowTotal: kB

14.LowFree: 17456 kB

15.S: kB

16.S: kB

17.Dirty: 8 kB

18.Writeback: 0 kB

19.Mapped: 345360 kB

20.Slab: 112344 kB

https://www.wendangku.net/doc/c09739634.html,mitted_AS: 535292 kB

22.PageTables: 2340 kB

23.VmallocTotal: 536870911 kB

24.VmallocUsed: 272696 kB

25.VmallocChunk: 536598175 kB

26.HugePages_Total: 0

27.HugePages_Free: 0

28.Hugepagesize: 2048 kB

用free -m查看的结果:

[java]view plain copy

1.[root@scs-2 tmp]# free -m

2. total used free shared buffers cached

3.Mem: 318931731601072605

4.-/+ buffers/cache: 4602729

5.Swap: 2000781921

查看/proc/kcore文件的大小(内存镜像):

[java]view plain copy

1.[root@scs-2 tmp]# ll -h /proc/kcore

2.-r-------- 1 root root 4.1G Jun 1212:04 /proc/kcore

备注:

占用内存的测量

测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。

/proc/meminfo 机器的内存使用信息

/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。

/proc/pid/statm 进程所占用的内存

[root@localhost ~]# cat /proc/self/statm

654 57 44 0 0 334 0

输出解释

CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:

参数解释/proc//status

Size (pages) 任务虚拟地址空间的大小VmSize/4

Resident(pages) 应用程序正在使用的物理内存的大小VmRSS/4

Shared(pages) 共享页数0

Trs(pages) 程序所拥有的可执行虚拟内存的大小VmExe/4

Lrs(pages) 被映像到任务的虚拟内存空间的库的大小VmLib/4

Drs(pages) 程序数据段和用户态的栈的大小(VmData+ VmStk )4

dt(pages) 04

查看机器可用内存

[java]view plain copy

1./proc/28248/>free

2.

3.total used free shared buffers cached

4.

5.Mem: 926400973880134668503688

6.

7.-/+ buffers/cache: 288044735744

8.

9.Swap: 89608

我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。所以空闲内存=free+buffers+cached=total-used

ctop命令

以下是摘自码农网。

ctop是一个新的基于命令行的工具,它可用于在容器层级监控进程。容器通过利用控制器组(cgroup)的资源管理功能,提供了操作系统层级的虚拟化环境。该工具从cgroup收集与内存、CPU、块输入输出的相关数据,以及拥有者、开机时间等元数据,并以人性化的格式呈现给用户,这样就可以快速对系统健康状况进行评估。

基于所获得的数据,它可以尝试推测下层的容器技术。ctop也有助于在低内存环境中检测出谁在消耗大量的内存。

功能

ctop的一些功能如下:

?收集CPU、内存和块输入输出的度量值

?收集与拥有者、容器技术和任务统计相关的信息

?通过任意栏对信息排序

?以树状视图显示信息

?折叠/展开cgroup树

?选择并跟踪cgroup/容器

?选择显示数据刷新的时间窗口

?暂停刷新数据

?检测基于systemd、Docker和LXC的容器

?基于Docker和LXC的容器的高级特性

o打开/连接shell以进行深度诊断

o停止/杀死容器类型

安装

ctop是由Python写成的,因此,除了需要Python 2.6或其更高版本外(带有内建的光标支持),别无其它外部依赖。推荐使用Python的pip进行安装,如果还没有安装pip,请先安装,然后使用pip安装ctop。

注意:本文样例来自Ubuntu(14.10)系统

$ sudo apt-get install python-pip

使用pip安装ctop:

poornima@poornima-Lenovo:~$ sudo pip install ctop

[sudo] password for poornima:

Downloading/unpacking ctop

Downloading ctop-0.4.0.tar.gz

Running setup.py (path:/tmp/pip_build_root/ctop/setup.py) egg_info for package ctop

Installing collected packages: ctop

Running setup.py install for ctop

changing mode of build/scripts-2.7/ctop from 644 to 755 changing mode of /usr/local/bin/ctop to 755

LINUX中限制CPU和内存占用率方法

查看cpu占用 在命令行中输入 top 即可启动 top top 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。 使用top查看系统负荷 top命令可以动态监视系统负荷,包括CPU、内存的使用率和占用资源较多的进程详情等。 动态查看系统负荷(占用一个终端) top 显示后退出 top -n 1 以文本方式输出,以备其它程序使用 top -b 好了,我们现在来看限制CPU和内存占用率方法 脚本内容: 代码如下 #!/bin/sh UPID=`top -bn 1 | grep ^ *[1-9] | awk '{ if($9 ; 20 || $10 ; 25 && id -u $2 ; 500) print $1}'` for PID in $UPID do renice +10 $PID echo renice +10 $PID done

我对上面的脚本进行了修改,可以让其针对整个服务器的进程进行限制. 修改后的脚本: 代码如下 #!/bin/sh UPID=`top -bn 1 | grep ^ *[1-9] | awk '{ if($9 ; 50 || $10 ; 25 ) print $1}'` for PID in $UPID do renice +10 $PID echo renice +10 $PID done 可以将这个脚本放到cron中运行,让其每分钟检查一次: 代码如下 chmod +x limit.sh vi /etc/crontab */1 * * * * /bin/sh /root/soft_shell/limit.sh

Linux下使用cpulimit限制进程的cpu使用率

Linux下使用cpulimit限制进程的cpu使用率 很用Linux时可能大家经常发现莫名其妙就变的非常慢,这时多半是后台进程使用的cpu和内存太多了。如何限制每个进程的cpu使用资源呢? 可以使用cpulimit限制每个进程的cpu使用率,使用率用百分百来表示。 安装cpulimit 使用源码安装 # cd /tmp # wget '网址http://' 网址:https://www.wendangku.net/doc/c09739634.html,/cpulimit/cpulimit-1.1.tar.gz # tar cpulimit-1.1.tar.gz # cd cpulimit-1.1 # make # cp cpulimit /usr/local/sbin/ # rm -rf cpulimit* Debian / Ubuntu 用户 使用apt-get更方便的安装 $ sudo apt - get update $ sudo apt - get install cpulimit 如何使用cpulimit? 限制firefox使用30% cpu利用率 # cpulimit -e firefox -l 30 限制进程号1313的程序使用30% cpu利用率 # cpulimit -p 1313 -l 30 根据进程名找出pid的方法 # ps aux | less # ps aux | grep firefox # pgrep -u vivek php-cgi # pgrep lighttpd 可以使用绝对路径限制进程的cpu利用率 # cpulimit -P /opt/firefox/firebox -l 30 单核cpu和多核cpu 单核cpu的使用率范围为0%-100%,四核cpu的使用率范围为0%-400%.

linux c程序获取cpu使用率及内存使用情况

想获取一下目标机运行时linux系统的硬件占用情况,写了这几个小程序,以后直接用了。方法就是读取proc下的文件来获取了。cpu使用率:/proc/stat ,内存使用情 况:/proc/meminfo 看程序: /*************************************************************** * @file: statusinfo.c * * @brief: 从linux系统获取cpu及内存使用情况 * * @version 1.0 * * @author 抹黑 * * @date 2009年3月17日 * ***************************************************************/ typedef struct PACKED //定义一个cpu occupy的结构体 { char name[20]; //定义一个char类型的数组名name有20个元素 unsigned int user; //定义一个无符号的int类型的user unsigned int nice; //定义一个无符号的int类型的nice unsigned int system;//定义一个无符号的int类型的system unsigned int idle; //定义一个无符号的int类型的idle }CPU_OCCUPY; typedef struct PACKED //定义一个mem occupy的结构体 { char name[20]; //定义一个char类型的数组名name有20个元素 unsigned long total; char name2[20]; unsigned long free; }MEM_OCCUPY; get_memoccupy (MEM_OCCUPY *mem) //对无类型get函数含有一个形参结构体类弄的指针O

Linux查看CPU和内存使用情况

Linux 查看CPU 和内存使用情况 在系统维护的过程中,随时可能有需要查看CPU 使用率,并根据相应信息分析系统状况的需要。在CentOS 中 可以通过top 命令来查看CPU 使用状况。运行top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式-- 用基于top 的命令,可以控制显示方式等等。退出 top 的命令为q (在top 运行中敲q 键一次)。 top 命令是Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows 的任务管理器 可以直接使用top 命令后,查看%MEM 的内容。可以选 择按进程查看或者按用户查看,如想查看oracle 用户的进程内存使用情况的话可以使用如下的命令: $ top -u oracle 内容解释: PID :进程的ID USER :进程所有者 PR:进程的优先级别,越小越优先被执行 NInice :值 VIRT :进程占用的虚拟内存 RES:进程占用的物理内存

SHR :进程使用的共享内存 僵死状态, N 表示该进程优先值为负数 %CPU :进程占用CPU 的使用率 %MEM :进程使用的物理内存和总内存的百分比 TIME+ :该进程启动后占用的总的 CPU 时间,即占用 CPU 使用时间的累加值。 COMMAND :进程启动命令名称 操作实例 : 即可启动 top top 的全屏对话模式可分为 3 部分:系统信息栏、命令 输入栏、进程列表栏。 第一部分 -- 最上部的 系统信息栏 第一行( top ): 00:11:04”为系统当前时刻; 3:35”为系统启动后到现在的运作时间; “2 users ”为当前登录到系统的用户,更确切的说 是登录到用户的终端数 -- 同一个用户同一时间对系统多个 终端的连接将被视为多个用户连接到系统,这里的用户数也 将表现为终端的数目; S :进程的状态。 S 表示休眠, R 表示正在运行, Z 表示 在命令行中输入 “- ” top ”

Linux查看CPU和内存使用情况

Linux查看CPU和内存使用情况 在系统维护的过程中,随时可能有需要查看CPU 使用率,并根据相应信息分析系统状况的需要。在Ce ntOS 中,可以通过top 命令来查看CPU 使用状况。运行top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式-- 用基于top 的命令,可以控制显示方式等等。退出top 的命令为q (在top 运行中敲q 键一次)。 操作实例: 在命令行中输入“top” 即可启动top top 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。 第一部分-- 最上部的系统信息栏: 第一行(top): “00:11:04”为系统当前时刻; “3:35”为系统启动后到现在的运作时间; “2 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数-- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目; “load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程; 第二行(Tasks): “59 total”为当前系统进程总数; “1 running”为当前运行中的进程数; “58 sleeping”为当前处于等待状态中的进程数; “0 stoped”为被停止的系统进程数; “0 zombie”为被复原的进程数; 第三行(Cpus): 分别表示了CPU 当前的使用率; 第四行(Mem): 分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量; 第五行(Swap): 表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(S wap)被频繁使用的情况,将被视作物理内存不足而造成的。 第二部分-- 中间部分的内部命令提示栏: top 运行中可以通过top 的内部命令对进程的显示方式进行控制。内部命令如下表: s - 改变画面更新频率 l - 关闭或开启第一部分第一行top 信息的表示

在Linux系统中使用w命令和uptime命令查看系统负载

在Linux系统中使用w命令和uptime命令查看系统负载 在Linux系统中查询系统CPU和内存的负载(使用率)时,我们通常习惯于使用top或者atop命令,这篇文章将要给大家介绍如何使用w命令和uptime命令来查看系统的负载情况,对于uptime命令,相信大家比较熟悉了,它主要是用来查询系统最近一次启动后运行了多长时间,而w命令则相对就冷门一些了,下面就详细介绍如何使用这两个命令: 1. w命令 [root@tektea ~]# w 14:44:27 up 62 days, 3 min, 2 users, load average: 0.00, 0.01, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 218.18.74.196 13:38 1:01m 0.00s 0.00s -bash root pts/1 218.18.74.196 14:43 0.00s 0.00s 0.00s w 使用man w查询的Linux对该命令的介绍是“Show who is logged on and what they are doing.”,w命令可查询登录当前系统的用户信息,以及这些用户目前正在做什么操作,这些信息对于Linux系统管理员来说都是价值的,另外其中的load average后面的三个数字则显示了系统最近1分钟、5分钟、15分钟的系统平均负载情况。 2. uptime命令 [root@tektea ~]# uptime 14:51:15 up 62 days, 10 min, 2 users, load average: 0.02, 0.01, 0.00 uptime命令回显中的load average所表示的意思和w命令相似,都是表示过去的1分钟、5分钟和15分钟内进程队列中的平均进程数量。 这里需要注意的是load average这个输出值,这三个值的大小一般不能大于系统逻辑CPU的个数,例如,本输出中系统有4个逻辑CPU,如果load average的三个值长期大于4时,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于4时,倒不用担心,一般不会影响系统性能。相反,如果load average的输出值小于CPU的个数,则表示CPU还有空闲,比如本例中的输出,CPU是比较空闲的。

linux下如何获取cpu的利用率

linux下如何获取cpu的利用率 “proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc 得到系统的信息,并可以改变内核的某些参数。” 这里将介绍如何从/proc文件系统中获取与防火墙相关的一些性能参数,以及如何通过/proc 文件系统修改内核的相关配置。 1、从/proc文件系统获取相关的性能参数 cpu使用率:/proc/stat 内存使用情况:/proc/meminfo 网络负载信息:/proc/net/dev 相应的计算方法:(摘自:什么是proc文件系统,见参考资料) (1)处理器使用率 (2)内存使用率 (3)流入流出数据包 (4)整体网络负载 这些数据分别要从/proc/stat、/proc/net/dev、/proc/meminfo三个文件中提取。如里有问题或对要提取的数据不太清楚,可以使用man proc来查看proc文件系统的联机手册。 (1)处理器使用率 这里要从/proc/stat中提取四个数据:用户模式(user)、低优先级的用户模式(nice)、内核模式(system)以及空闲的处理器时间(idle)。它们均位于/proc/stat文件的第一行。CPU 的利用率使用如下公式来计算。 CPU利用率= 100 *(user + nice + system)/(user + nice + system + idle) (2)内存使用率 这里需要从/proc/meminfo文件中提取两个数据,当前内存的使用量(cmem)以及内存总量(amem)。

Java获取Linux和Window系统CPU、内存和磁盘总使用率的情况

本文由我司收集整编,推荐下载,如有疑问,请与我司联系Java 获取Linux 和Window 系统CPU、内存和磁盘总使用率的情况 2017/05/08 0 这是一个工具类,获取的内容: CPU 使用率:得到的是当前CPU 的使用情况,这是算出的是两次500 毫秒时间 差的CPU 使用率 内存使用率:[1 - 剩余的物理内存/(总的物理内存+虚拟内存) ] * 100 磁盘总使用率:[1 - 磁盘空余大小/磁盘总大小] * 100 下面开始贴代码:使用暂时没有发现什么问题,如果有问题,咱们可以一起讨论package com.util; import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import java.io.LineNumberReader;import https://www.wendangku.net/doc/c09739634.html,ng.management.ManagementFactory;import java.math.BigDecimal;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.StringTokenizer; import org.apache.log4j.Logger; import com.sun.management.OperatingSystemMXBean; public class ComputerMonitorUtil { private static String osName = System.getProperty(“https://www.wendangku.net/doc/c09739634.html,”);private static final int CPUTIME = 500;private static final int PERCENT = 100;private static final int FAULTLENGTH = 10;private static final Logger logger = Logger.getLogger(ComputerMonitorUtil.class); /** * 功能:获取Linux 和Window 系统cpu 使用率* */public static double getCpuUsage() {// 如果是window 系统if (osName.toLowerCase().contains(“windows”)||osName.toLowerCase().contains(“win”)) {try {String procCmd = System.getenv(“windir”)+“//system32//wbem//wmic.exe process get Caption,CommandLine,KernelModeTime,ReadOperationCount,ThreadCount,UserModeTi

LINUX下查看CPU使用率的命令

LINUX下查看CPU使用率的命令 1.top 使用权限:所有使用者 使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] 说明:即时显示process的动态 d :改变显示的更新速度,或是在交谈式指令列( interactiv e command)按s q :没有任何延迟的显示速度,如果使用者是有superuser的权限,则top将会以最高的优先序执行 c :切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S :累积模式,会将己完成或消失的子行程( dea d child process )的CPU time累积起来 s :安全模式,将交谈式指令取消,避免潜在的危机 i :不显示任何闲置(idle)或无用(zombie)的行程 n :更新的次数,完成后将会退出top b :批次档模式,搭配"n"参数一起使用,可以用来将top的结果输出到档案内 范例: 显示更新十次后退出; top -n 10 使用者将不能利用交谈式指令来对行程下命令: top -s

将更新显示二次的结果输入到名称为top.log的档案里: top -n 2 -b < top.log 另附一个命令简介linux traceroutewindows tracert两个命令相当,跟踪网络路由 2.vmstat 正如我们之前讨论的任何系统的性能比较都是基于基线的,并且监控CPU的性能就是以上3点,运行队列、CPU使用率和上下文切换。以下是一些对于CPU很普遍的性能要求: 1.对于每一个CPU来说运行队列不要超过3,例如,如果是双核CPU就不要超过6; 2.如果CPU在满负荷运行,应该符合下列分布, a) User Time:65%~70% b) System Time:30%~35% c) Idle:0%~5% 3. mpstat 对于上下文切换要结合CPU使用率来看,如果CPU使用满足上述分布,大量的上下文切换也是可以接受的。 常用的监视工具有:vmstat, top,dstat和mpstat. # vmstat 1 procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 104300 16800 95328 72200 0 0 5 26 7 14 4 1 95 0 0 0 104300 16800 95328 72200 0 0 0 24 1021 64 1 1 98 0 0 0 104300 16800 95328 72200 0 0 0 0 1009 59 1 1 98 0 r表示运行队列的大小,

linux下如何获取cpu的利用率

linux下如何获取cpu的利用率 "proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。" 这里将介绍如何从/proc文件系统中获取与防火墙相关的一些性能参数,以及如何通过/proc文件系统修改内核的相关配置。 1、从/proc文件系统获取相关的性能参数 cpu使用率:/proc/stat 内存使用情况:/proc/meminfo 网络负载信息:/proc/net/dev 相应的计算方法:(摘自:什么是proc文件系统,见参考资料) (1)处理器使用率 (2)内存使用率 (3)流入流出数据包 (4)整体网络负载 这些数据分别要从/proc/stat、/proc/net/dev、/proc/meminfo三个文件中提取。如里有问题或对要提取的数据不太清楚,可以使用man proc来查看proc文件系统的联机手册。 (1)处理器使用率 这里要从/proc/stat中提取四个数据:用户模式(user)、低优先级的用户模式(nice)、内核模式(system)以及空闲的处理器时间(idle)。它们均位于/proc/stat文件的第一行。CPU的利用率使用如下公式来计算。 CPU利用率= 100 *(user + nice + system)/ (user + nice + system + idle) (2)内存使用率 这里需要从/proc/meminfo文件中提取两个数据,当前内存的使用量(cmem)以及内存总量(amem)。 内存使用百分比= 100 * (cmem / umem) (3)网络利用率 为了得到网络利用率的相关数据,需要从/proc/net/dev文件中获得两个数据:从本机输出的数据包数,流入本机的数据包数。它们都位于这个文件的第四行。 性能收集程序开始记录下这两个数据的初始值,以后每次获得这个值后均减去这个初始值即为从集群启动开始从本节点通过的数据包。 利用上述数据计算出网络的平均负载,方法如下: 平均网络负载= (输出的数据包+流入的数据包) / 2 2. 通过/proc文件系统调整相关的内核配置 允许ip转发/proc/sys/net/ipv4/ip_forward 禁止ping /proc/sys/net/ipv4/icmp_echo_ignore_all 可以在命令行下直接往上述两个“文件”里头写入"1"来实现相关配置,如果写入"0"将取

linux查看cpu使用率

用top指令可以查,例如top 10. 或者用ps –l 或ps -aux 以下内容来自《鸟哥linux私房菜》: top:动态观察程序的变化 相对於ps是撷取一个时间点的程序状态,top 则可以持续侦测程序运行的状态!使用方式如下:

其实top 的功能非常多!可以用的按键也非常的多!可以参考man top 的内部说明文件!鸟哥这里仅是列出一些鸟哥自己常用的选项而已。接下来让我们实际观察一下如何使用top 与top 的画面吧! top 也是个挺不错的程序观察工具!但不同於ps是静态的结果输出,top 这个程序可以持续的监测整个系统的程序工作状态。在默认的情况下,每次升级程序资源的时间为5 秒,不过,可以使用-d 来进行修改。top 主要分为两个画面,上面的画面为整个系统的资源使用状态,基本上总共有六行,显示的内容依序是: 第一行(top...):这一行显示的资讯分别为: o目前的时间,亦即是17:03:09 那个项目; o启动到目前为止所经过的时间,亦即是up 7days, 16:16 那个项目; o已经登陆系统的使用者人数,亦即是1 user项目; o系统在1, 5, 15 分钟的平均工作负载。我们在第十六章谈到的batch工作方式为负载小於0.8 就是这个负载罗!代表的是1, 5, 15 分钟,系统 平均要负责运行几个程序(工作)的意思。越小代表系统越闲置,若高於 1 得要注意你的系统程序是否太过繁复了!

?第二行(Tasks...):显示的是目前程序的总量与个别程序在什么状态(running, sleeping, stopped, zombie)。比较需要注意的是最后的zombie 那个数值,如果不 是0 !好好看看到底是那个process 变成僵尸了吧? ?第三行(Cpus...):显示的是CPU 的整体负载,每个项目可使用? 查阅。需要特别注意的是%wa,那个项目代表的是I/O wait,通常你的系统会变慢都是I/O 产生的问题比较大!因此这里得要注意这个项目耗用CPU 的资源喔!另外,如 果是多核心的设备,可以按下数字键『1』来切换成不同CPU 的负载率。 ?第四行与第五行:表示目前的实体内存与虚拟内存(Mem/Swap) 的使用情况。 再次重申,要注意的是swap 的使用量要尽量的少!如果swap 被用的很大量, 表示系统的实体内存实在不足! ?第六行:这个是当在top 程序当中输入命令时,显示状态的地方。 至於top 下半部分的画面,则是每个process 使用的资源情况。比较需要注意的是:?PID :每个process 的ID 啦! ?USER:该process 所属的使用者; ?PR :Priority 的简写,程序的优先运行顺序,越小越早被运行; ?NI :Nice 的简写,与Priority 有关,也是越小越早被运行; ?%CPU:CPU 的使用率; ?%MEM:内存的使用率; ?TIME+:CPU 使用时间的累加; top 默认使用CPU 使用率(%CPU) 作为排序的重点,如果你想要使用内存使用率排序,则可以按下『M』,若要回复则按下『P』即可。如果想要离开top 则按下『q 』吧!如果你想要将top 的结果输出成为文件时,可以这样做:

Linux 下 CPU 使用率与机器负载的关系与区别

Linux 下CPU 使用率与机器负载的关系与区别 转载2016年09月17日10:27:09 1405 当我们使用top命令查看系统的资源使用情况时会看到load average,如下图所示。它表示系统在1、5、15分钟的平均工作负载。那么什么是负载(load)呢?它和CPU的利用率又有什么关系呢? load average:系统平均负载是CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU 正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。这个数字越小越好。 1. CPU负载和CPU利用率的区别 CPU利用率:显示的是程序在运行期间实时占用的CPU百分比 CPU负载:显示的是一段时间内正在使用和等待使用CPU的平均任务数。CPU利用率高,并不意味着负载就一定大。举例来说:如果我有一个程序它需要一直使用CPU的运算功能,那么此时CPU的使用率可能达到100%,但是CPU的工作负载则是趋近于“1”,因为CPU仅负责一个工作嘛!如果同时执行这样的程序两个呢?CPU的使用率还是100%,但是工作负载则变成2了。所以也就是说,当CPU的工作负载越大,代表CPU必须要在不同的工作之间进行频繁的工作切换。 举例说明 网上有篇文章举了一个有趣比喻,拿打电话来说明两者的区别,我按自己的理解阐述一下。 某公用电话亭,有一个人在打电话,四个人在等待,每人限定使用电话一分钟,若有人一分钟之内没有打完电话,只能挂掉电话去排队,等待下一轮。电话在这里就相当于CPU,而正在或等待打电话的人就相当于任务数。 在电话亭使用过程中,肯定会有人打完电话走掉,有人没有打完电话而选择重新排队,更会有新增的人在这儿排队,这个人数的变化就相当于任务数的增减。为了统计平均负载情况,我们5分钟统计一次人数,并在第1、5、15分钟的时候对统计情况取平均值,从而形成第1、5、15分钟的平均负载。 有的人拿起电话就打,一直打完1分钟,而有的人可能前三十秒在找电话号码,或者在犹豫要不要打,后三十秒才真正在打电话。如果把电话看作CPU,人数看作任务,我们就说前一个人(任务)的CPU利用率高,后一个人(任务)的CPU利用率低。 当然,CPU并不会在前三十秒工作,后三十秒歇着,只是说,有的程序涉及到大量的计算,所以CPU利用率就高,而有的程序牵涉到计算的部分很少,CPU利用率自然就低。但无论CPU的利用率是高是低,跟后面有多少任务在排队没有必然关系。 2. 负载为多少才算比较理想? 这个有争议,各有各的说法,个人比较赞同CPU负载小于等于0.5算是一种理想状态。 不管某个CPU的性能有多好,1秒钟能处理多少任务,我们可以认为它无关紧要,虽然事实并非如此。在评估CPU负载时,我们只以5分钟为单位为统计任务队列长度。如果每隔5分钟统计的时候,发现任务队列长度都是1,那么CPU负载就为1。假如我们只有一个单核的CPU,负载一直为1,意味着没有任务在排队,还不错。 但是我那台服务器,是双核CPU,等于是有4个内核,每个内核的负载为1的话,总负载为4。这就是说,如果我那台服务器的CPU负载长期保持在4左右,还可以接受。 但是每个内核的负载为1,并不能算是一种理想状态!这意味着我们的CPU一直很忙,不得清闲。网上有说理想的状态是每个内核的负载为0.7左右,我比较赞同,0.7乘以内核数,得出服务器理想的CPU负载,比如我这台服务器,负载在3.0以下就可以。 3. 如何来降低服务器的CPU负载?

Linux CPU监控指标

Linux提供了非常丰富的命令可以进行CPU相关数据进行监控,例如:top、vmstat等命令。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止,比较准确的说,top命令提供了实时的对系统处理器的状态监视,它将显示系统中CPU 最“敏感”的任务列表。该命令可以按 CPU 使用,内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。 top命令提供如下参数: 示例 一 在控制台输入“top”,回车如下: top命令输出信息包含两部分内容: 第一部分为统计信息,包含五行数据信息;第二部分为详细信息,显示了各个进程的详细信息。 有必要了解下统计信息部分的输出信息内容的含义:

示例 二 vmstat 命令,可以使您能够在同一行看到系统的内存、CPU 等使用情况,通常您可以用该命令来查看CPU 的利用率和饱和度。 先连接两个概念: CPU利用率:CPU利用率可以使用 vmstat通过从 100减去 id 或者 us与 sy 之和来计算CPU 利用率

CPU饱和度:CPU 饱和度可以通过 vmstat 命令的“procs:r”来作为衡量标准,由于它是所有 cpu 运行队列的合计值,因此将 procs:r 除以 CPU 数目所得到的值可与其他服务器相比较。 任何持续不变的非零值都会引起性能的下降,但性能的下降是逐渐的。 vmstat命令参数如下: vmstat [-n] [delay [count]] 每隔 1 秒钟显示一次 vmstat监控信息 然后了解下输出信息内容各部分代表的含义: 示例 三 还可以通过“uptime”命令来获得 CPU 平均负载的情况。平均负载的计算通常描述为可运行和运行线程的平均数目。举例来说,如果一枚单CPU 服务器上有1 个运行线程占用了 CPU,有3 个运行进程在调度程序队列中,那么平均负载即为 1+3=4。对于一枚 16CPU 的服务器,负载是16 个运行线程,有 24 个运行进程在调度程序队列中,那么平均负载是 40。如果平均负载始终高于CPU 的数目,则可能导致应用程序性能的下降。需要说明的是平均负载只适用于CPU 负载的初始估算,深入的分析我们还需要借助于其他工具来做。再对 CPU平均负载有一个初步了解以后,让我们来看看该命令是如何使用的,它的输出内容又包含那些内容。 因为“uptime”命令仅提供了一个可选参数项“V”,即:显示该命令的版本信息,所以不用叙述了。 在控制台输入“uptime”,回车执行后,运行结果:

linux系统-top 命令查看系统资源(CPU内存等)使用率

在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要。在Linux 中,可以通过top命令来查看 CPU 使用状况。运行top命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于top的命令,可以控制显示方式等等。退出top的命令为 q (在top运行中敲 q 键一次)。 运行top 在命令行中输入“top” 即可启动top,运行后如上图所示: 如上图所示,top的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。 第一部分 -- 最上部的系统信息栏: 第一行(top): “00:11:04”为系统当前时刻; “3:35”为系统启动后到现在的运作时间; “2 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目; “load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;

第二行(Tasks): “59 total”为当前系统进程总数; “1 running”为当前运行中的进程数; “58 sleeping”为当前处于等待状态中的进程数; “0 s top ed”为被停止的系统进程数; “0 zombie”为被复原的进程数; 第三行(Cpus): 分别表示了 CPU 当前的使用率; 第四行(Mem): 分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量; 第五行(Swap): 表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。 第二部分 -- 中间部分的内部命令提示栏: top运行中可以通过top的内部命令对进程的显示方式进行控制。内部命令如下表: s - 改变画面更新频率 l - 关闭或开启第一部分第一行top信息的表示 t - 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示 m - 关闭或开启第一部分第四行 Mem 和第五行 Swap 信息的表示 N - 以 PID 的大小的顺序排列表示进程列表(第三部分后述) P - 以 CPU 占用率大小的顺序排列进程列表(第三部分后述) M - 以内存占用率大小的顺序排列进程列表(第三部分后述) h - 显示帮助 n - 设置在进程列表所显示进程的数量 q - 退出top s - 改变画面更新周期 第三部分 -- 最下部分的进程列表栏: 以 PID 区分的进程列表将根据所设定的画面更新时间定期的更新。通过top内部命令可以控制此处的显示方式。

LINUX下查看CPU负载的所有命令

LINUX下查看CPU负载的所有命令 LINUX下查看CPU负载的所有命令 $ vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo i n cs us sy id wa st 1 4 329796 26040 4528 3379824 1 1 50 160 36 17 2 10 85 3 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表示)

linux性能监控之---cpu篇

?上下文切换(Context Switches):如果可运行的线程数大于CPU的数量,那么OS最终会强行换出正在执行的线程,从而使其他线程能够使用CPU,它会保存当前运行线程的执行上下文,并重建新调入线程的执行上下文。 ?运行队列(Run Queue ):每个CPU 都维护一个线程的运行队列。如果CPU 子系统处于高负荷下,那就意味着内核调度将无法及时响应系统请求.导致结果,可运行状态进程拥塞在运行队列里.当运行队列越来越巨大,进程线程将花费更多的时间获取被执行.每个处理器应该运行队列不超过1-3个线程.例子,一个双核处理器应该运行队列不要超过6 个线程。 ?load:就是指在CPU 队列中有多少数目的线程,以及其中当前有多少进程线程数目被执行的组合. 安全的load:一般是cpu的个数 ?CPU 利用率(CPU Utilization):CPU 使用的百分比User TimeSystem TimeWait IOIdle。如果一个CPU 被充分使用,利用率分类之间均衡的比例应该是:65% -70% User Time;30% -35% System Time;0% -5% Idle Time ?中断(Interrupts) --Devices tell the kernel that they are done processing。例子,当一块网卡设备递送网络数据包或者一块硬件提供了一次IO 请求. 查看 CPU信息: cat/proc/cpuinfo 获取CPU个数:grep 'processor' /proc/cpuinfo | wc -l ( l 是 L) ?uptime 显示系统已经运行了多长时间,它依次显示下列信息:现在时间、系统已经运行了多长时间、目前有

Linux性能监控之CPU篇

Linux性能监控之CPU篇 在这篇文章中,主要介绍CPU的一些基础知识. 首先介绍一下Linux kernel中的调度器(scheduler),调度器负责调度系统中的两种资源,一是线程,二是中断。调度器给不同资源不同的优先级。从高到低为: 1. 硬件中断(Hardware Interrupts)--这些请求由硬件触发,比如磁盘已经完成了 读写任务或是网卡受到了新的数据包。 2. 软件中断(Software Interrupts)--这里指的是维护内核运行的内核态软件中断。 比如内核的时钟管理进程。 3. 实时进程(Real time threads)--实时进程比内核本身具备更高的优先级,它可以 抢占内核的CPU时间片,在2.4内核是一个不可抢占的内核,它中不支持实时程序。 4. 内核进程(Kernel threads)--包括所以的内核程序。 5. 用户进程(User threads)-- 所有运行在用户态的进程。 关于CPU,有3个重要的概念:上下文切换(context switchs),运行队列(Run queue) 和使用率(utilization)。 上下文切换: 目前流行的CPU在同一时间内只能运行一个线程,超线程的处理器可以在同一时间运行多个线程(包括多核CPU),Linux内核会把多核的处理器当作多个单独的CPU来识别。 一个标准的Linux内核何以支持运行50~50000个进程运行,对于普通的CPU,内核会调度和执行这些进程。每个进程都会分到CPU的时间片来运行,当一个进程用完时间片或者被更高优先级的进程抢占后,它会备份到CPU的运行队列中,同时其他进程在CPU上运行。这个进程切换的过程被称作上下文切换。过多的上下文切换 会造成系统很大的开销。 运行队列: 每个CPU都会维持一个运行队列,理想情况下,调度器会不断让队列中的进程运行。进程不是处在sleep状态就是run able状态。如果CPU过载,就会出现调度器跟不上系统的要求,导致可运行的进程会填满队列。队列愈大,程序执行时间就愈长。“load”用来表示运行队列,用top 命令我们可以看到CPU一分钟,5分钟和15分钟内的运行队列的大 小。这个值越大表明系统负荷越大。 CPU使用率: CPU使用率可分为一下几个部分 User Time—执行用户进程的时间百分比; System Time—执行内核进程和中断的时间百分比;

Linux CPU占用率原理与精确度分析

Linux CPU占用率原理与 精确度分析 https://www.wendangku.net/doc/c09739634.html,

1CPU占用率计算原理 1.1相关概念 在Linux/Unix下,CPU利用率分为用户态、系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间。 下面是几个与CPU占用率相关的概念。 ?CPU利用率 CPU的使用情况。 ?用户时间(User time) 表示CPU执行用户进程的时间,包括nices时间。通常期望用户空间CPU越高越好。 ?系统时间(System time) 表示CPU在内核运行时间,包括IRQ和softirq时间。系统CPU占用率高,表明系统某部分存在瓶颈。通常值越低越好。 ?等待时间(Waiting time) CPI在等待I/O操作完成所花费的时间。系统部应该花费大量时间来等待I/O操作,否则就说明I/O存在瓶颈。 ?空闲时间(Idle time) 系统处于空闲期,等待进程运行。 ?Nice时间(Nice time) 系统调整进程优先级所花费的时间。 ?硬中断处理时间(Hard Irq time) 系统处理硬中断所花费的时间。

?软中断处理时间(SoftIrq time) 系统处理软中断中断所花费的时间。 ?丢失时间(Steal time) 被强制等待(involuntary wait)虚拟CPU的时间,此时hypervisor在为另一个虚拟处理器服务。 下面是我们在top命令看到的CPU占用率信息及各项值含义。 Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 99.2%id, 0.5%wa, 0.0%hi, 0.0%si, 0.0%st us: User time sy: System time ni: Nice time id: Idle time wa: Waiting time hi: Hard Irq time si: SoftIrq time st: Steal time 1.2CPU占用率计算 Linux CPU占用率计算,都是根据/proc/stat文件内容计算而来,下面是stat 文件内容样例,内核版本不同,会稍有不同,但内容基本一致。

相关文档
相关文档 最新文档