前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CVM性能排障工具使用手册

CVM性能排障工具使用手册

原创
作者头像
乡村小男孩
发布2019-11-06 20:07:39
9600
发布2019-11-06 20:07:39
举报

大部分Linux 性能监测工具都是基于proc 虚拟文件系统的。以下主要介绍使用CVM过程常见的性能排障工具

1.uptime

Uptime 命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对

服务器性能的总体评估(load average)。load average 值分别记录了上个1 分

钟,5 分钟和15 分钟间隔的负载情况,load average 不是一个百分比,而是在

队列中等待执行的进程的数量。如果进程要求CPU 时间被阻塞(意味着CPU 没有

时间处理它),load average 值将增加。另一方面,如果每个进程都可以立刻得

到访问CPU 的时间,这个值将减少。

load average 的最佳值是1,这说明每个进程都可以立刻被CPU 处理。在不同的

系统间这个值也是不同的,例如一个单CPU 的工作站,load average 为1 或者2

都是可以接受的,但是在一个多CPU 的系统中这个值通常为8 或者10。

你可以使用uptime 判断一个性能问题是出现在服务器上还是网络上。例如,如

果一个网络应用运行性能不理想,运行uptime 检查系统负载是否比较高,如果

不是这个问题更可能出现在你的网络上。

Uptime 命令执行示例

Tip:你可以用w 命令代替uptime,w 命令也可以提供目前登陆用户的信息。

2.Dmesg

Dmesg 的主要功能是显示内核信息,当硬件或者内核中加载的模块出现问题的时

候dmesg 可以提供一些有用的信息。另外,利用dmesg 你可以查看有哪些硬件安

装在你的服务器上。在每次启动的时候,Linux 检查硬件并且记录这些信息。你

可以使用/bin/dmesg 命令来查看这些信息。

3.Top

Top 命令显示了实际CPU 使用情况,默认情况下,它显示了服务器上占用CPU 的

任务信息并且每5 秒钟刷新一次。你可以通过多种方式分类它们,包括PID、时

间和内存使用情况。

下图是一个top 命令结果的示例,

你可以使用renice 命令为一个进程分配新的优先级。如果一个进程宕掉或者占

用了太多的内存,可以使用kill 命令杀死进程。下面是输出值的介绍,

PID:进程标识

USER;进程所有者的用户名

PRI:进程的优先级

NI:nice 级别

SIZE:进程占用的内存数量(代码+数据+堆栈)

RSS;进程使用的物理内存数量

SHARE;该进程和其他进程共享内存的数量

STAT:进程的状态:S=休眠状态,R=运行状态,T=停止状态,D=中断休眠状

态,Z=僵尸状态

%CPU:共享的CPU 使用

%MEM;共享的物理内存

TIME:进程占用CPU 的时间

COMMAND:启动任务的命令行(包括参数)

Top 命令有下面几个有用的热键,包括

t:是否显示概要信息

m:是否显示内存信息

A:通过不同的系统资源情况分类显示结果,对快速判断系统中影响性能的进程

十分有效

f:输入一个top 的交互式的配置画面

o:激活交换式的分类的选择

进程的优先级和nice 级别

进程优先级是一个决定进程被CPU 执行优先顺序的参数,内核会根据需要调整这

个值。Nice 值是一个对优先权的限制。进程优先级的值不能低于nice 值。( nice

值越低优先级越高)

进程优先级是无法去手动改变的,只有通过改变nice 值去间接的调整进程优先

级。如果一个进程运行的太慢了,你可以通过指定一个较低的nice 值去为它分

配更多的CPU 资源。当然,这意味着其他的一些进程将被分配更少的CPU 资源,

运行更慢一些。Linux 支持nice 值的范围是19(低优先级)到-20(高优先级),

默认的值是0。如果需要改变一个进程的nice 值为负数(高优先级),必须使用

su 命令登陆到root 用户。下面是一些调整nice 值的命令示例,

以nice 值-5 开始程序xyz

#nice –n -5 xyz

改变已经运行的程序的nice 值

#renice level pid

将pid 为2500 的进程的nice 值改为10

#renice 10 2500

僵尸进程

当一个进程被结束,在它结束之前通常需要用一些时间去完成所有的任务(比如

关闭打开的文件),在一个很短的时间里,这个进程的状态为僵尸状态。在进程

完成所有关闭任务之后,会向父进程提交它关闭的信息。有些情况下,一个僵尸

进程不能关闭它自己,这时这个进程状态就为z(zombie)。不能使用kill 命令

杀死僵尸进程,因为它已经标志为“dead”。如果你无法摆脱一个僵尸进程,你

可以杀死它的父进程,这个僵尸进程也就消失了。然而,如果父进程是init 进

程,你不能杀死init 进程,因为init 是一个重要的系统进程,这种情况下你只

能通过一次重新启动来摆脱僵尸进程。

4.iostat

iostat 是sysstat 的一部分,如果你没有安装这个包,在Red Hat Enterprise

Linux 光盘中找到sysstat 的rpm 包进行安装。Iostat 显示自系统启动后的平均

CPU 时间(与uptime 类似),它也可以显示磁盘子系统的使用情况,iostat 可以

用来监测CPU 利用率和磁盘利用率。下图是一个命令输出的示例,

CPU 利用率分四个部分:

%user:user level(应用)的CPU 占用率情况

%nice:加入nice 优先级的user level 的CPU 占用率情况

%sys:system level(内核)的CPU 占用情况

%idle:空闲的CPU 资源情况

磁盘占用率有下面几个部分:

Device:块设备名

Tps:设备每秒进行传输的数量(每秒的I/O 请求)。多个单独的I/O 请求可以被

组成一个传输操作,因为一个传输操作可以是不同的容量。

Blk_read/s, Blk_wrtn/s:该设备每秒读写的块的数量。块可能为不同的容量。

块的大小一般为1024、2048、4048byte。例如,块设备/dev/sda1 的块大小可以

通过下面命令查看

# dumpe2fs -h /dev/sda1 |grep -F “Block size”

会得到类似下面的输出

dumpe2fs 1.41.9 (22-Aug-2009)

Block size: 4096

Blk_read, Blk_wrtn:自系统启动以来读写的块设备的总量。

5.Vmstat

Vmstat 命令提供了对进程、内存、页面I/O 块和CPU 等信息的监控,vmstat 可

以显示检测结果的平均值或者取样值,取样模式可以提供一个取样时间段内不同

频率的监测结果。下面是一个vmstat 命令的输出结果的示例。

注:在取样模式中需要考虑在数据收集中可能出现的误差,将取样频率设为比较

低的值可以尽可能的减小误差的影响。

下面介绍一下各列的含义

Master:~/python # vmstat 1 10

procs -----------memory---------- ---swap-- -----io---- -system-- -----cpu------

r b swpd free buff cache si so bi bo in cs us sy id wa st

0 0 0 314904 141624 7618764 0 0 2 1 1 2 0 0 100 0 0

0 0 0 314904 141624 7618804 0 0 0 0 32 23 0 0 100 0 0

·process(procs)

r:等待运行时间的进程数量

b:处在不可中断睡眠状态的进程

w:被交换出去但是仍然可以运行的进程,这个值是计算出来的

.memory

swpd:虚拟内存的数量

free:空闲内存的数量

buff:用做缓冲区的内存数量

·swap

si:从硬盘交换来的数量

so:交换到硬盘去的数量

·IO

bi:向一个块设备输出的块数量

bo:从一个块设备接受的块数量

·system

in:每秒发生的中断数量, 包括时钟

cs:每秒发生的context switches 的数量

·cpu(整个cpu 运行时间的百分比)

us:非内核代码运行的时间(用户时间,包括nice 时间)

sy:内核代码运行的时间(系统时间)

id:空闲时间,在Linux 2.5.41 之前的内核版本中,这个值包括I/O 等待时间

等待I/O 操作的时间,在Linux 2.5.41 之前的内核版本中这个值为0

Vmstat 命令提供了大量的附加参数,可以参考vmstat 的man 手册去查询所有的

参数,下面列举几个十分有用的参数。

·m:显示内核的内存利用率

·a:显示内存页面信息,包括活跃和不活跃的内存页面

·n:显示报头行,这个参数在使用取样模式并将命令结果输出到一个文件时非

常有用。例如root#vmstat –n 2 10 以2 秒的频率显示10 输出结果

·当使用-p {分区}时,vmstat 提供对I/O 结果的统计

6.ps 和pstree

ps 和pstree 命令是系统分析最常用的基本命令,ps 命令提供了一个正在运行的

进程的列表,列出进程的数量取决于命令所附加的参数。例如ps –A 命令列出

所有进程和它们相应的进程ID(PID),进程的PID 是使用其他一些工具之前所

必须了解的,例如pmap 或者renice。

在运行java 应用的系统上,ps –A 命令的输出很容易就会超过屏幕的显示范

围,这样就很难得到所有进程的完整信息。这时,使用pstree 命令可以以树状

结构来显示所有的进程信息并且可以整合子进程的信息。Pstree 命令对分析进

程的来源十分有用。下面是命令的示例,

7.Numastat

随着NUMA 架构的不断发展,例如eServer xSeries 445 及其后续产品eServe

xSeries 460,现在NUMA 架构已经成为了企业级数据中心的主流。然而,NUMA

架构在性能调优方面面临了新的挑战,例如内存分配的问题在NUMA 系统之前并

没人感兴趣,Red Hat Enterprise Linux 4 提供了一个监测NUMA 架构的工具。

Numastat 命令提供了本地内存与远程内存使用情况的对比和各个节点的内存使

用情况。Numa_miss 列显示分配失败的本地内存,numa_foreign 列显示分配远程

内存(访问速度慢)信息,过多的调用远程内存将增加系统的延迟从而影响整个

系统的性能。使运行在一个节点上的进程都访问本地内存将极大的改善系统的性

能。

8.sa

sar 程序是sysstat 安装包的一部分,如果你没有安装这个包,在Red Hat

Enterprise Linux 的源文件中寻找这个rpm 包进行安装,sar 命令用于收集、报

告和保存系统的信息。Sar 命令由三个应用组成:sar,用与显示数据;sa1 和sa2,

用于收集和存储数据。关于sar 工具的详细参数说明可以参考man 手册。

为了以后分析日志,可以使用sa1 和sa2 配置系统获得并且记录日志信息。为了

实现这个目的,如下图例所示向/etc/crontab 中加入相应的内容。注意默认的

情况下cron 每天都会定时的运行sar 命令,如果系统安装了sar 相应的安装包。

sar 命令所生成的数据保存在/var/log/sa/目录下,数据按照时间保存,可以根

据时间来查询相应的性能数据。

例如,显示21 号的网络信息使用下面的命令

sar -n DEV 1 10,命令结果如下,

22:28:38 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s

22:28:39 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00

22:28:39 eth0 5.00 1.00 0.48 0.37 0.00 0.00 0.00

你也可以使用sar 在命令行下得到一个实时的执行结果,收集的数据可以包括

CPU 利用率、内存页面、网络I/O 等等。如下例所示,

9.free

free 命令显示系统的所有内存的使用情况,包括空闲内存、被使用的内存和交

换内存空间。Free 命令显示也包括一些内核使用的缓存和缓冲区的信息。下面

是命令结果的示例,

当使用free 命令的时候,需要记住linux 的内存结构和虚拟内存的管理方法,

比如空闲内存数量的限制,还有swap 空间的使用并不标志一个内存瓶颈的出现。

Free 命令有用的参数:

·-b,-k,-m 和-g 分别按照bytes, kilobytes, megabytes, gigabytes 显示结果。

·-l 区别显示low 和high 内存

·-c {count}显示free 输出的次数

10.Pmap (显示一个或者多个进程使用内存的数量)

pmap 命令显示一个或者多个进程使用内存的数量,你可以用这个工具来确定服

务器上哪个进程占用了过多的内存从而导致内存瓶颈。

命令格式:pmap

关于pmap 命令的详细语法可以使用下面命令查询

pmap -d 28008 (显示snmpd进程使用的内存)

28008: snmpd

START SIZE RSS PSS DIRTY SWAP PERM OFFSET DEVICE MAPPING

00007ff851fab000 4K 0K 0K 0K 0K ---p 0000000000000000 00:00 [anon]

00007ff851fac000 8192K 12K 12K 12K 0K rw-p 0000000000000000 00:00 [anon]

00007ff8527ac000 44K 28K 28K 0K 0K r-xp 0000000000000000 ca:03 /lib64/libsysfs.so.2.0.1

00007ff8527b7000 2044K 0K 0K 0K 0K ---p 000000000000b000 ca:03 /lib64/libsysfs.so.2.0.1

.......

Total: 68176K 6776K 6092K 3648K 0K

12484K writable-private, 55692K readonly-private, 0K shared, and 4676K referenced

11.Strace (监控进程)

strace 截取和记录进程的系统调用信息,还包括进程接受的命令信号。这是一

个有用的诊断和调试工具,系统管理员可以通过strace 来解决程序上的问题。

命令格式,需要指定需要监测的进程ID,下图是一个命令结果的示例。

strace -p 28008 (snmpd 进程PID)

gettimeofday({1398176415, 289636}, NULL) = 0

gettimeofday({1398176415, 289716}, NULL) = 0

gettimeofday({1398176415, 289792}, NULL) = 0

gettimeofday({1398176415, 289866}, NULL) = 0

select(10, [4 8 9], [], [], {0, 671931}) = 0 (Timeout)

gettimeofday({1398176415, 966576}, NULL) = 0

gettimeofday({1398176415, 966652}, NULL) = 0

gettimeofday({1398176415, 966726}, NULL) = 0

open("/proc/stat", O_RDONLY) = 10

read(10, "cpu 34238 7477 59888 1732404978"..., 12287) = 5249

close(10) = 0

open("/proc/vmstat", O_RDONLY) = 10

read(10, "nr_free_pages 79460\nnr_inactive_"..., 4095) = 1334

close(10) = 0

gettimeofday({1398176415, 968020}, NULL) = 0

gettimeofday({1398176415, 968096}, NULL) = 0

gettimeofday({1398176415, 968169}, NULL) = 0

select(10, [4 8 9], [], [], {4, 998630}

使用下面命令可以获得关于strace 的完整语法信息

strace -?

注:当针对某个进程执行strace 命令时,对该进程的运行性能将产生很大的影

响,所以这个命令仅仅应该用在收集数据的时候。

12.ulimit 文件数打开硬限制和软限制

这个命令是基于bash 的,可以通过ulimit 来控制系统资源的使用,使用-a 参

数列出所有可调的参数。

ulimit –a

-H 和-S 参数可以对指定的资源进行软限制和硬限制,如果超过了软限制,系统

管理员会接收到一个警告,在达到硬限制的时候命令就会提示报错。

例如,为系统打开文件的数量设定一个硬限制

ulimit -Hn 4096

为打开文件设定一个软限制

ulimit -Sn 1024

ulimit -SHn 100000 (设定硬限制和软限制的值)

查看硬限制和软限制的值

ulimit -Hn

ulimit -Sn

这是一个很有用的命令,例如现在想在系统启动时对Oracle 用户进行限制,在

/etc/security/limits.conf 中加入如下两行:

soft nofile 4096

hard nofile 10240

另外确保/etc/pam.d/system-auth 文件有下面内容

session required /lib/security/$ISA/pam_limits.so

这一行确保系统会执行这个限制。

如果要查看ulimit 命令的详细语法,可以执行

ulimit -?

13.Mpstat

mpstat 2 5 -P ALL

mpstat 命令是sysstat 包的一部分,如果没有安装sysstat 包,可以在Red Hat

Enterprise Linux 安装源文件中找到并且安装这个rpm 包。Mpstat 命令用于监

测一个多CPU 系统中每个可用CPU 的情况。Mpstat 命令可以显示每个CPU 或者

所有CPU 的运行情况,同时也可以像vmstat 命令那样使用参数进行一定频率的

采样结果的监测。下面是使用mpstat -P ALL 命令的显示结果的示例,

关于完整的命令语法请用下面命令查看

mpstat -?

16. Capacity Manage

Capacity Manager 是IBM Director 系统管理的一个附加组件,可以提供对不同

平台下的多个系统进行长期的性能监测。除了对性能的监测,Capacity Manage

还包括对容量的计划,提供对系统将来可能的容量的分析和建议。Capacity

Manager 可以输出多种文件格式包括HTML, XML 和GIF。IBM Director 可以被应

用在不同操作系统平台下,这样就为在异构环境下对数据的收集和分析提供了有

力的工具。

如果使用Capacity Manager,必须在系统中安装相关的rpm 包。安装完成后在IBM

Director Console 中选择Capacity Manager →Monitor Activato

拖拽Monitor Activator 图标到一个单独的或者一组已经安装相应程序的系统,

在接下来的窗口中可以选择多种子系统进行监测。Capacity Manager 在Linux

下会有少部分功能受一些参数的限制。

Monitor Activator 窗口在右边的窗口中显示相关系统目前的状态,在左边的窗

口中显示显示可用的性能监测。添加一个新的监测,选择相应的监测图标点击

On。改变将在Monitor Activator 窗口关闭后马上生效,配置完成后, IBM

Director 将开始收集并且存储所要求的性能数据。如果要为收集的信息创建一

个报告,选择Capacity Manager → Report Generator 并且拖拽操作你想监测

的单个或者一组系统,IBM Director 将显示下面的界面,

在这里根据你的需要选择是立刻执行或者指定时间执行。在生产环境中,在固定

的时间收集Capacity Manager 报告是一个比较好的方法,我们可以选择在每周

末系统并不繁忙的时候产生一次系统报告。一旦报告收集完成将存储在IBM

Director 服务器上,可以通过Report Viewer 任务来查看。

下图是一个报告结果的示例

在Report Viewer 窗口中可以选择需要查看的不同性能参数,Capacity Manage

的结果可以被输出为HTML 或者XML 文件,为了分析需要可以被显示在内部的web

服务器上。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档