记一个有趣的java项目部署到服务器变慢的问题

您所在的位置:网站首页 xshell部署jar包 记一个有趣的java项目部署到服务器变慢的问题

记一个有趣的java项目部署到服务器变慢的问题

#记一个有趣的java项目部署到服务器变慢的问题| 来源: 网络整理| 查看: 265

项目背景:Windows Server 2016 / Springboot / JDK1.8 / Oracle11.2.0

具体问题:项目在本地运行正常,接口返回时间都在几十毫秒的级别,但是部署到服务器后部分接口返回时间甚至会达到六七秒。

排查过程:

首先怀疑网络原因,F12查看请求后发现网络传输时间可以忽略不计,排除之。

然后怀疑服务器压力过大,查看内存和CPU负载都正常,也排除掉。

之后怀疑数据库原因,使用本地项目连接服务器库,一切正常,排除之。又想到可能是连接池配置有问题导致一直在等待获取连接,确认并修改以后问题依然存在。

然后排除变量法,在另一台同样系统及配置的服务器上部署一整套项目包括数据库,同样存在问题。

怀疑JVM配置有问题导致频繁GC导致的运行变慢,经确认几乎没有FGC,YGC也并不频繁。并且修改最大堆内存之后问题依旧。

怀疑JDK版本导致的不明bug,安装了跟本地相同版本JDK以后,问题依旧。

多次重启项目以后发现项目刚启动的时候响应速度正常,运行一分钟左右明显开始变慢。

编写一段测试代码,单纯for循环输出10W个数字,本地运行毫秒级,但是服务器输出却花了将近2分钟,同时观察到运行过程中Java进程本身只占该进程所使用CPU的很小一部分,大部分被控制台所占用(服务器为12核,单核100%就是8%):

记一个有趣的java项目部署到服务器变慢的问题_数据库

 

之后将控制台进程结束,问题解决。

总结:该问题是因为在Windows Server环境下,图形化界面打印的控制台占用大量CPU导致(疑似bug?)。服务刚启动的时候因为控制台内容不多,所以处理速度正常。采用服务方式启动项目或者启动后结束掉控制台进程即可解决。其实在确认CPU内存负载的时候就应该发现这个问题,但是当时脑抽没想到显示的百分比是占12个核,才导致了后续一堆的排查。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3