gpt4 book ai didi

java - 为什么 park/unpark 有 60% 的 CPU 使用率?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:06:40 26 4
gpt4 key购买 nike

最近我们开始使用 YJP 11.0.9 对我们的应用程序(基于 XMPP 的聊天服务器)进行压力测试。在我们的测试过程中,我们注意到以下奇怪的行为。

  1. 采样显示 sun.misc.Unsafe.unpark(Object) 占用了 60% 的 CPU。
  2. 对于同一个应用,Tracing 显示 LockSupport.park(Object) 占用了 52% 的 CPU。

我做了多次测试来确认结果,每次我都得到相似的结果。

我无法理解为什么 unpark 应该花费 60% 的时间以及为什么跟踪显示完全相反的结果。

谁能帮我理解这些结果。我在这里遗漏了什么吗?

环境:

java -versionjava version "1.6.0_31"Java(TM) SE Runtime Environment (build 1.6.0_31-b04)Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)

最佳答案

Unsafe.unpark 的高 CPU 时间是过度上下文切换的标志。这是一篇了解上下文切换有多昂贵的文章:

How long does it take to make a context switch?

在 Linux 上找出 CS 计数的最简单选项是运行 vmstat <seconds> .

一旦高 CS 得到确认(例如,每核每秒更多 10K 次切换),您将使用有问题的线程(您可以在 YJP 中按 CPU 时间对线程进行排序)并运行 strace -p <pid> -c找出切换的原因,例如线程正在从套接字中读取小块并关闭,在这种情况下增加套接字缓冲区可能会有所帮助。

关于java - 为什么 park/unpark 有 60% 的 CPU 使用率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12972918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com