首页 > 解决方案 > 如何找出调试符号的含义

问题描述

我正在分析OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-0ubuntu0.18.04.1-b12)主要由I/O文件到套接字组成的 Java ( ) 应用程序。从文件中读取数据,即时压缩并发送到套接字。

我用 perf 做了一些 cpu-cycles 采样,得到了以下图片:

在此处输入图像描述

我注意到的事情是sys_futex消耗了大部分 CPU(精确地_raw_spin_unlock_irqrestore- 11.44%),而我从它的名字中猜到的所谓_ZN12GCTaskThread3runEnv符号与GC.

问题:

  1. 如何找出这个符号_ZN12GCTaskThread3runEnv负责什么?

  2. 为什么futexes ( futex_wait, futex_wake) 是最消耗 CPU 时间的?我预计这种copy_user_enhanced_fast_string由于高I/O活动性而居于首位,但它只需要0.56%显示的样本。

AFAIK_raw_spin_unlock_irqstore代表等待 I/O 事件,但为什么它比 I/O 本身消耗更多的 CPU?

标签: javalinuxperformancejvm

解决方案


推荐阅读