[AWS][Ubuntu] microインスタンスのCPU制限を行う方法

Read More
1__root_dev003___home_test__ssh_.png

AWSのt1.microのCPUがStealする話。

色々散々出てきているので既知の話だと思いますが cgroup するのがRedhat経の話ばかりでUbuntuのやり方が出ていなかったのでその二番煎じの記事です。

なので環境はUbuntuで実施しています。

1) install cgroup-bin

sudo apt-get install cgroup-bin

2) Reboot.

リブートすると /sys/fs/cgroup ができていると思います。再起動しなくてもできている?

3) Edit /etc/cgconfig.conf

このファイルは存在しないので1から作ります。制限をかけるのがユーザが別なのかRootユーザなのかで変わってくると思いますが。

group limit {
    cpu {
        cpu.cfs_quota_us = 250000;
        cpu.cfs_period_us = 1000000;
    }
    cpuacct { 
    }
}

その後

cgconfigparser -l /etc/cgconfig.conf

を実行。これを実行しておかないと [cgroup change of group failed]というエラーが表示されました。

4) Run Process.

cgexec -g cpu:limit perl ./test1.pl &

上記は適宜読み替えて下さい。

1 root dev003 home test ssh

画像ではあえて2つのユーザでPerを実行していますが25%,25%づつになっているのがわかります。(このサーバはt1.microではないのでstealは発生していません)

起動時には cgconfig.conf を読み込んでくれません。cgconfigpaserを実行した後に cpu/limit のディレクトリが作成されます。ubuntuのパッケージは自動起動用のツールが用意されていませんので気をつけます。

5) 実際に使ってみる

muninのサーバを動かした場合には、ユーザが munin となるため /etc/cgconfig は以下のように記述します。 /sys/fs/cgroup/cpu/limit の権限に実行するユーザの権限が必要になります。

group limit {
 perm {
    admin {
        uid = munin;
    }
    task {
        uid = munin;
    }
 }
 cpu {
   cpu.cfs_quota_us = 250000;
   cpu.cfs_period_us = 1000000;
 }
 cpuacct {
 }
}

なので上記のように定義しておきます。この状態で cgconfigparserを実行すると

[email protected]:/var/log/munin$ ls -l /sys/fs/cgroup/cpu/
drwxr-xr-x 2 munin root 0 Mar 17 14:47 limit

上記のように limit ディレクトリの所有者が munin に変更されます。こうなっているとmuninユーザでもcgexecが実行できるようになります。
その後はCronから起動される munin-cron の中で実行しているコマンドに cgexec を付与することで有効になります。

1 root ip 172 16 1 133 etc cron d ssh

起動設定については /etc/init.d/munin のStartの部分にcgconfigparserを追加

case "$1" in
  start|restart|force-reload)
    # Create various dirs
    /usr/sbin/cgconfigparser -l /etc/cgconfig.conf
    mkdir -p /var/run/munin && chown munin /var/run/munin
    exit $?
    ;;
  stop)

ちなみにSteal中はこんな感じに燃え上がる。

NewImage

変更実施後は

NewImage

このように赤い(Steal)がなくなっているのがわかる、これにともなって以下のようにLoadやDevice Latencyも同様に改善されているのが分かります。

NewImage

NewImage

[AWS] AWS Linux のcliで 「unknown locale: UTF-8」のエラーが出る場合

AWS上のAWS Linuxのマシンテンプレートだと環境変数が LC_CTYPEがUTF-8になっています。この状態だと aws cli などのツールでエラーが表示されます。

$ aws
Traceback (most recent call last):
File "/usr/bin/aws", line 15, in <module>
import awscli.clidriver
File "/usr/lib/python2.6/site-packages/awscli/clidriver.py", line 31, in <module>
from awscli.help import ProviderHelpCommand
File "/usr/lib/python2.6/site-packages/awscli/help.py", line 20, in <module>
from docutils.core import publish_string
File "/usr/lib/python2.6/site-packages/docutils/core.py", line 20, in <module>
from docutils import frontend, io, utils, readers, writers
File "/usr/lib/python2.6/site-packages/docutils/frontend.py", line 41, in <module>
import docutils.utils
File "/usr/lib/python2.6/site-packages/docutils/utils/__init__.py", line 20, in <module>
import docutils.io
File "/usr/lib/python2.6/site-packages/docutils/io.py", line 18, in <module>
from docutils.utils.error_reporting import locale_encoding, ErrorString, ErrorOutput
File "/usr/lib/python2.6/site-packages/docutils/utils/error_reporting.py", line 46, in <module>
locale_encoding = locale.getlocale()[1] or locale.getdefaultlocale()[1]
File "/usr/lib64/python2.6/locale.py", line 478, in getdefaultlocale
return _parse_localename(localename)
File "/usr/lib64/python2.6/locale.py", line 410, in _parse_localename
raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8

期待されるのは ja_JP.UTF-8 のような形式なので

$ export LC_ALL='ja_JP.UTF-8'

で定義するとエラーが出なくなります。

SSHの秘密鍵が登録できるiTerminalでAWSを操作する

Read More

出先で普段のパソコンとかがない時にどうしてもログインしたくなる時ってありますよね?

ログインってもちろんsshとかで

で、以前は「TouchTerm」というのを使っていたのですがsshで接続するためのキーファイルを持ち込みできなかったです。アプリ内で作ることはできるから事情が合えば問題ないのですがAWSとかは少し不便かもしれません。

iTerminal Pro – SSH/Telnet ツール
カテゴリ: ユーティリティ
価格: ¥500

探してみるとiTerminal というのがあったのでこれを使い始めました。これは秘密鍵を登録できるので便利です。登録も何かからImportするのではなくてテキスト貼り付けでできるので楽ちんです。

逆にこっちはキーを生成は出来ないので用途によっては一長一短かもしれません。

20140131-090005.jpg

使い勝手としては普通に使えるって感じですかね。設定は細かくできないので残念ですがとりあえずの時には問題なさそうです。日本語についてもutf8であれば問題なく表示することができます。素晴らしい。

20140131-090450.jpg

こんな感じで設定することができます。あらかじめ幾つかのサイトについては用意しておきたいところですがこのアプリ自体にロックの機能がないので登録はご計画的に!

[aws] ec2 t1.micro でスワップを作る

Read More
5694f8038f176c6e82efb3d4d1209695.png

昨日からこのサイト(roguer.info)をAWS上に移動していたのだけどお金もないので当然t1.microで行くかと思って適当にゴニョゴニョしていました。

で帰りにふとサイトにつなげてみるとうんともすんとも言わないのでiPhone用の管理アプリケーションから覗いてみるとCPUが張り付いている状態に(^^;

写真 2014 01 29 19 35 24

事象としては、nginxのプロセス(ワーカー)起動しすぎだったのアクセスが来て新しいプロセスをつくろうとしてもメモリなくて作れないっていう状況だったのだと推測しました。(再起動して動きを見ると vmstat で r b の値がかなり上がったりしている感じになっていました)

t1.microには、スワップ領域がないのでEBSディスク上にファイルを作ってあげてスワップ領域としてマウントしてあげないといけません。

 $ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
 $ sudo mkswap /swapfile 
 $ sudo swapon /swapfile

こんな感じでファイルを作れるのであとは起動時にマウントできるように /etc/fstab に対して

/swapfile none swap sw 0 0

を追記しておきます。

外でも色々状況わかるのは便利ですね。

AWS Console App
カテゴリ: ビジネス
価格: 無料

S3をMacでマウントしてドライブのように使う

Read More
2014_01_19_午後9_57.png

最近Boxが50Gという容量を無料で使えるようにしていたので一時的にはこの手のもので全然大丈夫だと思っていますしそのように使っています。

といってもやっぱりどこか不安なので最近では大事そうなものはAWSのS3に保管しています。S3も値段的にはすごい安いわけではないのですがそれほどコストを使うことなく利用ができます。BoxはダメでS3は安全なのかといわれると色々意見はあるとおもいますがS3はDropboxやEvernoteのバックグランドで使われていますし現時点でもっとも勢いのあるクラウドベンダーなのでそうそうどうにかなることもないのかなと思っています。またS3にはGlacierという利便性は損ねても費用は1/10の領域も使うことが出来るのが魅力です。

ほんのすこし前まではAPIでアクセスしたりするのが一般的でしたが最近ではファイル転送ソフトがS3をサポートしていたりとなにげに便利になってきました。


Transmit App
カテゴリ: ユーティリティ
価格: ¥3,400

というわけで有名なFTPクライアントである「Trasmit」です。

ダウンロードして起動するとこんな感じの画面になります。AppStoreでなく直接サポートサイトからダウンロードすれば7日間使えるトライアル版があります。

2014 01 19 午後9 57

右側のペインの「S3」を選択して登録をしてみます。このアプリの良い所は「バケット(S3のフォルダのようなもの)」を指定する必要がないところです。他にもWindowsなどでこの手のアプリを使ったりしているのですがバケットを指定する必要があるばあい、バケットを追加したりすると面倒なのでこれはかなりいい感じです。

名称未設定 と tokida credentials csv と S3をMacでマウントしてドライブのように使う と Preview of S3をMacでマウントしてドライブのように使う 3

この画面で「ディスクとしてマウント」をクリックするとMac上のデスクトップに「ディスク」のアイコンが表示されてマウントされます。
その前に「+」でお気に入りに登録しておきましょう。

スクリーンショット 2014 01 19 午後10 07

開いてみると「バケット」がフォルダアイコンで表示されます。便利ですね。

S3 5CCB5E9A 5B2C 4D7E A1EB 8433675D2C31 と s3 5CCB5E9A 5B2C 4D7E A1EB 8433675D2C31 5

Tansmitのアプリからプロパティを見ることも出来ます。なにげに、場所(Region)とか、所有者とかきちんと出てきているのが良いですね。容量についても正しくとれいているようです。専用ツールではないのでこれくらいで十分ですかね。

Nic0046536 の情報 と S3をMacでマウントしてドライブのように使う 4

さて最後にS3のストレージには暗号化が出来るようになっています。Tansmitの標準の設定ではできないのですが設定の中に「カスタムS3アップロードヘッダ」というものがありそこで指定することが出来ます。

  • x-amz-server-side-encryption : AES256

2014 01 19 午後10 19

この設定でどのようになるか確認してみます。

S3 Management Console 4

このように暗号化されているのがわかります。
確認していて気になったのは「ドライブ」としてマウントした場合にアップロードすると「公開
(make public)」された状態になってしまいます
(URLがわかるとダウンロードできる状態)。なのでこの辺りは注意が必要ですね。(Transmitのアプリからアップデートすると公開されていない状況です)

ということでS3をより簡単に使うことが出来るようになったかと思います。

料金が値下げされたりするのがAWSの良い所なので最終的には確認して欲しいですがこちらによく整理されています。

S3はダウンロードするとお金がかかるのでとっておきたいファイルなどをおいておくのが良いです。またGlacierと連携することでさらに安く保管しておくことが出来ます。この辺りはまた今度書いてみたいと思います。