LoginSignup
3
3

More than 5 years have passed since last update.

CloudWatch Monitoring Scriptsを使ったメモリ使用量取得時の注意点

Posted at

Auto Scalingの基準にカスタムスクリプトのメモリ使用量を使う

Amazon CloudWatch Monitoring Scripts for Linux から得られる情報を使って、 Auto Scaling でインスタンスを増減させようと思ったときに、このスクリプトで取得できるメモリ量について少し考えてしまったのでメモを残す。

http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-amazon-cloudwatch-auto-scaling/14
http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts-perl.html

空きメモリとは何か

下記で提供されているスクリプトのコード(mon-put-instance-data.pl)を読んでみると、メモリに関する情報は /proc/meminfo から取得していることがわかる。
また、 MemFree + Cached + Buffers の値が、 Memory Available になることがわかる。このことから、 Cached と Buffers にカウントされているキャッシュは、このスクリプトでは Available な領域と定義されていることがわかる。

  # meminfo values are in kilobytes
  my $mem_total = $meminfo{'MemTotal'} * KILO;
  my $mem_free = $meminfo{'MemFree'} * KILO;
  my $mem_cached = $meminfo{'Cached'} * KILO;
  my $mem_buffers = $meminfo{'Buffers'} * KILO;
  my $mem_avail = $mem_free;
  if (!defined($mem_used_incl_cache_buff)) {
     $mem_avail += $mem_cached + $mem_buffers;
  }
  my $mem_used = $mem_total - $mem_avail;
  my $swap_total = $meminfo{'SwapTotal'} * KILO;
  my $swap_free = $meminfo{'SwapFree'} * KILO;  
  my $swap_used = $swap_total - $swap_free;

  if ($report_mem_util) {
    my $mem_util = 0;
    $mem_util = 100 * $mem_used / $mem_total if ($mem_total > 0);
    add_metric('MemoryUtilization', 'Percent', $mem_util);
  }
  if ($report_mem_used) {
    add_metric('MemoryUsed', $mem_units, $mem_used / $mem_unit_div);
  }
  if ($report_mem_avail) {
    add_metric('MemoryAvailable', $mem_units, $mem_avail / $mem_unit_div);
  }

  if ($report_swap_util) {
    my $swap_util = 0;
    $swap_util = 100 * $swap_used / $swap_total if ($swap_total > 0);
    add_metric('SwapUtilization', 'Percent', $swap_util);
  }
  if ($report_swap_used) {
    add_metric('SwapUsed', $mem_units, $swap_used / $mem_unit_div);
  }

一方、Linux上で運用する dentry cache は上記の Cached + Buffers には含まれない。dentry cache が増えていくと、MemFreeが減っていくのだが、このスクリプトからはそれを知ることができない。Memory Available が減っていても dentry cache が適切に利用されていない場合では、この値を基準にしたAuto Scalingによるインスタンス増減が本当に問題がないか考える必要がある。たとえば下記のような意図しない negative dentry 増大化が発生した場合、このカスタムメトリクスから取得できるMemory Availableでは適切にインスタンスを増減させることができない。

メモリ使用量については、どのように算出されているものか確認してみると良い。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3