IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 一次Web服务异常排查 -> 正文阅读

[系统运维]一次Web服务异常排查

前情提要

2021/11/28 23:00(UTC +8) 收到消息有个web服务不可用。
自己Chrome访问了一下,在转圈,尝试SSH登录,登录不上去。
由于没有设置密码登录的账号,无法通过其他手段登录机器(IPMI,GCP串口)。
先重启恢复业务吧(重启大法好!)。

日志排查

syslog

23:41左右重启机器后登录检查日志,发现大量fork: Cannot allocate memory日志,日志时间为UTC。
请添加图片描述

sshd log

同时检查sshd日志,发现同样存在大量fork: Cannot allocate memory

请添加图片描述

fork: Cannot allocate memory

查询fork: Cannot allocate memory这个错误,有两种说法,

一种是机器内存不够

一种是可能是进程数超限导致。系统内部的总进程数达到了 pid_max 时,再创建新进程时会报 “fork:Cannot allocate memory” 错

  • 内存不够

这台机器没有做监控,无法查看历史内存使用状况。不过机器本身配置较高:8核32G,机器上也没有部署什么吃内存的程序。并且没有从日志中有搜索到OOM的日志,我不倾向这个原因。

  • 进程数超限

搜索日志的时候发现了一个supervisor相关的日志,supervisor一直在重启一个进程,这个进程是我已经下线过的进程

请添加图片描述
查看supervisor日志发现,这个进程一直在被重启,因为相关数据库依赖下线,所以进程一直跑不起来。怀疑是这个导致的进程数超限

请添加图片描述

分析

已知问题产生的原因,但是这个原因是怎么直接影响服务的呢?

在查看syslog日志的时候发现dhcp的报错日志
请添加图片描述

dhclient出现fork: Cannot allocate memory的时间与supervisor 最终停止en2joy的时间吻合,

26796 2021-11-28 06:19:06,714 INFO spawnerr: unknown error during fork for 'en2joy': ENOMEM
2021-11-28 06:19:07,747 INFO spawnerr: unknown error during fork for 'en2joy': ENOMEM
2021-11-28 06:19:09,747 INFO spawnerr: unknown error during fork for 'en2joy': ENOMEM
2021-11-28 06:30:14,336 INFO spawnerr: unknown error during fork for 'en2joy': ENOMEM
2021-11-28 06:30:35,690 INFO gave up: en2joy entered FATAL state, too many start retries too quickly

关于dhclient

dhclient是dhcp的客户端,关于dhcp协议的信息可以看这里,Linux上运行的这个客户端用于到DHCP服务器获取ip,日志中11:56到15:43中间明显出现日志断层,推测是DHCP无法创建新进程,导致获取不到ip信息。

测试

这次测试将通过kill掉dhclient进程,看服务器发生什么变化,同时因为服务器ip获取不到,ssh将失效,需要准备其他方式登录机器。

测试准备

将测试域名绑定到测试服务机,添加有密码的账号,并添加root权限,方便在ip出问题的时候能通过GCP的串口登录到机器检查

测试前ip信息

请添加图片描述

80端口

访问80端口,后端程序简单返回。
80端口

测试开始

kill掉dhcilent的进程请添加图片描述

root@localhost:/# kill 691

GCP串口连接到服务器

请添加图片描述

测试结果

由于dhclient每次获取ip的时候都有实效性,在kill掉dhclient进程的时候不会马上失效。
在忙完其他事情的时候回来检查,果然ssh连接掉了。
通过GCP串口登录到机器查看,ipv4已经没有了。

请添加图片描述

这时候访问域名,发现显示超时,这与当时出现问题的时候访问转圈是同样的现象。问题重现!
请添加图片描述

总结

supervisor管理的一个进程被无限重启,进程数超过上限,导致其他服务fork不了进程。

同时dhcp也fork不了进程,机器的ip信息不能更新,也就是没有ip。

这个时候访问域名,解析到ip,又因为这个ip已经跟原来的机器没有绑定了,所以没有响应,直到超时。

ps:

其实结果不够严谨,奈何当时机器没有设置账号密码,GCP串口登录不上去,无法第一时间登录现场查看,并且时间也有限(领导也着急要个结果),只能查个大概了。

比如说supervisor的日志里面显示的ENOMEM,就是内存不够的标志。但是内存不足一般会存在OOM的情况,所有日志排查完了都没有发现有OOM,然后进程被kill的情况。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 18:06:28  更:2021-12-01 18:08:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:30:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码