面试官:线上崩了,说说你是怎么排查线上问题的?Hi你好,我是东东拿铁,一个正在探索个人IP&副业的后端程序员。工作多

不知道你在多年的开发经验中,你的线上服务,有没有遇到过一下情况呢?

所有Java服务的线上问题从系统表象来看归结起来总共有四方面:CPU、内存、磁盘、网络。例如CPU使用率峰值突然飚高、内存溢出(泄露)、磁盘满了、网络流量异常、FullGC等等问题。

先说结论,大部分工程师也许没有全面的性能问题诊断机会,解决线上问题,也没有所谓的银弹。多实践,多学习底层原理,才能让你拥有更丰富的经验。

使用到的工具

系统MacOS14.3

Jprofiler14.0版本

CPU是系统重要的监控指标,能够分析系统的整体运行状况。监控指标一般包括运行队列、CPU使用率和上下文切换等。

top命令显示了各个进程CPU使用情况,一般CPU使用率从高到低排序展示输出。其中LoadAverage显示最近1分钟、5分钟和15分钟的系统平均负载,上图各值为0.11,0.08,0.05

关于线上的CPU问题,常见的问题有以下三种

往往都是业务逻辑问题导致的,比如死循环、频繁gc或者上下文切换过多。

线上问题排查,为了能够保持现场情况,一般我们直接登陆机器,使用命令行进行排查。

当然,为了方便你更好的理解,我也提供了一个简单的示例代码,如下所示。

publicclassCpuTests{publicstaticvoidbusyThread(){Threadthread=newThread(()->{while(true){}},"*busyThread");thread.start();}publicstaticvoidlockThread(Objectlock){Threadthread=newThread(()->{synchronized(lock){try{lock.wait();}catch(InterruptedExceptione){e.printStackTrace();}}},"lockThread");thread.start();}publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(System.in));bufferedReader.readLine();busyThread();bufferedReader.readLine();lockThread(newObject());}}命令行排查我们使用top-H-ppid

来找到cpu使用率比较高的一些线程

占用率最高的线程ID为1586480,将其转换为16进制形式(因为javanative线程以16进制形式输出)

printf'%x\n'1586480

pid得到nid

接着直接在jstack中找到相应的堆栈信息

jstackpid|grep'nid'-C5

注:因为我本地环境是MacOs,且我们上面的例子比较简单,我们直接使用jstack也可以看到线程情况

当然,也可以使用工具,直接可视化的查看线程情况

通过Jprofiler的cpu负载,我们可以看到cpu负载一直巨高不下,如果排除了流量上涨的可能性,那就需要排查代码存在的问题。

当然,CPU问题,远远不是我上文例子这么简单,我们也仅仅介绍了最初级的问题排查思路。

也有许多的工具,适合不同场景下的问题排查思路,比如:

多种工具结合,逐步缩小问题范围,才是真正解决问题的处理方法,当然,更多的工具留给你自己去做尝试了。

线上内存,常见的有下面三类问题

新生代(Young)与老年代(Old)的比例的值为1:2(该值可以通过参数–XX:NewRatio来指定)

什么是内存溢出

当程序需要申请内存的时候,由于没有足够的内存,此时就会抛出OutOfMemoryError,这就是内存溢出。

下面我们来看一个例子

线上OOM问题排查,我们有两种方式

-XX:+HeapDumpOnOutOfMemoryError

通过Jprofiler,打开dump文件

内存泄漏指程序运行过程中分配内存给临时变量,用完之后却没有被GC回收,始终占着内存,即不能使用也不能分配给其他程序,就叫做内存泄漏(也就是相当于占着内存却不能被管理到造成内存的浪费)

内存泄漏短期内或者说轻微的不会有太大的影响,但内存泄漏堆积起来后却会很严重,会一直占用掉可用的内存,从而出现内存溢出的现象。

常见问题

排查思路可以参照上面内存溢出的情况,排查大对象即可。

关于垃圾回收,常见问题主要有两点

我们的调优目标,自然也是围绕这两个来

排查垃圾回收问题,启动服务时一定要加上如下四个参数

主要工具jstat,如下命令就是监控gc情况,每秒采样一次,采样10次

jstat-gc44017100010

为了方便大家看到区别,我手动出发了一次fullgc,大家也可以明显看到,FGC从0变为了1。

S0C/S1C、S0U/S1U、EC/EU、OC/OU、MC/MU分别代表两个Survivor区、Eden区、老年代、元数据区的容量和使用量。YGC/YGT、FGC/FGCT、GCT则代表YoungGc、FullGc的耗时和次数以及总耗时。如果看到gc比较频繁,再针对gc方面做进一步分析。

tcp队列溢出

netstat-s|egrep"listen|LISTEN"

使用telnetip/域名端口号来查看网络是否连接

如果出现下图内容,则证明网络已经连接

关于本文给出的例子,你一定要实践一遍,都非常的简单,亲自去使用文中提到的工具,只有实践了,你才是真正入门了。

在一些比较简单的业务场景下,排查系统性能问题相对来说简单,且容易找到具体原因。但在一些复杂的业务场景下,比如开源框架下的源码问题,相对来说就很难排查了,有时候通过工具只能猜测到可能是某些地方出现了问题,而实际排查则要结合源码做具体分析。

线上问题排查可以说没有捷径,排查线上的性能问题本身就不是一件很简单的事情,除了将今天介绍的这些工具融会贯通,还需要我们不断地去累积经验,才能够快速成长。

THE END
1.推荐11个兼职副业好项目,手机电脑都能做,让你在家就能捞外快~淘宝网店客服需求大得很,特别是淘宝。你可以根据自己的时间选择工作时间段,每小时能赚个10到15块。晚上有空的话,这个副业挺不错的。 7,斗米招聘——兼职好帮手 斗米招聘是58同城旗下的,每天能赚个200到300块,大学生和打工族都很适合。 8,牛片——视频编辑也能赚钱 https://www.163.com/dy/article/JEB9U3U005562HPE.html
2.普通人还有机会的10个线上副业(建议收藏)特别是疫情以后,大家都开始形成一种“焦虑”,如果我失业了该怎么办?但是大部分人,无法将主业拓展到副业上,又没有具体赚钱的技能,难道只能做“微商”吗? 其实线上副业还有不少,普通人也可以尝试一下。学习时间拉长,复利收益会更高,说不定能成为主业。这样的副业既不用“拉熟人生意”,又能长久下去,可以收藏起来哦http://www.zhixing98.com/11244.html
3.线上可以做的副业兼职(热门兼职副业)线上可以做的副业兼职(热门兼职副业) 作为一个普通人,大家都想尽办法赚钱。为了能够提高生活水平和质量,为了给家人提供更好的生活条件,大家都在想方设法的通过各种渠道和途径赚钱。 有人为了赚钱,选择了去创业。但是创作的风险性很高,而且还需要投入大量的时间、精力和金钱。一旦失败的话,就会让生活陷入困境。为了http://www.52thing.com/8467.html
4.网上兼职做什么比较靠谱?日结的6种线上副业日结的6种线上副业 离职之后,我就一直在尝试各种在家可做的工作,寄希望于,不上班也能养活自己。 虽然没有达到完全财务自由、悠然自得的理想状态,但也能养活自己。 今天来跟大家分享几个,不去上班,居家就可以做的小项目,适合社恐不愿意参与职场的小伙伴,还有要兼顾家庭的宝妈。https://www.jianshu.com/p/2e90a71f8724
5.适合上班族的副业兼职工作下面,小编整理推荐了10个可以线上做的兼职副业,想趁下班时间线上赚点钱的小伙伴们,可以看一下哦。 1、自媒体 自媒体是一个非常受欢迎的兼职副业,不仅因为它的收益高,还有时间也比较自由。作为上班族的夜间兼职还是很合适的,找到一条适合自己的赛道,利用晚上的8点到12点,创作一些作品发布,一个月下来能有不少收益https://uuwangluo.cn/120055.html
6.整理17个在家做的在线兼职副业平台,电脑做的线上兼职分享给大家3,淘宝客(网上兼职副业) 淘宝客是淘宝联盟推出的一种推广方式,允许用户通过分享商品链接获取佣金。无论是通过社交媒体还是个人网站进行推广,只要有人通过你的链接购买商品,你就能获得一定的佣金回报。 4,蚂蚁兼职(线上兼职平台) 蚂蚁兼职是一个提供各类兼职信息的平台,涵盖了家教、设计、翻译等多种技能服务。用户可以根https://www.haomeiwen.com/subject/hqbqkjtx.html
7.下班后有什么可以做的副业?分享几个靠谱线上和线下副业分享几个靠谱线上和线下副业 工作之余,做副业不仅可以增加收入,还有助于提高技能以及开拓人际关系。以下是几种可以尝试的副业,每一种都有其独特的优势和挑战。 一、代理销售:找到适合自己的代理销售产品,比如化妆品、保健品、服装等。可以通过社交媒体、微信等方式推销产品,这一过程也是增长人脉、提高销售技能的好https://blog.csdn.net/m0_61298568/article/details/129807700
8.闲时做就能月入一两千的线上兼职副业平台闲时做做才能月入一两千的线上兼职副业平台,你晓得几个呢?现在我会率领你们揭秘11个正规可靠的线上兼职副业平台,适于师生党、宝妈、上班族和各类有业余时间的你,看完认为对你有帮助,记得收藏、转给女子伴们哦。 一、一淘网(线上兼职副业平台) 一淘网创立于2010年,作为阿里巴巴企业集团的全球购物搜索引擎,平台主要https://www.xspzq.com/post/4265.html
9.推荐几个靠谱的副业,宝妈上班族一部手机就能线上兼职赚钱很多宝妈生完孩子之后,一心扑在孩子和家庭身上,没有工作没有收入,和社会越来越脱节,经济状况不佳,手心向上要钱的日子真不好过啊!如果可以通过兼职赚钱,既可以贴补家用,还能一定程度上缓解经济压力。根据笔者亲身经历,整理推荐几个靠谱的兼职副业,一部手机就可以在家赚钱。 https://www.022999.com/rmzx/545.html
10.最适合普通人做的月入3千的副业—线上辅导老师英专生从读研开始就在上发帖子找学生线上补习英语,也许是前几年经济形式更好,大家都愿意知识付费,期间学生一直不断,辅导过的学生有上海英语春考/专升本/四六级考研英语/雅思阅读等。 其中一次是给一位已经毕业工作准备考研二战的音乐老师补习考研英语二,当时是一周三次课程,那位老师晚上下班回宿舍后上课,三个多https://www.douban.com/group/topic/302407744/
11.线上APP拉新项目,副业0如果你还没找到合适的副业项目,可以试试线上APP拉新,毫不夸张的说,真的是可以从一部手机就能开始的副业,而且几乎0成本,天花板还很高的副业。 接下来我会将我从0-1的操作过程尽量保姆级的输出,文章末尾有我对于线上拉新的思维拓展,欢迎看完一起碰撞。 https://www.taokeshow.com/43732.html
12.线上兼职一单一结(推荐2款在线兼职软件app)以上就是副业网分享关于线上兼职一单一结全部内容,不论是趣线赚还是爱钱试玩都可以说是比较靠谱在线兼职软件app,全都免费操作,当天做当天结算,只要你肯用心去做,一天赚50元以上还是很轻松,特别对于现在年轻人,手机娱乐的同时还能兼职创造出更多价值,是一个不错选择,行动起来吧!https://www.youdianhuo.com/fuye/post/1077.html
13.如何通过线上培训帮助用户挖掘内在势能,实现知识变现?尽管市面上有许多教别人做副业的课程,它们更多会关注当下的红利或热点,或者教授特定的技能。而我们的课程并不是教大家做特定类型的副业,而是引导大家发掘自己内心真正的热爱,整合自己拥有的资源,由内而外地做自己喜欢的事情并赚到钱。 只有这样,大家的内驱力才是最足的。 https://www.xiaoe-tech.com/extendRead/1489.html
14.退休母亲花了1680元线上培训费,成为短视频博主后1680元的培训费,59岁的赵今在手机上点击转账前还忍不住换算,如果是某保健品,“能吃几瓶”。 转账后,她和负责视频号培训的老师灵灵在微信上“交心”:“我是瞒着女儿的,就是要做出点样子给女儿瞧瞧!”为了给自己的线上副业正名,她要求对方开具正式发票,并强调“不是收据”。 https://www.jfdaily.com/staticsg/res/html/web/newsDetail.html?id=719841&sid=11
15.手机兼职赚钱平台一单一结(十大线上免费兼职一单一结推荐)手机兼职赚钱平台一单一结有哪些?随着移动互联的快速发展,手机兼职成为当下副业的首选项目,但是现在手机能做的兼职有很多,而一单一结的会更受大众的喜爱,小编在这整理了十大线上免费兼职一单一结的平台推荐给大家,都是零投入免费参与,不仅任务量充足,而且佣金也是比较高,如果你手头上没有比较好的兼职项目,不妨参考http://www.17zhuan.net/special/491.html