记录一次生产环境的 JVM 优化

本贴最后更新于 2909 天前,其中的信息可能已经时异事殊

某日,一个前公司同事找到我,和我说他们的 java 应用程序 CPU 负载过高,经过排查,发现是 jvm 的问题,现贴出解决办法:

首先先 top 找到进程占用 CPU 很高的那个 pid

通过 sp - mp 发现很多线程

将其中一个占用 CPU 很高的线程 tid 转换为 16 进制

最后用 jstack 进行查看并过滤

其中发现了大量的 Gang worker#,判定是 jvm 的问题,对 JVM 做了如下优化

然后再启动 应用服务器,查看 top,已经解决问题

PS:建议使用默认的 JVM 参数,Xmx 和 Xms 最好保持一样。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • selector 1 赞同

    其中发现了大量的 Gang worker#,判定是 jvm 的问题.
    这个地方能解释一下吗 Gang worker 是什么 ? jvm 什么问题?

    1 回复
  • 其他回帖
  • Eddie

    我好像发现有错...
    是 ps -mp 命令吧
    ╮(╯_╰)╭

  • lanoche

    Gang worker#5(parallel gc threads)可以看到是 GC 线程。同时这么多的 GC 线程运行,可以知道是 JVM 内存不够。因此需要设置 JVM 参数,调整堆栈大小。

    1 回复
  • selector

    受教了,我太菜了

  • 查看全部回帖