一、简要介绍
作为一个测试了十年windows系统的测试人员来说,最近公司新开发了一个软件是基于Linux服务器的,领导需要监控下服务器的性能,这对我们这些门外汉来说可要命了,能怎么办呢,只能各大网站搜搜搜,参考各种命令指标,熟话说一口气吃不成个胖子,只能先学习下别人好的方法,后面通过这些方法再来总结如何高效的测试服务器性能指标。
二、如何查看CPU性能
下面这个是一位老哥总结的我觉得特别好,就盗取过来了,CPU使用率,平均负载,上下文切换,CPU缓存命中率等,其中上下文切换和CPU缓存命中率不是特别了解,哈哈!
然后我们根据工具来找指标
#Uptime
uptime 命令可以用来查看服务器运行了多长时间:当前时间、已运行的时间、当前登录的用户连接数,以及过去 1 分钟、5 分钟和 15 分钟的系统负载平均值
[root@localhost ~]# uptime
![](https://i-blog.csdnimg.cn/blog_migrate/467b784389ca8dae9e5c8f71a7f166af.png)
#top- 经典的Linux任务管理工具
top是大多数的类Unix操作系统任务管理器。它可以显示当前正在运行的进程的列表,用户可以按照不同的条件对该列表进行排序。它主要显示了系统进程对CPU和内存的使用状况。top可以快速检查是哪个或哪几个进程挂起了你的系统。你可以在这里看到top使用的例子。 你可以在终端输入top来运行它并进入到交互模式
[root@localhost ~]# top
交互模式的一些快捷操作:
全局命令: <回车/空格> ?, =, A, B, d, G, h, I, k, q, r, s, W, Z
统计区的命令: l, m, t, 1
任务区的命令:
外观: b, x, y, z 内容: c, f, H, o, S, u 大小: #, i, n 排序: <, >, F, O, R
色彩方案: <Ret>, a, B, b, H, M, q, S, T, w, z, 0 - 7
窗口命令: -, _, =, +, A, a, G, g, w
PS:更高级的top命令有atop, htop
#mpstat-监控多处理器的使用情况(需要先安装sysstat)
[root@localhost ~]# mpstat
![](https://i-blog.csdnimg.cn/blog_migrate/dca8bdae6d239bffe9c0194a54a741ff.png)
#vmstat-虚拟内存统计信息
vmstat是虚拟内存(virtual memory statistics)的缩写,作为一个内存监控工具,它收集和显示关于内存,进程,终端和分页和I/O阻塞的概括信息。作为一个开源程序,它可以在大部分Linux发行版本中找到,包括Solaris和FreeBSD。它用来诊断大部分的内存性能问题和其他相关问题
[root@localhost ~]# vmstat
![](https://i-blog.csdnimg.cn/blog_migrate/56b5bde52a0bb6980b5e1e41571b583a.png)
#pidstat
pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息
[root@localhost ~]# pidstat (等效pidstat -u -p All)
![](https://i-blog.csdnimg.cn/blog_migrate/0c08fce224658c3a35a400bf85f95a85.png)
指标说明:
· PID:进程ID
· %usr:进程在用户空间占用cpu的百分比
· %system:进程在内核空间占用cpu的百分比
· %guest:进程在虚拟机占用cpu的百分比
· %CPU:进程占用cpu的百分比
· CPU:处理进程的cpu编号
· Command:当前进程对应的命令
-u:默认的参数,显示各个进程的cpu使用统计
-r:显示各个进程的内存使用统计
-d:显示各个进程的IO使用情况
-p:指定进程号
-w:显示每个进程的上下文切换情况
-t:显示选择任务的线程的统计信息外的额外信息
-T { TASK | CHILD | ALL }
这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
-V:版本号
-h:在一行上显示了所有活动,这样其他程序可以容易解析。
-I:在SMP环境,表示任务的CPU使用率/内核数量
-l:显示命令名和所有参数
[root@localhost ~]# pidstat -w -p xxx
显示单个进程的上下文切换情况
PID:进程id
Cswch/s:每秒主动任务上下文切换数量
Nvcswch/s:每秒被动任务上下文切换数量
Command:命令名
#dstat-多类型资源统计工具
该命令整合了vmstat,iostat和ifstat三种命令。同时增加了新的特性和功能可以让你能及时看到各种的资源使用情况,从而能够使你对比和整合不同的资源使用情况。通过不同颜色和区块布局的界面帮助你能够更加清晰容易的获取信息。它也支持将信息数据导出到cvs格式文件中,从而用其他应用程序打开,或者导入到数据库中。你可以用该命令来监控CPU,内存和网络状态随着时间的变化
[root@localhost ~]# dstat
![](https://i-blog.csdnimg.cn/blog_migrate/2f2617986085cac8ac9502a84d5ee9d9.png)
分组:
CPU状态: CPU的使用率。显示了用户占比,系统占比、空闲占比、等待占比、硬中断和软中断情况
磁盘统计: 磁盘的读写,分别显示磁盘的读、写总数
网络统计:网络设备发送和接受的数据,分别显示的网络收、发数据总数
分页统计: 系统的分页活动。分别显示换入(in)和换出(out)
系统统计: 统计中断(int)和上下文切换(csw)
[root@localhost ~]# dstat -glms --mem
查看内存使用率
[root@localhost ~]# dstat -cyl --proc
查看CPU使用率
[root@localhost ~]# dstat --ouput /tmp/test.csv
输出csv文件
其他参数:
-c:显示CPU系统占用,用户占用,空闲,等待,中断,软件中断等信息。
-C:当有多个CPU时候,此参数可按需分别显示cpu状态,例:-C 0,1 是显示cpu0和cpu1的信息。
-d:显示磁盘读写数据大小。
-D hda,total:include hda and total。
-n:显示网络状态。
-N eth1,total:有多块网卡时,指定要显示的网卡。
-l:显示系统负载情况。
-m:显示内存使用情况。
-g:显示页面使用情况。
-p:显示进程状态。
-s:显示交换分区使用情况。
-S:类似D/N。
-r:I/O请求情况。
-y:系统状态。
--ipc:显示ipc消息队列,信号等信息。
--socket:用来显示tcp udp端口状态。
-a:此为默认选项,等同于-cdngy。
-v:等同于 -pmgdsc -D total。
--output 文件:此选项也比较有用,可以把状态信息以csv的格式重定向到指定的文件中,以便日后查看。例:dstat --output /root/dstat.csv & 此时让程序默默的在后台运行并把结果输出到/root/dstat.csv文件中
#sar命令
sar命令是Linux下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小
Note:直接使用sar命令会提示找不到sa20文件,所以需要先创建一个文件
[root@localhost ~]# sar -o 2 1
![](https://i-blog.csdnimg.cn/blog_migrate/ebf8f26d0bf3148cadf651d2fe4265d3.png)
[root@localhost ~]# sar -u 3 5
示例为查看系统CPU整体负载状况,每3秒统计一次,统计5次
![](https://i-blog.csdnimg.cn/blog_migrate/8848c4cffc6528c3f6573bee5798c89c.png)
此输出结果中,各个列表项的含义分别如下:
%user:用于表示用户模式下消耗的 CPU 时间的比例;
%nice:通过 nice 改变了进程调度优先级的进程,在用户模式下消耗的 CPU 时间的比例
%system:系统模式下消耗的 CPU 时间的比例;
%iowait:CPU 等待磁盘 I/O 导致空闲状态消耗的时间比例;
%steal:利用 Xen 等操作系统虚拟化技术,等待其它虚拟 CPU 计算占用的时间比例;
%idle:CPU 空闲时间比例
[root@localhost ~]# sar -d 3 5
示例为查看系统磁盘读写性能,每3秒统计一次,统计5次
此输出结果中,各个列表头的含义如下:
tps:每秒从物理磁盘 I/O 的次数。注意,多个逻辑请求会被合并为一个 I/O 磁盘请求,一次传输的大小是不确定的;
rd_sec/s:每秒读扇区的次数;
wr_sec/s:每秒写扇区的次数;
avgrq-sz:平均每次设备 I/O 操作的数据大小(扇区);
avgqu-sz:磁盘请求队列的平均长度;
await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1 秒=1000 毫秒);
svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间;
%util:I/O 请求占 CPU 的百分比,比率越大,说明越饱和。
其他参数:
除此之外,如果想要查看系统内存使用情况,可以执行sar -r 5 3命令;如果要想查看网络运行状态,可执行sar -n DEV 5 3命令,等等。有关其它参数的用法,这里不再给出具体实例,有兴趣的读者可自行测试,观察运行结果
#perf
perf是Linux下的一款性能分析工具,能够进行函数级与指令级的热点查找。它由一个叫“Performance counters“的内核子系统实现,基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析,可用于性能瓶颈的查找与热点代码的定位
[root@localhost ~]# perf list
查看当前软硬件环境支持的性能事件
[root@localhost ~]# perf stat
分析指定程序的性能概况
参数解释:
task-clock:任务真正占用的处理器时间,单位为ms。CPUs utilized = task-clock / time elapsed,CPU的占用率,值高,说明程序的多数时间花费在CPU计算上而非IO。
context-switches:上下文的切换次数。
CPU-migrations:处理器迁移次数。Linux为了维持多个处理器的负载均衡,在特定条件下会将某个任务从一个CPU迁移到另一个CPU。
page-faults:缺页异常的次数。当应用程序请求的页面尚未建立、请求的页面不在内存中,或者请求的页面虽然在内存中,但物理地址和虚拟地址的映射关系尚未建立时,都会触发一次缺页异常。另外TLB不命中,页面访问权限不匹配等情况也会触发缺页异常。
cycles:消耗的处理器周期数。
instructions:执行了多少条指令。IPC为平均每个cpu cycle执行了多少条
branches:遇到的分支指令数。branch-misses:预测错误的分支指令数
[root@localhost ~]# perf top
实时显示系统/进程的性能统计信息
常用命令行参数:
-e <event>:指明要分析的性能事件。
-p <pid>:仅分析目标进程及其创建的线程。
-k <path>:带符号表的内核映像所在的路径。
-K:不显示属于内核或模块的符号。
-U:不显示属于用户态程序的符号。
-d <n>:界面的刷新周期,默认为2s。
-g:得到函数的调用关系图。
[root@localhost ~]# perf record -o /tmp/perf.data
记录一段时间内系统/进程的性能事件perf report:读取perf record生成的perf.data文件,并显示分析数据
[root@localhost ~]# perf report -i /tmp/perf.data
常用命令行参数:
-e <event>:指定性能事件(可以是多个,用,分隔列表)
-p <pid>:指定待分析进程的 pid(可以是多个,用,分隔列表)
-t <tid>:指定待分析线程的 tid(可以是多个,用,分隔列表)
-u <uid>:指定收集的用户数据,uid为名称或数字
-a:从所有 CPU 收集系统数据
-g:开启 call-graph (stack chain/backtrace) 记录
-C <cpu-list>:只统计指定 CPU 列表的数据,如:0,1,3或1-2
-r <RT priority>:perf 程序以SCHED_FIFO实时优先级RT priority运行这里填入的数值越大,进程优先级越高(即 nice 值越小)
-c <count>: 事件每发生 count 次采一次样
-F <n>:每秒采样 n 次
-o <output.data>:指定输出文件output.data,默认输出到perf.data
这张图里, top、vmstat和pidstat 分别提供的重要的CPU指标,并用虚线表示关联关系,对应出了性能分析下一步的方向。
通过这张图你可以发现,这三个命令,几乎包含了所有重要的CPU性能指标比如∶
从 top的输出可以得到各种CPU使用率以及僵尸进程和平均负载等信息。
从 vmstat的输出可以得到上下文切换次数、中断次数、运行状态和不可中断状态的进程数。
从 pidstat的输出可以得到进程的用户CPU使用率、系统CPU使用率、以及自愿上下文切换和非自愿上下文切换情况。
另外,这三个工具输出的很多指标是相互关联的,虚线表示了它们的关联关系
三、查看线程句柄数
#ulimit 查看线程占句柄数
显示目前资源限制的设定
[root@localhost ~]# ulimit -a
[root@localhost ~]# more /proc/sys/fs/file-max
查看系统打开句柄最大数量
[root@localhost ~]# lsof|awk '{print $2}'|wc -l 注:lsof未安装需要安装
查看打开句柄总数
[root@localhost ~]# lsof|awk '{print $2}'|sort|uniq -c|sort -nr|more
根据打开文件句柄的数量降序排列,其中第二列为进程ID
注:第一列进程句柄数,第二列为进程ID
根据获取的进程ID查看进程的详情
[root@localhost ~]# ps -ef |grep xxxx 注:xxxx为进程ID
修改linux单进程最大文件连接数
[root@localhost ~]# vi /etc/security/limits.conf
vi是查看文件服务器,添 加完成之后按:wq退出,个人倾向使用nano,添加以下参数
修改完成后logout当前用户再重新login, 然后使用命令ulimit -a查看,具体ulimit命令用法可参照https://www.runoob.com/linux/linux-comm-ulimit.html