Ubuntu 12.04 Amazon EC2 Small实例上的高CPU使用率

时间:2014-05-14 05:20:15

标签: linux amazon-ec2 ubuntu-12.04 cpu-usage

我正在使用Ubuntu 12.04 LTS在Amazon EC2上运行一个小实例。 我还在实例上设置了Cloudwatch Alarm。

问题是CPU利用率有时会超过90%,我会收到通知警报。 我在每分钟运行的实例上设置了一个cronjob,并根据日志文件中最高的CPU使用率存储前3个正在运行的进程。 Cronjob如下。

* * * * * ps -eo pcpu,pid,args --no-headers | sort -n -r | head -3 | perl -pe 'print scalar(localtime()), " ";' >> ps_log/log

但是当我在cron log上运行此命令时,我看不到任何具有高CPU使用率的进程。

cat ps_log/log | sort -k 6 -n -r | head -10

以下是cron log的最新结果。

Tue May 13 17:44:01 2014 17.1 10171 /opt/lampp/bin/httpd -k start -DSSL -DPHP5 -E /opt/lampp/logs/error_log
Tue May 13 18:06:01 2014 15.1 10502 /opt/lampp/bin/httpd -k start -DSSL -DPHP5 -E /opt/lampp/logs/error_log
Tue May 13 13:28:01 2014 14.7  6526 /opt/lampp/bin/httpd -k start -DSSL -DPHP5 -E /opt/lampp/logs/error_log
Tue May 13 09:56:01 2014 12.4  3277 /opt/lampp/bin/httpd -k start -DSSL -DPHP5 -E /opt/lampp/logs/error_log
Tue May 13 18:06:01 2014 11.4 10508 /opt/lampp/bin/httpd -k start -DSSL -DPHP5 -E /opt/lampp/logs/error_log
Wed May 14 02:32:36 2014 11.0 16936 ps -eo pcpu,pid,args --no-headers
Tue May 13 13:32:01 2014 10.3  6619 /opt/lampp/bin/httpd -k start -DSSL -DPHP5 -E /opt/lampp/logs/error_log
Tue May 13 18:06:01 2014 10.2 10501 /opt/lampp/bin/httpd -k start -DSSL -DPHP5 -E /opt/lampp/logs/error_log
Tue May 13 11:08:01 2014  9.6  4802 /opt/lampp/bin/httpd -k start -DSSL -DPHP5 -E /opt/lampp/logs/error_log
Wed May 14 02:58:07 2014  8.5 17268 ps -eo pcpu,pid,args --no-headers

我可以显示两个警报结果和警报通知发出的cronlog结果。

  • 状态更改原因:阈值已交叉:1个数据点(96.72)大于或等于阈值(80.0)。
  • 时间戳:2014年5月13日星期二15:42:09 UTC

Cronlog:

Tue May 13 15:39:20 2014  2.0  8481 perl -pe print scalar(localtime()), " ";
Tue May 13 15:39:20 2014  1.6  8478 ps -eo pcpu,pid,args --no-headers
Tue May 13 15:39:20 2014  1.2  8004 /opt/lampp/bin/httpd -k start -DSSL -DPHP5 -E /opt/lampp/logs/error_log
Tue May 13 15:41:08 2014  1.7  8527 /opt/lampp/sbin/mysqld --basedir=/opt/lampp --datadir=/opt/lampp/var/mysql --plugin-dir=/opt/lampp/lib/mysql/plugin --user=nobody --log-error=/opt/lampp/var/mysql/ip-10-178-52-49.err --pid-file=/opt/lampp/var/mysql/ip-10-178-52-49.pid --socket=/opt/lampp/var/mysql/mysql.sock --port=3306
Tue May 13 15:41:08 2014  1.5  8547 ps -eo pcpu,pid,args --no-headers
Tue May 13 15:41:08 2014  0.9  8003 [httpd] <defunct>
Tue May 13 15:43:01 2014  6.0  8578 sort -n -r
Tue May 13 15:43:15 2014  5.0  8577 ps -eo pcpu,pid,args --no-headers
Tue May 13 15:43:24 2014  3.3  8579 head -3
Tue May 13 15:44:21 2014  1.2  8527 /opt/lampp/sbin/mysqld --basedir=/opt/lampp --datadir=/opt/lampp/var/mysql --plugin-dir=/opt/lampp/lib/mysql/plugin --user=nobody --log-error=/opt/lampp/var/mysql/ip-10-178-52-49.err --pid-file=/opt/lampp/var/mysql/ip-10-178-52-49.pid --socket=/opt/lampp/var/mysql/mysql.sock --port=3306
  • 状态更改原因:阈值已交叉:1个数据点(96.72)大于或等于阈值(80.0)。
  • 时间戳:2014年5月13日星期二15:42:09 UTC

CRONLOG:

Tue May 13 15:39:20 2014  2.0  8481 perl -pe print scalar(localtime()), " ";
Tue May 13 15:39:20 2014  1.6  8478 ps -eo pcpu,pid,args --no-headers
Tue May 13 15:39:20 2014  1.2  8004 /opt/lampp/bin/httpd -k start -DSSL -DPHP5 -E /opt/lampp/logs/error_log
Tue May 13 15:41:08 2014  1.7  8527 /opt/lampp/sbin/mysqld --basedir=/opt/lampp --datadir=/opt/lampp/var/mysql --plugin-dir=/opt/lampp/lib/mysql/plugin --user=nobody --log-error=/opt/lampp/var/mysql/ip-10-178-52-49.err --pid-file=/opt/lampp/var/mysql/ip-10-178-52-49.pid --socket=/opt/lampp/var/mysql/mysql.sock --port=3306
Tue May 13 15:41:08 2014  1.5  8547 ps -eo pcpu,pid,args --no-headers
Tue May 13 15:41:08 2014  0.9  8003 [httpd] <defunct>
Tue May 13 15:43:01 2014  6.0  8578 sort -n -r
Tue May 13 15:43:15 2014  5.0  8577 ps -eo pcpu,pid,args --no-headers
Tue May 13 15:43:24 2014  3.3  8579 head -3
Tue May 13 15:44:21 2014  1.2  8527 /opt/lampp/sbin/mysqld --basedir=/opt/lampp --datadir=/opt/lampp/var/mysql --plugin-dir=/opt/lampp/lib/mysql/plugin --user=nobody --log-error=/opt/lampp/var/mysql/ip-10-178-52-49.err --pid-file=/opt/lampp/var/mysql/ip-10-178-52-49.pid --socket=/opt/lampp/var/mysql/mysql.sock --port=3306
Tue May 13 15:44:21 2014  0.7  8569 CRON
Tue May 13 15:44:21 2014  0.7  8501 /opt/lampp/bin/httpd -k start -DSSL -DPHP5 -E /opt/lampp/logs/error_log
Tue May 13 15:44:21 2014  1.2  8527 /opt/lampp/sbin/mysqld --basedir=/opt/lampp --datadir=/opt/lampp/var/mysql --plugin-dir=/opt/lampp/lib/mysql/plugin --user=nobody --log-error=/opt/lampp/var/mysql/ip-10-178-52-49.err --pid-file=/opt/lampp/var/mysql/ip-10-178-52-49.pid --socket=/opt/lampp/var/mysql/mysql.sock --port=3306
Tue May 13 15:44:21 2014  0.7  8569 CRON

现在有什么方法可以捕获高CPU使用率的进程吗?网站托管在流量非常低的实例上。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

有几件事:

  1. 您可能会看到在Linux上报告的cpu使用率之间断开连接 虚拟机以及亚马逊报告的真实CPU使用情况。注意 后者是正确的。通过ps和top监控CPU使用情况统计数据 不可靠,这里有一个很好的解释:

    http://www.axibase.com/cloud/2010/07/22/ec2-monitoring-the-case-of-stolen-cpu/

  2. 无论top和ps命令的准确性如何,都有 导致cpu飙升。 Ps和top至少应该告诉你哪些进程使用最多。而不是每分钟调用ps一次 错过了违规的过程,为什么不在bash的循环中运行它 循环时间短的脚本(每10秒钟一次)?重定向它 到一个日志文件,你应该能够找到一个ps或顶级条目 在闹钟的几秒钟内。像这样:

    while :
    do
      date
      echo
      ps -eo pcpu,pid,args --no-headers
      echo
      top -c -b -n 1
      echo
      sleep 10
    done