阿里面试,一个对你而言很陌生的线上系统启动慢,你会如何排查问题?

2020-07-24 10:11:33 +08:00
 linxiaoziruo

前提是这个系统在测试环境和预发环境都没问题,就线上出问题了。因为已经上线了,所以没有办法加日志,也不能使用调试工具远程连上线上环境测试(比如 jvm 远程断点调试)。你只能远程连上容器操作命令行,并且排查操作不能影响线上系统的性能(比如导致吞吐量明显下降,API 反应明显变慢等)。

8184 次点击
所在节点    Java
41 条回复
yulgang
2020-07-24 10:17:59 +08:00
主机虚拟内存使用情况; netstat 看看 Recv-Q Send-Q 情况,有时候 DNS 反向解析也可能会导致慢或者一部分功能不可用。
wenjian881314
2020-07-24 10:34:00 +08:00
无脑 arthas
gadsavesme
2020-07-24 10:34:04 +08:00
ng 查看下回复时间,排查是否网络原因;是否 io 密集型任务排查下系统 io 情况; cpu 是否高占用,如果高占用具体排查线程,是 gc 线程还是用户线程。数据库是否有慢查询,缓存连接情况,mq 消费是否正常,是否有三方接口响应过慢。大方向具体就想到那么多。
fishofcat
2020-07-24 10:36:17 +08:00
简单呀,找熟悉系统的人排查
TomVista
2020-07-24 10:38:00 +08:00
所以到底出了什么问题,表现是什么? 先问清楚呗,
TomVista
2020-07-24 10:38:28 +08:00
@TomVista 天帝玩家
ChanKc
2020-07-24 10:54:42 +08:00
想到个很有趣的说法,说服务端程序的优化是启动慢没关系,要的是运行时的速度提高。而客户端的优化是启动要快,运行时稍微慢一些也没关系。
面试问这种问题我觉得挺没意思的。在短时间内思考,自然是做过的能答出来,没做过的就答不出来。如果面试被问这个我会觉得对方在“要经验”和“要能力”之间,更倾向于前者
xsirfly
2020-07-24 10:57:06 +08:00
是启动慢还是系统慢,如果只是启动慢,那说明线上没问题呀,加点日志,下次上线时看看启动到底哪里慢;如果是接口慢,那就看看系统负载瓶颈呗,是 cpu 满了,内存不够了还是网卡爆了
swulling
2020-07-24 10:58:26 +08:00
启动慢又不是运行慢,模拟线上环境在线下尝试复现呗。

线上即然已经上线,启动慢就不是问题,先封禁变更放着,没必要在线上 debug 。

如果线下无法复现,就在线上找个实例,从 LB 上把流量摘了,随便打点加日志折腾
pmispig
2020-07-24 11:04:59 +08:00
启动慢再多加一个节点不注册服务不就行了,慢慢调试啊
tusj
2020-07-24 11:08:39 +08:00
先看看启动的日志呗,大致能看到哪里慢,还能怎么着
atonku
2020-07-24 11:09:22 +08:00
重启啊
laike9m
2020-07-24 11:18:21 +08:00
@ChanKc #7 其实我也想问为啥启动慢是个很大的问题。。
est
2020-07-24 11:30:29 +08:00
> 不能使用调试工具远程连上线上环境测试(比如 jvm 远程断点调试)

> 只能远程连上容器操作命令行

只有我一个人觉得这两个设定是矛盾的么。都能 ssh 了。为啥不能上调试工具啊。。
tcfenix
2020-07-24 11:34:06 +08:00
@laike9m
阿里一个应用可能上千台容器,分批估计要分 6 到 8 批,每批又有几个小时的灰度观察时间,真的大型应用发布起来可以说是个体力活,超 1000 台容器的话每次启动总有几个容器会出问题,然后导致不断的重启,重启,启动速度慢能让一个系统发布发的崩溃的

说实话,如果预发环境(这年头谁用测试环境?根本没数据没有依赖服务,有什么东西能测的?)没有问题,那肯定就是线上依赖的上下游系统出问题了,直接在代码里面看依赖了哪些上下游服务,然后点进去看他们有没有发布,基本上就破案了,如果没找到系统发布,那么就查他们配置有没有发布
基本上到这里就没有什么问题了
tcfenix
2020-07-24 11:44:38 +08:00
@est
因为那边就是这样,能 ssh 上机器,但是其他的工具不能用
实际上 arthas 是可以用的,不过看出题人愿不愿意让你用了
p2pCoder
2020-07-24 11:44:45 +08:00
新开一个服务,启动不注册服务,可以做线上 trace,定位是不是单机的问题
除了服务本身的问题,线上 预发 测试的容器规格需要考虑
不同环境下的实例数目需要考虑
同时启动的服务实例数目需要考虑
启动时候依赖的中间件 db 的负载情况 需要了解
lazyfighter
2020-07-24 11:54:55 +08:00
一般经验网络不稳导致连接注册中心等很慢,不过这种情况因为内网可以忽略, 另外都是因为在启动的时候执行了过多的预加载导致的
qiyuey
2020-07-24 12:07:35 +08:00
Arthas
laminux29
2020-07-24 12:27:33 +08:00
先查看各物理设备情况。比如 CPU 、MEM 、CACHE 、DISK 、NET 等等。

如果物理设备没问题,多半就是代码的问题了。

这种题目很坑且无解,因为无论被面试者有多牛逼,这种题目,从不同角度回答,会得到完全相反且极端的评价,一般这种问题,HR 会拿来无脑选人或踢人。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/692719

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX