阿里云 ECS Ubuntu 14.04 无法访问之磁盘 IO 跑满问题排查

1. 现象

服务器 ip 能 ping 通,但部署的两个网站都无法访问,ssh 也连接不上,打开阿里云手机监控看了下,磁盘读 IOPS 达到了 1000 次/秒,并持续了近半个小时,IO 跑满导致无法处理其他任何请求,只能将服务器重启。
PS:DigitalOcean 全固定硬盘,比起来阿里云的普通硬盘速度实在是渣到爆。

2. 排查

查看 syslog,看系统之前的运行情况

Java


1


sudo more /var/log/syslog

发现:

Java


1

2

3


Jan 15 22:32:30 codekk kernel: [792223.870307] Out of memory: Kill process 15506 (java) score 328 or sacrifice child

Jan 15 22:32:30 codekk kernel: [792223.871278] Killed process 15506 (java) total-vm:2006712kB, anon-rss:332960kB, file-rss:0kB

Jan 15 22:32:48 codekk kernel: [792242.290535] AliYunDun invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0

发现在 22:32 分时,系统内存不足,触发了 Linux 内核 Out Of Memory killer 的机制,根据计算选择一个得分最高的进程将其 kill,从上面可以看到,被 kill 的进程号为 15506,这个是 ElasticSearch 的进程(被 kill 时内存占用达到了 50%)。想到之前 ElasticSearch 总是莫名其妙崩溃,算是找到了原因。

至于内存不足为什么最终导致 IO 繁忙的原因尚未找到,初步估计跟 ElasticSearch 被 kill 后,其他几个占内存较大程序相继被 kill,如 nodejs、mysqld、memcached、mongodb,内存缓存、数据库相继失效等有关。

3. 更多排查

运行 top,M 之后,ElasticSearch 和 node 分别占据内存占用排行榜前二。

Java


1

2

3

4

5

6

7

8

9

10

11


PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

9421 codekk 20 0 2000416 270664 5768 S 0.0 26.6 0:48.53 java

1524 codekk 20 0 1138920 164076 3480 S 0.0 16.1 2:49.59 nodejs

849 mysql 20 0 760472 82652 1100 S 0.3 8.1 3:09.70 mysqld

13367 codekk 20 0 1014872 68496 0 S 0.0 6.7 0:00.94 nodejs

973 memcache 20 0 389816 65756 0 S 0.0 6.5 0:45.35 memcached

788 mongodb 20 0 593720 58284 4636 S 0.0 5.7 6:27.31 mongod

8021 trinea 20 0 261200 54720 27444 S 3.7 5.4 1:21.41 php5-fpm

9086 trinea 20 0 238700 41664 26500 S 0.0 4.1 1:08.17 php5-fpm

9085 trinea 20 0 239860 39672 25080 S 0.0 3.9 1:09.73 php5-fpm

872 root 20 0 237760 9528 5568 S 0.0 0.9 0:06.10 php5-fpm

使用 free -h 查看内存使用情况:

Java


1

2

3

4


total used free shared buffers cached

Mem: 992M 907M 84M 32M 4.7M 93M

-/+ buffers/cache: 809M 182M

Swap: 0B 0B 0B

可以发现程序实际使用内存 809M,可用内存 182M,而 IO Cache 为 (907-809)M。

从阿里云手机监控(内存使用率监控图)也可看出,内存使用率基本一直在 80% 左右,白天访问量较多,基本三四个小时就会有一次(ElasticSearch 进程)Full GC 造成的抖动。

ElasticSearch 负责 codeKK 后台搜索,启动参数为 -Xms256m -Xmx1g,可通过添加环境变量 ES_HEAP_SIZE=”128m”,将最低内存设置为 128m,可运行会报错,没办法加内存吧。

时间: 2024-11-03 02:21:55

阿里云 ECS Ubuntu 14.04 无法访问之磁盘 IO 跑满问题排查的相关文章

使用阿里云ECS自动化配置框架对实例的管理员账号进行自定义

1. 实例自动化配置框架 实例自动化配置框架是阿里云ECS为用户提供的一种自定义实例启动行为的架构,详细信息请参考阿里云线上帮助文档:https://help.aliyun.com/knowledge_detail/49121.html   本文档主要介绍怎么通过该框架在创建实例时让用户自己定义实例的管理员用户的方法. 2. 场景 用户想要在阿里云ECS购买时中达到如下的效果: 1) 不使用ECS默认自带的root用户作为管理员(具体用户可在脚本中进行禁止远程登录) 2) 创建一个新的管理员用户

Ubuntu 每日技巧- 自动备份Ubuntu 14.04到Box云存储上

Ubuntu 每日技巧- 自动备份Ubuntu 14.04到Box云存储上 如今你已经升级或者安装了Ubuntu 14.04, 但是还有另外一件保护你的新系统需要做的事情:备份! Ubuntu内置了一个备份工具 Déjà Dup Backup Tool.它允许你备份你的系统并保存在本地或者通过不同的协议保存在远端服务器上. 还有许多其他的工具来备份你的Ubuntu计算机与文件.你可以通过Dropbox 客户端或者其他云服务来自动备份你的重要文档.你也有可能使用UbuntuOne来备份你的机器,但

阿里云ECS Docker Machine Driver入门指南

+++ title = "Aliyun Elastic Compute Service" description = "Aliyun driver for machine" keywords = ["machine, aliyun, driver, ecs"] [menu.main] parent="smn_machine_drivers" +++ Docker Machine Driver of Aliyun ECS Doc

使用Docker Machine管理阿里云ECS

Docker Machine是一个docker管理工具,它解决了docker的两个问题: docker只能运行在Linux上 docker只能管理运行本机的docker镜像. 本质上docker-machine是一个虚拟机管理工具,它通过创建一个安装好docker的虚拟机(支持VirtualBox,DigitalOcean,EC2等),并设置对应的环境变量(DOCKER_HOST,DOCKER_MACHINE_NAME等),使得本地的docker工具获得透明远程操作虚拟机的能力.从而使本身不支持

在阿里云ECS上轻松实现无域控的SQL Server AlwaysOn可用性组

在阿里云ECS上轻松实现无域控的SQL Server AlwaysOn可用性组 前言 SQL Server AlwaysOn功能在SQL Server 2012版本就已经出来了,AlwaysOn 可用性组功能是一个提供替代数据库镜像的企业级方案的高可用性和灾难恢复解决方案,可最大程度地提高一组用户数据库对企业的可用性.从我的角度来看,这个功能提供的是革命性的改变,首先他实现了多个副本并且可读,非常方便实现读写分离方案,比起使用Database Mirroring +Relication实现读写分

1月13日阿里云ECS、SLB和RDS升级公告

ECS升级公告: 尊敬的阿里云用户: 您好,为了更好的优化ECS服务,阿里云ECS服务将于1月13日23:00-06:00进行系统升级,升级期间影响如下: 1)阿里云官网停止售卖云服务器,无法在官网上购买和升级续费云服务器. 2)您无法在ECS控制台和通过ECS API对云服务器做任何操作,包括:创建.释放.启动.停止.重启.重新初始化磁盘,创建快照.回滚快照,重置,创建自定义镜像等,升级期间不影响云服务器正常运行.调用ECS API 以上受影响的操作,统一返回错误码: ServiceUnava

阿里云ECS部署zabbix v3.2.3

阿里云ECS部署zabbix v3.2.3 阿里云ECS部署zabbix 3.2:并接入RDS 关于zabbix及相关服务软件版本: Linux: ECS_CentOS 7.2 nginx: 1.9.15 mysql: RDS或自建MySQL PHP:5.5.35 一.购买ECS & RDS 这里购买ECS和RDS最好买在一个区域,这样RDS就不用申请公网访问地址了,直接添加安装zabbix的ECS_IP白名单就OK了. 如果购买ECS和RDS都不会,那就不用往下看了. 二.安装Nginx 安装

ubuntu 14.04设置Apache虚拟主机的方法

 在这个教程中,我会使用Ubuntu 14.04 32位 LTS,并搭建2个测试网站分别命名为"unixmen1.local" 和 "unixmen2.local".我的测试机分别为192.168.1.250/24和server.unixmen.local.你可以根据你的需要更改虚拟域名. 安装Apache网站服务器 安装apache服务器之前,我们来更新一下我们的Ubuntu服务器: sudo apt-get update然后,用下面命令来安装apache网络服务

阿里云ecs服务器实例如何选择配置?(最详细教程)

阿里云ecs服务器实例如何选择配置? 购买前请先领取阿里云幸运券随机优惠还能百分百中奖小米电源一个!幸运的话中一等奖还能获得iPad mini. 1.阿里云ecs服务器实例地域配置: 计费方式建议选择"包年包月" 2.阿里云ecs服务器实例地域配置: 阿里云节点地区所对应的城市如下: 华北1:青岛 华北2:北京 华北3:张家口 华北5:呼和浩特 华东1:杭州 华东2:上海 华南1:深圳 华北地区:北京,天津,河北,山西,内蒙古. 华东地区:上海,江苏,浙江,山东,安徽. 华南地区:广东