Skip to content
Mo's Blog
Go back

Amazon Lightsail 实例服务异常诊断

AWS, Lightsail, Linux, 运维

最近使用 Amazon Lightsail 部署了一个web服务,但它经常会断联,甚至ssh也无法登陆。推测应该是某个性能尖峰时刻把系统资源打爆了。下面记录一下排查和处理方法。 由于购买的是最小规格实例,所以一开始就先创建了 swapfile ,避免瞬时内存暴涨导致系统失效。不过,在这个环节有一些疏忽,导致后来运行过程中实际没有生效。具体原因后面再谈,先看看遇到的状况:

  1. 首先是访问 web 服务一直提示 timeout;
  2. 使用 ssh 连接也无法连通;
  3. 使用 Amazon 自己的 console 也无法连入 ssh。虽然在 console 中,实例状态仍然是 running ,但这只是说明了实例本身的虚拟机进程还在,无法说明虚拟机内部服务仍然正常;

诊断过程

第一步排查先看了CPU利用情况

CPU_utility.png

可以看到,虽然存在一些尖峰,但未超过100%,基本可以排除 CPU 被打爆导致的异常

第二步看 status check 下的几个图表(status check failures、instance status check failures、system status check failures)

status_check_failures.pnginstance_status_check_failures.png system_status_check_failures.png

可以看到,System status check failures 中没有异常,但其余两者都出现了问题。

那么基本可以大胆猜测,是我自己部署的服务出现了问题,拖垮了系统资源。现在应该考虑重启一下,再用 journalctl 查看我的服务日志了。 这里一定要直接点击 console 里的 reboot ,可以保证 ip 不变。

重启后,ssh 服务恢复,进入后运行 sudo journalctl -b -1 -p err..alert journalctl_err_log.png

ummm 问题清晰地出现在眼前,真的 OOM 了。进一步看看内存占用和 swap 情况: free命令截图.png

wait…为啥 swap total 0B ?我 swapfile 呢? 回顾了 command history 后意识到一个问题,因为没把它加入到 fstab 中,所以一重启就失效了。。。

一定要记得 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

常用命令

最后列一些运维常用命令

uptime

用法:直接 uptime 输出:02:33:33 up 1:00, 1 user, load average: 0.02, 0.05, 0.02 02:33:33 表示当前服务器的时间 up 1:00 表示已经运行1小时 load average: 0.02, 0.05, 0.02 分别表示过去1、5、15分钟的 CPU 负载 要注意,负载需要结合 CPU 核心数看。如果只有 1 核,1.0 就是满载。如果 2 核,2.0 才是满载

free

查看内存和 swap 使用情况 一般用 free -h ,改换单位,输出成人类更可读的格式

df

查看硬盘使用情况,和free类似,一般用 df -h

top

用法:top -o %CPU -o %CPU 的意思是按 CPU占用率排序 同理,可以用 top -o %MEM 按内存占用率排序

journalctl

重要的服务日志查看工具,可以查看 systemd 收集的日志

-p 显示 erralert 级别的日志,包括:

--since "24 hours ago" 只看最近24小时的日志 -k 仅查看内核日志 -b -1 上一次启动周期

dmesg

环形缓冲区日志,主要记录了 内核 输出的信息 环形的意思是存储区域循环使用,类似于行车记录仪滚动删除

dmesg 默认的计时使用启动后秒数。加 -T 参数可以转换成实际时间 一般配合 egrep 过滤输出,比如不区分大小写滤除特定关键词的日志,可以这样用: sudo dmesg -T | egrep -i 'oom|killed process|error|ext4'

它一般只能保存本次启动以来的日志,之前的日志应该使用 journalctl 查看


Share this post on:

Next Post
大模型思考的快与慢