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. Java自学网站--十几个网站的分析与评测

    ​简介 很多想学Java的人不知道怎样选教程,本文对Java自学网站进行评测. 本文不带主观倾向,只客观分析各个网站的区别. 第1类:大型培训机构(黑马等) 典型机构 黑马.尚硅谷.动力节点.白马.千 ...

  2. Python - 读取CSV文件发现有重复数据,如何清洗以及保存为CSV文件,这里有完整的过程!!!! 片尾有彩蛋

    语言:Python 功能: 1.清洗CSV文件中重复数据. 2.保存为CSV文件 大体流程: 1.首先观察CSV文件中的数据布局格式如何? 2.通过csv包读取数据.并根据规则使用continue,来 ...

  3. 【sqli-labs】学习--待续

    预备知识: 数字型注入: 这种sql语句中处理的是整型,不需要使用单引号来闭合变量的值. 首先输入id=1',此时因为不是整型,sql语句会执行出错,抛出异常. 然后输入id=1 and 1=1,此时 ...

  4. 云图说|初识API中心APIHub

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:API中心是为AP ...

  5. ❤️接近两万字 CSS之熟练掌握background,这一次帮你彻底弄懂背景属性❤️(建议收藏)

    作者:WangMin 格言:努力做好自己喜欢的每一件事 在项目中为了网页的美观,通常会给网页或者某个元素设置背景,这时就会用到 CSS中background属性 来实现这个效果,这个属性是一个很基本的 ...

  6. Petals

    ------------恢复内容开始------------ 打开发现一堆地址冒红 滑倒后面发现E8,根据经验应该是花指令考点 然后D-->nop-->C-->P得到正常结果 然后第 ...

  7. 一套开源、强大且美观的WPF UI控件库 - HandyControl

    前言 今天给大家推荐一套开源.强大且美观的WPF UI控件库:HandyControl. WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用.它提供了灵 ...

  8. 开源推荐,灵活多变功能强大的CMDB

    一个完善的基础资源数据库是我们构建运维自动化上层应用的基础,所以构建CMDB系统成了有想法在DevOps运维自动化领域有所发展的企业离不开的重要一环,但受制于每家企业不同的内外部环境.资源配置以及管理 ...

  9. 【Android】打卡app 今日完成情况记录

    已完成内容:页面的设计.数据库的建立 今日目标:实现数据库的增删改查,并能够在页面实现输出 逻辑: 1.用户进入注册页面,进行注册,注册成功后,可以成功登录(这一阶段就完成了) 2.登录后,显示用户的 ...

  10. 如何收集pod重启前现场

    之前分享过几篇优化pod重启的文章,有朋友发私信问:看你的优化文章很过瘾,可否分享下如何收集pod重启前的现场. 案例分享-full gc导致k8s pod重启 记一次k8s pod频繁重启的优化之旅 ...