- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 JMX 来测量方法调用花费了多长时间以及其中有多少是 CPU 时间、线程被阻塞了多少以及等待了多少。理想情况下,我希望 CPU 时间 + 阻塞时间 + 等待时间 = Wall time,但我注意到情况并非如此 - 而且它不仅仅是稍微不准确的计时器。例如:
Wall time: 5657.305 ms
CPU time: 4060.000 ms (71.77%)
User time: 3840.000 ms (67.88%)
Block time: 0.000 ms (0.00%)
Wait time: 0.000 ms (0.00%)
所以,问题是……我的假设这些时间的总和(不是用户时间,包括在 CPU 时间中)应该给墙时间错误吗? 我错过了什么吗?
更多细节:
Wall time:System.currentTimeMillis()
在方法入口和导出的差异
CPU时间:ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime()
在方法入口和导出的区别
block 和等待时间:类似于 CPU,使用 ManagementFactory.getThreadMXBean().getThreadInfo(Thread.currentThread().getId()).getBlockedTime()
和 getWaitedTime ()
是的,我知道这些方法以不同的单位 (ns/ms) 返回时间,我考虑到了这一点。
该应用程序是高度超线程的(4000 多个线程),但我存储了每个线程的所有信息,因此来自不同线程的调用之间不应该有任何干扰。
最佳答案
CPU 时间告诉您线程使用 CPU 的时间,即实际执行代码的时间。如果线程已被挂起,则阻塞或等待时间会增加,例如等待 I/O 或进入监视器。
但是,将 CPU 时间分配给线程和进程取决于 JVM 和操作系统。如有必要,他们可以随时选择挂起一个线程或进程并恢复另一个线程或进程。所以线程可能处于既没有阻塞也没有等待而只是没有执行的状态。这将增加挂起时间,但不会增加阻塞/等待时间。
CPU 时间值来自操作系统。我检查了 OpenJDK 7 for Linux 系统,所以它在其他平台上可能会有所不同。 fast_thread_cpu_time()
或 slow_thread_cpu_time()
被调用以计算线程的 CPU 时间。这两个函数都位于 hotspot/src/os/linux/vm/os_linux.cpp
中OpenJDK 7 源代码。
自 OpenJDK uses pthreads on Linux ,每个 Java 线程都实现为轻量级 OS 线程。现代内核调用支持的快速方法 pthread_getcpuclockid
检索 clock_id
对于特定线程,然后调用 clock_gettime
检索线程的 CPU 时间。 slow 方法将从 /proc/self/task/<tid>/stat
中查找 CPU 时间值.这两种方法都会告诉您线程在用户和系统/内核空间中消耗 CPU 的时间。
引用资料:
关于java - JMX:CPU + Blocked + Wait time = Wall time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17320062/
-o 更改输出文件名(我发现使用--help) 但我不知道 -Wall 是做什么的? 最佳答案 它是“warn all”的缩写——它打开(几乎)所有 g++ 可以告诉你的警告。通常是个好主意,尤其是如
我的墙脚本存在问题,单个帖子在用户自己的墙上显示多次,在他的 friend 墙上显示一次。例如,如果我有 5 个 friend ,脚本将显示单个帖子 5 次。 由于它在 friend 墙上显示过一次,
我有一个基本程序,您可以在其中使用箭头键绕圆圈移动。我正在努力使球(蓝色矩形)无法进入某个区域,但它不起作用。我正在使用 Eclipse。 package TLOT; import java.awt.
我正试图在我的网站上展示我的墙上最近的一些帖子。当搜索遍了我得到的结果张贴到墙上的网站。 我查看了Facebook开发人员的网站,在那里我无法得到明确的想法。 请专家帮忙。 编辑1: Likebox插
我正在使用 GCC 4.8 用 C 编写一个项目,我想查看所有警告(希望消除它们),但问题是我 #include 一些旧的、未维护的库,这给了我巨大的警告墙以应对 -墙选项。我没有办法解决这些问题,我
在 GCC 中编译时是否可以包含 -Wall 标志,但随后从该子集中排除单个标志,例如 -Wattributes?或者,可以包括除 -Wattributes 之外的所有警告标志,但我认为必须有一种更简
好吧,我知道这个问题已经在很多地方被问过很多次了,但我还无法解决这个问题。我尝试了 java.util.Date 以及 JodaTime API。 我的问题是如何考虑应用程序运行所在的时区返回当前日期
我在这里使用jquery插件Facebook Wall jquery plugin我想在 jquery Facebox 中显示帖子墙。由于某种原因,如果 fb.wall 不是从 Facebox 中加载
我的函数不断出错,我检查了其他答案以寻求帮助,但找不到任何答案。 #include double celsius_at_depth(double celtemp); double fahre
目前我正在使用此命令在 Mint 中编译我的 .c 文件 gcc -std=gnu99 -Wall -Werror filename.c -o filename [-lm] 如何将这些参数设为默认值,
我想在 Facebook 墙上发布一些文字。 我看过“Facebook 开发人员”的教程,但他们建议使用一个按钮登录,另一个按钮发布提要。不幸的是,这不是我想要的。 我想要的是单击我制作的按钮并直接在
所以我想让用户通过粘贴或使用 wall 自己键入来输入特定消息,然后使用 wall 将其广播给所有用户。我的想法是,我不想只有一行消息,而是允许在不使用文本文件的情况下提供他们想要的尽可能大的消息。
我正在编写一个模块来计算给定日期的半小时交易时段。交易时段从半小时开始,从 1(00:00 开始)到 48(23:30 开始)连续编号。通常一天有 48 个交易时段,但在夏令时开始的那一天有 46 个
我在一个编码类(class)中,我们通过命令行参数用 C++ 进行编码,但她正在使用某些我无法通过谷歌搜索找到的东西,但我在本网站的其他帖子中看到过这些东西。我的虚拟机是 Linux。 -Wall 在
假设我有: class Vector3 { float x, y, z; ... bunch of cuntions .. static operator+(const Vector3&,
我正在尝试在 Keil IDE 中为 stm32f103 微 Controller 使用 gcc 编译器。我正在编译一个相对较小的项目,其中包含一些模板代码和几个纯虚拟类。没有花哨的 C++11 东西
我想知道如何使用 spritekit 创建一堵墙。物体上的东西不能移动过去。我知道我可以使用这段代码: self.physicsBody = [SKPhysicsBody bodyWithEdgeLo
我最近开始使用 -Wall 编译器开关来尝试提高我的代码质量。它(正确地)给出了关于这个小片段的警告...... int i; for (i = start - 1; i >= 0;
我有一个有缺陷的程序示例,它应该给出一个关于未初始化变量的警告,但是当我编译它时 gcc 没有给我任何警告。 代码如下: #include int main() { int foo;
这是源文件 get.c 的内容: #include int main(){ //int i = 0; char b[10]; gets(b); puts(b); return 0
我是一名优秀的程序员,十分优秀!