监控和诊断性能问题(CPU)
关于性能调优可能你需要使用到的性能监控工具(也可以说是监控性能的手段)。这里不详细说明工具的具体使用方法和参数,这些最后会单独整理一份。
proc
/proc
文件系统是包含代表Linux内核当前状态文件的层次结构的目录,它允许用户和应用程序查看内核的系统试图。
/proc
目录还包含有关系统硬件和任何当前正在运行的进程信息。/proc
文件系统中的大多数文件都是只读的,但是/proc/sys/
中的文件,可以由用户和应用程序操纵,以便将配置更改传递给内核。
命令行工具
top
procps-ng
包提供的top
工具提供正在运行系统中进程的动态试图。他可以显示各种信息,包括系统摘要和当前由系统内核管理的任务列表。还具有操作流程的能力,并且在系统重启期间使配置更改保持不变。
默认情况下,显示的进程根据CPU使用的百分比排序,以便可以轻松查看小号最多资源的进程。信息顶部的显示和操作都是可以配置的。
vmstat
虚拟内存统计工具vmstat
提供有关系统进程,内存,分页,块输入/输出,中断和CPU活动的即时报告。vmstat
允许设置采样间隔,以便近实时的观察系统活动。
sar
系统活动报告器,sar
,收集并报告当天到目前为止发生的系统的活动信息。默认输出显示当天的CPU使用情况,从当天开始的十分钟00::00:00)。
使用-i
选项以秒为单位设置间隔时间,例如sar -i 60
告诉sar
每分钟检查一次CPU使用情况。
sar
是top
手动创建系统活动定期报告的替代方法。它由sysstat
包提供。
perf
perf
工具通过硬件性能计数器和内核跟踪点来跟踪其他命令和应用程序对系统的影响。perf
的子命令可以显示和记录常见性能事件和统计信息,并分析和报告记录的数据。
turbostat
turbostat
由kernel-tools
包提供。它在处理器拓扑结构,频率,空闲功率状态统计,温度和功率。
turbostat
可用于识别在功率使用或空闲时间方面效率低下的服务器。它还有助于识别系统上发生的系统管理中断(SMI)的速率。还可以用于验证电源管理调整的效果。
turbostat
需要root权限。还需要处理器支持:
- 不变的时间戳计数器
- APERF模型专用寄存器
- MPERF模型专用寄存器
iostat
iostat
由sysstat
包提供,可以监控并报告系统I/O设备负载,帮助决定平衡物理磁盘之间的I/O负载。
irqbalance
irqbalance
可在处理器之间分配硬件终端,提高系统性能。
ss
ss
用于输出有关套接字的统计信息,允许随时评估设备性能。默认情况下,ss
列出已建立连接的打开的非监听TCP套接字,虽然ss
提供了很多选项以过滤有关套接字的统计信息(一种常见用法是ss -tmpie
显示有关套接字内存使用情况和套接字的进程详细信息)。但建议使用netstat
,netstat
由net-tools
包提供。
numastat
numastat
工具以每个NUMA节点为基础显示进程和操作系统的内存统计信息。
默认情况下,numastat
显示每个节点的NUMA从内核内存分配器中查找未命中系统统计信息。高的numa_hit
值和低的numa_miss
值表示最佳性能。numastat
还提供了许多命令行选项。可以显示系统和进程内存如何在系统中的NUMA节点之间的分布。P@ssw0rd否在分配了内存的同一节点运行。
numad
numad
时一个自动NUMA亲和力管理守护进程。他监控系统内的NUMA拓扑和资源使用情况,以便动态地改进NUMA资源分配和管理(以及系统性能)。根据系统工作负载,numad
可以在性能基准测试中提供高达50%的提升。它还提供了一个可以由各种作业管理系统查询的预置位建议,以便为其进程初始绑定CPU和内存资源提供帮助。
numad
通过定期访问/proc
文件系统中的信息,基于每个节点监控可用的系统资源。它尝试维护指定的资源使用级别,并在必要的时候通过在NUMA节点之间移动进程来重新平衡资源分配。numad
尝试通过在系统的NUMA节点的子集上本地化和隔离重要的进程来实现最佳NUMA性能。
numad
主要使具有长时间运行流程的系统受益,这些流程消耗大量资源,并且包含在整个系统资源的子集中。还可能有益于消耗多个NUMA节点的资源的应用程序;但是,随着系统资源消耗百分比的增加,numad
提供的好处就会减少。
当进程只运行几分钟或者不消耗很多资源时,numad
不太可能提高性能。具有连续,不可预测的内存访问模式的系统(如大型内存数据库)也不太可能从使用numad
中受益。
SystemTap
SystemTap是一种跟踪和探测工具,可以详细监控和分析操作系统活动,尤其是内核活动。它提供类似于top
,ps
,netstat
和iostat
等工具输出的信息,但包括用于过滤和分析收集的数据的其他选项。
SystemTap
提供了更深入,更精确的系统活动和应用程序分析。
OProfile
OProfile
是一个系统范围的性能监控工具。它使用处理器的专用性能监控硬件来检索有关内核和系统可执行文件的信息,以确定某些事件的频率,例如何时引用内存,二级缓存请求的数量以及接收的硬件请求的数量。OProfile
还可用于确定处理器使用情况,并确定最常使用的应用程序和服务。
但是OProfile
有一些限制:
- 性能监控样本可能不准确。因为处理器可能无序地执行指令,所以可以从附近的指令,而不是记录触发中断的指令。
OProile
希望程序多次启动和停止。这样的话多次运行得到的样本就可以累积,用户可能需要清除上一次运行的样本数据。OProfile
集中识别CPU访问限制和进程问题。因此,对于等待锁定其他事件来识别睡眠状态的进程无帮助。
Valgrind
Valgrind提供大量检测分析工具帮助提高应用程序性能。这些工具能检测内存和与线程相关的错误,同样能检测堆、栈和数组的超限运行,使用户能够轻松定位和修改应用程序代码错误。也可以配置缓存、堆和分支预测来确定能增加应用程序速度并最小化内存使用率的因素。
通过在CPU运行应用程序来进程分析,并在执行时对现有的应用程序代码进行测试。之后显示的评论会更清楚的标识出每个参与应用程序执行的进程至用户指定文件、文件描述符或网络socket。
PQOS
pqos
程序可从intel-cmt-cat
包获取,可以监控和控制CPU高速缓存和内存带宽。
它公开了Resource Director Technology(RDT)功能集的以下处理器功能:
- 监控
- 使用缓存监控技术(CMT)进行最后一级缓存(LLC)使用和争用监控。
- 使用内存带宽监控(MBM)技术监控线程内存带宽。
- 分配
- 使用高速缓存分配技术(CAT)控制可用于特定线程的LLC空间。
- 使用代码和数据优先级(CDP)技术控制LLC中的代码和数据放置。