福布斯全球企业2000强,九阴真经瓜州青,寿县
上周四,服务器突然挂了。ssh都连接不上,日常的小程序后台直接down掉,小程序每日大概3k左右访问量。于是乎就开启了,排查之后。
什么先别说,先把服务恢复再说。重启阿里云服务器,ssh连接。开启nginx,redis,mysql,java服务。一系列操作,先把服务先启动了。
服务器安装了cloudmonitor(云监控),非常建议安装,对排查问题,查看cpu,内存非常的有帮助。
查看cpu,内存如下:
我们先从最后一幅图看起,可以明显的看到9.30左右的时候,网络的流入流出速率立马飙升了。因此初步可以断定,cpu,内存飙升,可能跟网络有关。
9.30分左右的时候,服务器大概运行了以下几个跟网络有关的应用:
很明显前三个是日常的应用,基本上不会有什么问题,首先排除。剩下的就是java相关的服务和docker了。
第一个想法是不是java的访问量突然增大,然后服务器资源不够,然后把服务给打死了。然后去看了java服务的相关日志,发觉9.30分并无异常,跟平常的访问流量无多大变化。故排除。
那么就是docker服务了。
docker我每天会有一个定时任务,用来刷题的。基本上每天九点多就会start,然后11点stop掉。遂查看docker日志:
可以明显的看到9.23分的时候。docker开启,开始刷题。可以断定就是docker的锅了。此时把docker kill掉,定时任务关掉,至此没在出现过问题了。
为确定是否是docker的问题,于是过了几天,我又开启了docker的定时任务。查看服务器资源如下:
问题重新复现出来了,很明显,这就是docker的锅。至于为什么开启docker的这个服务,内存就飙升,cpu飙升,导致服务器直接down掉。这个原因就要问这个image的作者了。
个人初步猜想,内存泄露了。
我们可以仔细观察下内存的图片。约9.30的时候docker服务启动,内存上升至70%左右,这都是非常的合理的。
在大概10点左右的时候,任务跑完了(通过查看日志)。但服务并没有stop。
从10点开始,内存一路飙升,飙升至95%,最终我kill掉了docker,内存回归正常。
这是很明显的内存泄露,因为此镜像为私人镜像,并且不开源,具体代码无从查起,也是没有办法的了。
不过已向改仓库提了issue。
从这次服务器挂掉,有以下几点感想。
这次服务器宕机并没有任何影响,毕竟没啥用户,不过感觉对问题的排查更加深刻了。业务推动技术,这点是毋庸置疑的了。
而且业务上线后,慢慢也会出现很多问题,一个一个解决,也能学习到很多东西。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
网友评论