当前位置: 首页 > 知识库问答 >
问题:

解决Java应用程序cpu负载过高的方法

酆俊远
2023-03-14

今天,我发现我的服务器的cpu负载过高,而服务器只是在运行一个Java应用程序。

下面是我的操作步骤。

>

  • 我使用top命令查找应用程序的PID。pid为25713。

    以下是我的问题:

    1. 为什么GC线程使cpu负载过高。
    2. 为什么在我使用jstack命令后,cpu变得正常。

    不止这一次,每一次。

    当我执行jstack命令时,打印的日志

    2015-10-10T10:17:50.757+0800: 53501.137: [GC (Allocation Failure) 2015-10-10T10:17:50.757+0800: 53501.137: [ParNew: 210022K->245K(235968K), 369.6907808 secs] 400188K->1
    90410K(1022400K), 369.6909604 secs] [Times: user=3475.15 sys=11.69, real=369.63 secs] 
    
  • 共有1个答案

    田德馨
    2023-03-14

    只是猜测,您可能会受到某些内核版本中存在的futex_wait bug的影响。

    更一般的情况是,jstack-f向进程发送一个信号,该信号将中断任何可能正在Hibernate的线程。所以可能GC线程只是在旋转--等待另一个线程不知怎么错过了唤醒。即。如果它确实卡在GC中,并且发送一个信号修复了问题,那么这可能指向锁定或内存排序错误,如果不是在内核中,则是在JVM中。

    不使用jstack-f,您可以尝试将sigbreak发送到进程,看看这是否具有相同的效果。

     类似资料:
    • 问题内容: 有没有一种方法可以在不使用JNI的情况下获取Java下的当前cpu负载? 问题答案: 使用获取并调用它。

    • 本文向大家介绍PyTorch 随机数生成占用 CPU 过高的解决方法,包括了PyTorch 随机数生成占用 CPU 过高的解决方法的使用技巧和注意事项,需要的朋友参考一下 PyTorch 随机数生成占用 CPU 过高的问题 今天在使用 pytorch 的过程中,发现 CPU 占用率过高。经过检查,发现是因为先在 CPU 中生成了随机数,然后再调用.to(device)传到 GPU,这样导致效率变得

    • 问题内容: 我正在进行一些吞吐量测试。我的申请必须 从JMS读取 做一些处理 写入JMS 我的目标是模拟#2,“一些处理”。也就是说,在转发事件之前引入延迟并在给定时间(例如500ms)内占用CPU。 天真的方法是。这将导致正确的执行延迟,但不会占用CPU。 计算斐波纳契数是一种选择。 有没有人使用任何有趣的技术只是为了让CPU在给定时间内忙碌? 理想的特征是: 执行各种指令,而不是(例如)仅在循

    • 本文向大家介绍java实战CPU占用过高问题的排查及解决,包括了java实战CPU占用过高问题的排查及解决的使用技巧和注意事项,需要的朋友参考一下 最近一段时间 某台服务器上的一个应用总是隔一段时间就自己挂掉 用top看了看 从重新部署应用开始没有多长时间CPU占用上升得很快 排查步骤 1.使用top 定位到占用CPU高的进程PID top 2.通过ps aux | grep PID命令 获取线程

    • 我有一个基于java的应用程序要在ubuntu上运行,为了从服务器开始并保持它的活力,我编写了一个upstart脚本。 问题是启动了upstart服务,它消耗了100%的cpu,这个应用程序有很多线程,只有一个线程很高。 请注意,从命令行启动java应用程序不会出现此问题。 非常感谢。

    • 问题内容: 我有一个Java应用程序(基于Web),有时显示几个小时的CPU使用率很高(几乎90%)。Linux 命令显示了这一点。重新启动应用程序后,问题消失了。 因此要调查 : 我使用线程转储来查找线程在做什么。发现多个线程处于状态,一些处于其他状态。在进行重复的线程转储时,我确实看到了一些始终处于状态的线程。因此,他们似乎是罪魁祸首。 但是我无法确定是哪个线程正在占用CPU或进入了无限循环(