如何深入分析一例典型的 JVM 问题案例?

2026-05-17 00:251阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1045个文字,预计阅读时间需要5分钟。

如何深入分析一例典型的 JVM 问题案例?

最近,部门要求将Tomcat应用全部迁移到Weblogic。虽然项目不是我开发的,但我多少懂一点Weblogic的使用(注意:是使用)。于是就被拉出来顶上去了。

最近,部门要求将 Tomcat 应用全部迁移到了 Weblogic,好巧不巧,我就是那个负责迁移的人。虽然项目不是我开发的,但奈何我懂一点点 Weblogic 的使用(注意是使用),就被拉出来顶上去了。在经历了几周的煎熬,各种奇怪问题,依赖不兼容问题后,终于将大大小小十几个项目全部部署到 Weblogic 上。

正当我心满意足的盯着一屏绿油油的对号时,忽然发现有两台服务器非常刺眼,他们的状态是 Warning。

如何深入分析一例典型的 JVM 问题案例?

呵呵,这又有什么关系呢,嘴上说正经程序员谁在乎 Warning 啊,但心里还是有点忐忑的,怀着不安的心情下班回家找妹子去了。

第二天,果然还是遭了报应。当我还在美梦中洋洋得意,接到上司的急电,用户反映这个应用坏了。我说怎么会坏呢呢,明明昨天还好好的,领导让我先使用重启大法--其实我也没别的主意,重启之后好了,继续我的美梦。

本想着事情就这么过去了,可没想到到了下午,又有人反应无法使用,这好办,我继续重启呗。

接下来的想必各位读者也能想到,这种接二连三的重启持续了好几天,于是喊负责这个应用的同事去看看是不是有什么 BUG。同事瞪大眼看了一圈儿,给出了很简单的解决方案:配置不够了,加台机器。

这还不简单,对于领导来说,只要能加机器解决的,都不是问题,4C 16G 马上安排一台,于是,这两位 Warning 的兄弟又多了个帮手,这下总该好了吧,第二天高峰我兴冲冲的一看:


原来你也是一路货色啊。

同事又努力改了改配置,将原本默认的 JVM 配置,改成了

-Xms3G -Xmx3G -XX:+UseG1GC

指定了最小内存,加大了可用内存,并且使用 G1 来避免长时间停顿,第二天早上我终于没再接到处理电话,本想着就此就解决了,没想到第三天下午又双叒叕 Down 了,状态还是 Warning。

身为老员工的我,必须出面帮一把了(其实主要是不想再被电话吵醒),拍拍胸脯说:好弟弟,哥哥我来给你看看怎么回事。

这种服务未宕机,但无响应的情况,大概率是服务器由于某种原因无法处理请求了,什么原因呢?会不会是内存泄漏,或者内存满了一直在 GC,没有空闲时间呢?第一时间登录服务器上查看该应用的 GC 情况和配置。

# 使用 jps 找到进程的 ID [weblogic@xxy-app1 ~]$ jps -lv | grep xxy 29773 weblogic.Server -Xms3G -Xmx3G -XX:+UseStringDeduplication -XX:+PrintGCDetails -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -XX:CompileThreshold=8000 -Dlaunch.use.env.classpath=true -Dweblogic.Name=xxy1 -Djava.security.policy=/opt/bea/weblogic/Oracle_Home/wlserver/server/lib/weblogic.policy -Dweblogic.system.BootIdentityFile=/opt/bea/weblogic/Oracle_Home/user_projects/domains/m_domain/servers/xxy1/data/nodemanager/boot.properties -Dweblogic.nodemanager.ServiceEnabled=true -Dweblogic.nmservice.RotationEnabled=true -Dweblogic.ReverseDNSAllowed=false -Djava.system.class.loader=com.oracle.classloader.weblogic.LaunchClassLoader -javaagent:/opt/bea/weblogic/Oracle_Home/wlserver/server/lib/debugpatch-agent.jar -da -Dwls.home=/opt/bea/weblogic/Oracle_Home/wlserver/server -Dweblogic.home=/opt/bea/weblogic/Oracle_Home/wlserver/server -Dweblogic.management.server=www.558idc.com/hk.html 欢迎留下您的宝贵建议】

本文共计1045个文字,预计阅读时间需要5分钟。

如何深入分析一例典型的 JVM 问题案例?

最近,部门要求将Tomcat应用全部迁移到Weblogic。虽然项目不是我开发的,但我多少懂一点Weblogic的使用(注意:是使用)。于是就被拉出来顶上去了。

最近,部门要求将 Tomcat 应用全部迁移到了 Weblogic,好巧不巧,我就是那个负责迁移的人。虽然项目不是我开发的,但奈何我懂一点点 Weblogic 的使用(注意是使用),就被拉出来顶上去了。在经历了几周的煎熬,各种奇怪问题,依赖不兼容问题后,终于将大大小小十几个项目全部部署到 Weblogic 上。

正当我心满意足的盯着一屏绿油油的对号时,忽然发现有两台服务器非常刺眼,他们的状态是 Warning。

如何深入分析一例典型的 JVM 问题案例?

呵呵,这又有什么关系呢,嘴上说正经程序员谁在乎 Warning 啊,但心里还是有点忐忑的,怀着不安的心情下班回家找妹子去了。

第二天,果然还是遭了报应。当我还在美梦中洋洋得意,接到上司的急电,用户反映这个应用坏了。我说怎么会坏呢呢,明明昨天还好好的,领导让我先使用重启大法--其实我也没别的主意,重启之后好了,继续我的美梦。

本想着事情就这么过去了,可没想到到了下午,又有人反应无法使用,这好办,我继续重启呗。

接下来的想必各位读者也能想到,这种接二连三的重启持续了好几天,于是喊负责这个应用的同事去看看是不是有什么 BUG。同事瞪大眼看了一圈儿,给出了很简单的解决方案:配置不够了,加台机器。

这还不简单,对于领导来说,只要能加机器解决的,都不是问题,4C 16G 马上安排一台,于是,这两位 Warning 的兄弟又多了个帮手,这下总该好了吧,第二天高峰我兴冲冲的一看:


原来你也是一路货色啊。

同事又努力改了改配置,将原本默认的 JVM 配置,改成了

-Xms3G -Xmx3G -XX:+UseG1GC

指定了最小内存,加大了可用内存,并且使用 G1 来避免长时间停顿,第二天早上我终于没再接到处理电话,本想着就此就解决了,没想到第三天下午又双叒叕 Down 了,状态还是 Warning。

身为老员工的我,必须出面帮一把了(其实主要是不想再被电话吵醒),拍拍胸脯说:好弟弟,哥哥我来给你看看怎么回事。

这种服务未宕机,但无响应的情况,大概率是服务器由于某种原因无法处理请求了,什么原因呢?会不会是内存泄漏,或者内存满了一直在 GC,没有空闲时间呢?第一时间登录服务器上查看该应用的 GC 情况和配置。

# 使用 jps 找到进程的 ID [weblogic@xxy-app1 ~]$ jps -lv | grep xxy 29773 weblogic.Server -Xms3G -Xmx3G -XX:+UseStringDeduplication -XX:+PrintGCDetails -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -XX:CompileThreshold=8000 -Dlaunch.use.env.classpath=true -Dweblogic.Name=xxy1 -Djava.security.policy=/opt/bea/weblogic/Oracle_Home/wlserver/server/lib/weblogic.policy -Dweblogic.system.BootIdentityFile=/opt/bea/weblogic/Oracle_Home/user_projects/domains/m_domain/servers/xxy1/data/nodemanager/boot.properties -Dweblogic.nodemanager.ServiceEnabled=true -Dweblogic.nmservice.RotationEnabled=true -Dweblogic.ReverseDNSAllowed=false -Djava.system.class.loader=com.oracle.classloader.weblogic.LaunchClassLoader -javaagent:/opt/bea/weblogic/Oracle_Home/wlserver/server/lib/debugpatch-agent.jar -da -Dwls.home=/opt/bea/weblogic/Oracle_Home/wlserver/server -Dweblogic.home=/opt/bea/weblogic/Oracle_Home/wlserver/server -Dweblogic.management.server=www.558idc.com/hk.html 欢迎留下您的宝贵建议】