# 东方通开启自动部署导致应用启动后频繁GC

# 问题现象

项目上反馈程序启动需要二三十分钟,每次启动到某个位置就卡着十几分钟之后才能正常访问。

# 排查过程

1、检查ctp日志和东方通server.log,查找启动线程结束时间,发现启动只用了6分钟,之后日志提示已经正常启动完成,且capability日志等已经有用户请求进来,但用户反馈这时还无法访问登录。

1754270543768.png

2、部署SeeyonDumpTools跟踪,检查启动后的dump日志(oaStatus_xxxx.htm),发现启动后的GC次数和时间非常高,具体表现在程序

  • 9点48启动完的,9点51 old gc是 32次

1754270153056.png

  • 到9点52,有38次了,时间增加了43秒

1754270182719.png

  • 一直到10点16分41秒,总共gc 206次,耗时1574秒

1754270201882.png

3、由此现象可以判断,启动后程序不断GC才导致应用无法正常访问;

联系客开确认客开代码中是否有添加主动GC的动作,客开检查未发现;试用arthas工具跟踪gc动作

具体步骤:

  • 上传arthas工具到服务器,并解压
  • 重启东方通,查看东方通的进程号,记录下来,假设是 1231
  • 进入arthas解压目录,假设jdk路径是 /opt/jdk/, 执行命令 /opt/jdk/bin/java -jar arthas-boot.jar 1231,会进入arthas命令行界面
  • 执行 options unsafe true
  • 等到启动完成(5分钟左右),执行stack java.lang.System gc > /tmp/gc_stack.txt
  • 等一分钟检查 /tmp/gc_stack.txt 的内容

这里可以看到System.gc与东方通自动部署有关,联系东方通技术协助排查

1754274153657.png

经东方通排查发现,启用了自动部署功能:

该功能会使tongweb一直监控自动部署目录,非常耗费性能,然后文件只要发生变化,都要重新发布,这个过程也会很耗性能

1754274237513.png

# 解决方法

编辑配置文件,节点目录/conf/tongweb.xml,将自动部署改为false

<auto-deploy enabled="false"

修改后客户验证重启6、7分钟后即可正常访问。

编撰人:wangyxyf