AWS ec2实例高CPU使用率

时间:2015-09-07 09:48:00

标签: mysql amazon-web-services amazon-ec2

我们有一个ec2实例平均使用率约为10%。有时我们会得到大约95%的峰值 - 我们有一个触发警报,因此我们可以检查日志。我检查了日志,看起来好像另一家公司拥有的网站多次抓取我们的网站导致高峰值,这引发了一个不再生产的PHP脚本的mysql错误。这是一个网站突然出现服务器的常态吗?

3 个答案:

答案 0 :(得分:3)

  • 如果网址中有任何模式,您可以使用haproxy服务器以避免不必要的请求。随着时间的推移不断更新。
  • 当网址不匹配时,始终有404错误页面,并且不会重定向到主页,因为它会减少服务器上的负载。如果您的主页非常轻且没有太多数据查询,则可以忽略此项。

检查负载增加用户数,每个新请求跟踪cpu利用率如何上升。

您无法完全避免不需要的请求,但可能会将其降低到某种程度。

一旦微观实例达到100%或接近100%,它也会观察到微观实例的行为。即使没有进一步的请求,也需要几秒钟才能回来。 如果您有时会遇到不需要的流量,那么微型实例可能不适合生产。

关于你的错误,可能是由于缺少可用的ram而mysql进入死锁状态或类似的东西。 我稍后会进一步更新。

答案 1 :(得分:1)

当网站的公共网址在google / bing或任何其他僵尸网站上注册时,人们通常会遇到这种情况,并且机器人会在一两天内抓取每个网址一次,从而导致该时间段的CPU利用率过高这是正常的。我之前也遇到过这个问题。如果它来自谷歌机器人,您可以从那里删除或取消注册,对于其他网站,您将需要找出任何自定义解决方案。

答案 2 :(得分:1)

当然,网络请求的峰值可能会增加CPU利用率,如果网络负载足够大,它肯定会导致CPU达到峰值。

关于PHP脚本中的MySQL错误,这可能是因为您的数据库无法处理更多连接,并且在脚本中连接到您的数据库失败。如果您记录错误,则应查看错误的详细信息。如果您没有记录错误,则应该开始这样做。

要验证此网络峰值导致此CPU峰值达到100%,请使用CloudWatch - 它是您的朋友。打开您的实例的NetworkIn和CPU利用率图表,确保您正在查看“最大值”图表。统计。比较图表并观察网络峰值是否反映在CPU峰值中。

如果您从不需要的来源接收流量,请使用网络ACLS(NACLS)阻止其IP:
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html

如果您经常在此实例上遇到高流量,则应考虑转向Auto Scaling。使用Auto Scaling,您可以通过ELB为多个节点提供服务。 Web请求将发送到您的域名,该域名由ELB捕获,然后转发到Auto Scaling组中的节点。借助Auto Scaling,您可以使用CloudWatch警报来允许您的基础架构动态扩展。例如。当我的服务器的平均CPU利用率达到70%时,启动一个额外的服务器来分散负载。
http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/WhatIsAutoScaling.html

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elastic-load-balancing.html

以下是有关如何实现此架构的精彩教程:
http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as-register-lbs-with-asg.html

但是对你的问题做一个简单的回答,是的,网络出现大幅增长会导致你的实例的CPU过载,这是正常的。