如何分析线上环境运行中的问题进程

背景

在项目中,经常会遇到业务进程不按照自己的预期去执行,比如有时候进程内部突然卡死,但进程本身扔处于存活状态;进程所消耗的cpu和内存很高,但是此时从访问日志和请求量来看并不是很繁忙。当这些问题在线上发生的时候,有些同学就喜欢慌里慌张去重启进程,重启好了,业务恢复后也不去深究原因,导致无法从根本上解决问题。当我们碰到此情况时,一般是先把有问题的机器从线上的流量里隔离出来,然后对该进程进行分析,下面我主要针对以上场景聊聊我们怎么去分析和定位问题。

一个php进程僵死的案例

现象描述:一个后台运行的worker进程,某一天突然发现程序没有按照预期的方向执行,而是假死在那里

分析步骤:

Step 1 运行 strace -p 进程号,跟踪进程的执行状态:

poll([{fd=6, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)

poll([{fd=6, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)

poll([{fd=6, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) 

发现进程是阻塞在poll调用上,然后进一步分析,该poll调用对应的业务是啥?

Step 分析对应的文件描述符

lsof -d 6 | grep 30817

php 30817 root 6u IPv4 1020151173 0t0 TCP 10.229.137.42:43402->141.215.141.70:http (ESTABLISHED)

发现是一个http调用卡在那里,然后我们再分析下程序里面调用141.215.141.70这个ip地址的地方,即可定位的有问题代码的位置

一个Go进程的僵死案例

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • epoll概述 epoll是linux中IO多路复用的一种机制,I/O多路复用就是通过一种机制,一个进程可以监视多...
    发仔很忙阅读 10,971评论 4 35
  • 常用操作以及概念 求助 –help 指令的基本用法与选项介绍。 man man 是 manual 的缩写,将指令的...
    Fellers阅读 459评论 0 3
  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 3,588评论 0 5
  • 本文摘抄自linux基础编程 IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作。那么我们对与外部设...
    VD2012阅读 1,026评论 0 2
  • 坚持学习分享第144天,2017年12月8号日,星期五,星期天回到家了,感到了家的温暖,上有母亲贴心的问候,还有孩...
    奇峰_5114阅读 348评论 0 1