QNX 性能分析工具

小结

  • hogs:列出最占用 CPU/RAM 的进程,可以统计内存占用详细情况【可单个进程】
  • pidin:显示进程信息、系统信息、库信息...【可单个进程】
  • ps:显示进程信息【可单个进程】
  • top:多核平均占用,不能针对单个进程?
  • ttop:和 top 类似,显示更多线程,单核占用率
  • tracelogger:记录内核事件,保存到 kev 文件,可以用 QNX Momentics 分析各个线程的活动情况
  • Momentics Profiler/Valgrind

hogs

列出占用 CPU 的进程

参数

-m [e][t][p][s] 统计 ELF/STACK/SHARED/PRIVATE(默认) 内存映射,例如可以用 `-msp` 参数统计 shared 和 private 映射之和
-S [c|m|p] 按照 CPU(默认)、内存、PID 排序
-% <num> [c|m] 只显示 CPU(默认)或内存占用超过 num% 的进程
---TLDR---
-i <iter> 打印 iter 次
-s <sec> 刷新间隔,默认 3

例子

# 显示进程 39379114 及各个核的占用情况,每 1s 刷新一次
hogs -s 1 39379114 # 统计 shared 和 private 内存映射,并按内存占用排序
hogs -msp -Sm # 显示 CPU 占用超过 10% 的进程
hogs -% 10c

输出列

MSEC: 自上次结果以来,该进程运行的 ms 数
PIDS: 本次迭代中,进程运行时间的占所有其他进程运行时间的百分比
SYS: 本次迭代中,进程运行时间的占迭代时间的百分比
MEMORY: 进程内存用量,取决于 -m 参数
      PID           NAME  MSEC PIDS  SYS       MEMORY
39379107 MyProcess1 554 1% 18% 17288k 0%
39358626 MyProcess2 779 2% 25% 7808k 0%
39379114 MyProcess3 788 2% 26% 15960k 0%
0 [idle] 2409 6% 80% 0k 0%
1 [idle] 2976 8% 99% 0k 0%
2 [idle] 2942 8% 98% 0k 0%
3 [idle] 3003 8% 100% 0k 0%
4 [idle] 2993 8% 99% 0k 0%
5 [idle] 3007 8% 100% 0k 0%
6 [idle] 3021 8% 100% 0k 0%
7 [idle] 3013 8% 100% 0k 0%
8 [idle] 1795 4% 59% 0k 0%
9 [idle] 974 2% 32% 0k 0%
10 [idle] 1043 2% 34% 0k 0%
11 [idle] 3023 8% 100% 0k 0%

pidin

显示进程信息,功能非常强大

参数

-F "%a %b %N %p %J %B"
-fabNpJB 和 -F 类似,简化版
-p prio 以 prio 优先级运行
-P <pid> pid 可以是进程名或 PID

例子

# 显示 MyProcess 进程的 pid、tid、线程名及完整路径
pidin -fabhn -P MyProcess # 显示系统信息(CPU、内存、进程、线程)
pidin info # 显示 MyProcess 进程库信息
pidin -P MyProcess libs

ps

无参数:默认列:PID TTY TIME CMD

-a 打印和当前终端关联的进程信息

-A or -e 打印所有进程信息

-f 完整列,增加 UID PPID C STIME

-l 更详细的列

UID PID PPID C STIME TTY TIME CMD

用户 ID 进程 ID 父进程 ID 启动时间 ??累积 CPU 时间 完整命令

ps 不显示僵尸进程,如果要查看僵尸进程,可以用 pidin

top

参数

-t 显示线程名
-z <num> 显示资源消耗最高的 num 个线程
--- TLDR ---
-b batch mode,用于后台,不响应“交互”按键,但是可以响应 Ctrl+C
-d 不刷新屏幕,而是持续输出?
-i <number> 刷新 number 次后自动结束
-n <node> 在远程 node 上运行 top
-p <priority> 以指定优先级运行

例子

# 显示线程名、显示资源消耗最高的 40 个线程
top -tz 40 | grep MyProcess

交互

可以进入 top 界面之后,按键交互。如果 top 带了 -b 参数则无法响应以下按键

? 或 h 显示帮助
d 屏幕刷新间隔,默认 5s
l 立即刷新
k 杀进程
n 显示的线程数,5~40,默认 10
q 退出 top

ttop

Thread Monitor

参数

-p 采样周期,单位 us,默认 1s(1000000)
-r 刷新时间,单位 s,默认 3s
-d 运行总时长,单位 s,默认 10s
-l 在实时输出中,显示多少个线程,默认 20

例子

尽可能多地显示进程 36434092 的所有线程信息

./ttop -l 200 | grep 36434092

注:ttop 显示的 CPU 占用率是相对一个核的,而 top 显示的 CPU 占用是平摊到所有核的

tracelogger

从 instrumented 内核接收事件,保存到文件(默认 /dev/shmem/tracebuffer.kev,kev:kernel events)。然后可以在 Momentics 中分析。

在 Momentics 的 QNX System Profile 的 Perspective,Timeline 面板可以看到各个线程活动情况(nanosleep/running/condvar/receive...)

注:必须以 root 运行,必须是 instrumented 版本的 procnto(如 procnto*-instr),QNX Neutrino 7.0 之后只提供 instrumented

Reference

https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.ide.userguide/topic/analyze_performance.html

https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.ide.userguide/topic/appprofiler_purpose.html

https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.ide.userguide/topic/appprofiler_tool.html

https://www.qnx.com/developers/docs/7.0.0/index.html#com.qnx.doc.neutrino.user_guide/topic/fine_tuning.html

Momentics + Application Profiler/Valgrind-cachegrind

可以

  • 监控性能
  • Profile 程序:可以分析函数调用情况及各个函数花费时间
  • 调查性能瓶颈:测量应用的缓存不命中、堆内存使用、如何和其他进程交互

可以导出性能分析数据。

profile 应用

需要从 IDE 启动,也可以 attach。

采样、函数调用计数

相比测量函数 runtimes 开销更小,但不准确:两次采样间隔中间函数可能执行了很多次。也不能用于 timer-synchronized programs。

  • 必须统计足够长的时间才能更准确
  • 必须在编译和链接时,加上 -p 参数

从 IDE 启动

会自动以固定周期报告执行位置

从命令行离线 Profile

增加编译选项,拷到板子,设置 PROFDIR 环境变量,运行 binary。

注意:app 必须正常退出才能得到 gmon.out 文件。可以在收到信号时,调 exit()

限制:

  • 看不到各个线程!
  • 动态库结果没有!
  • 必需以 root 运行,否则没有 sampling info

测量函数运行时间

进入、退出函数时,报告时间戳。相比采样执行位置,开销更大。用于多线程可能会改变时序、行为。

  • 编译选项:-finstrument-functions
  • 链接选项:-lprofilingS

有些情况只能离线 profile,导出文件、导入 IDE

  • host 和 target 不在一个网络
  • target 上没有 qconn 服务

性能瓶颈分析

之前的profile结果告诉你那个函数时间长,接下来需要进一步分析为什么函数慢

常见的导致性能问题的原因:

  • 大量的堆使用。分配、释放堆空间,可以看 heap usage
  • 受其他进程影响:可以查看内核 event trace,看是否有饥饿、优先级反转等问题
  • 缓存不命中:Valgrind Cachegrind

Momentics + Valgrind

可以分析

  • Memcheck:内存泄漏
  • Massif:堆内存使用
  • Helgrind:线程同步问题
  • Cachegrind:缓存使用

Reference

https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.ide.userguide/topic/analyze_performance.html

QNX 性能分析工具的更多相关文章

  1. Java 性能分析工具 , 第 3 部分: Java Mission Control

    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...

  2. Java 性能分析工具 , 第 2 部分:Java 内置监控工具

    引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...

  3. Java 性能分析工具 , 第 1 部分: 操作系统工具

    引言 性能分析的前提是将应用程序内部的运行状况以及应用运行环境的状况以一种可视化的方式更加直接的展现出来,如何来达到这种可视化的展示呢?我们需要配合使用操作系统中集成的程序监控工具和 Java 中内置 ...

  4. 系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

  5. 性能分析工具-PerfView

    Roslyn的PM(程序经理) Bill Chiles,Roslyn使用纯托管代码开发,但性能超过之前使用C++编写的原生实现,这有什么秘诀呢?他最近写了一篇文章叫做<Essential Per ...

  6. 11个Visual Studio代码性能分析工具

    软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...

  7. Linux性能分析工具的安装和使用

    转自:http://blog.chinaunix.net/uid-26488891-id-3118279.html Normal 0 7.8 磅 0 2 false false false EN-US ...

  8. php性能分析工具 - xhprof的安装使用

    一.前言 有用的东西还是记录下来吧,也方便以后的查询:这次记录一下xhprof的安装使用: xhprof是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低, ...

  9. OProfile 性能分析工具

    OProfile 性能分析工具 官方网站:http://oprofile.sourceforge.net/news/ oprofile.ko模块本文主要介绍Oprofile工具,适用系统的CPU性能分 ...

  10. linux命令(4):top 命令(性能分析工具)

    linux 的top命令详解 简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个 ...

随机推荐

  1. VisionPro学习笔记(4)——PatInspect

    如果需要了解其他图像处理的文章,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (106)-- 算法导论10.1 4题

    四.用go语言,重写 ENQUEUE 和 DEQUEUE 的代码,使之能处理队列的下溢和上溢. 文心一言: 在 Go 语言中,我们可以使用切片来实现队列.下面是如何实现 ENQUEUE 和 DEQUE ...

  3. ProcessingJS

    ProcessingJS 图形 rect(x, y, w, h)(在新窗口中打开) ellipse(x, y, w, h) triangle(x1, y1, x2, y2, x3, y3) line( ...

  4. MySQL PXC 集群运维指南

    目录 一.PXC方案概述 二.PXC基础知识 三.PXC节点的配置安装 四.PXC节点的上线与下线 五.其他 一.PXC方案概述 Percona XtraDB Cluster (PXC) 是一个完全开 ...

  5. Jmeter连接数据库sql语句操作,查询后取值做变量

    第一步 :导入jar包 第二步 :创建JDBC Reques 第三步 :创建JDBC Connection Configuration  第四步:在request中输入数据进行操作 Query Typ ...

  6. C++函数如何具有多个返回值?

      本文介绍在C++语言中,使用一个函数,并返回两个及以上.同类型或不同类型的返回值的具体方法.   对于C++语言而言,其不能像Python等语言一样在一个函数中返回多个返回值:但是我们也会经常遇到 ...

  7. 虹科案例 | 虹科Domo商业智能,助力保险公司逃离繁杂数据池!

    金融行业的发展充满着不确定性,一个具备强大承保能力和精算专业知识的资金池,对于身处该领域的公司和个人都是十分必要的. 在全国城市联盟(NLC)的协助下成立的NCL Mutual会员制互助保险公司,为各 ...

  8. Nacos源码阅读心得

    Nacos注册中心(1.4.1)源码解读心得 一丶Nacos介绍 Nacos是阿里巴巴推出的一款新开源项目,是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.它致力于帮助您发现.配置和 ...

  9. 这次弄一下maven 多模块项目,用vscode新建一下,便于管理项目

    首先 创建一个mvn项目, 直接在命令行执行, 原型生成: mvn archetype:generate 选一个maven quick start的template, 然后删除src和target文件 ...

  10. 51单片机控制w5500实现udp组播通信

    51单片机控制w5500实现udp组播通信 在socket打开之前,向Sn_MR (Socket n 模式寄存器)寄存中写入 0x82(1000 0010),将W5500加入组播组 对Sn_DIPR ...