投稿者名:TOKIDA

このサイトは備忘録であるとともにIT界隈の人に情報をお返し出来たら良いなぁという物です。

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

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を実行すると

munin@ip-172-16-1-133:/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

考える力をつけるためのPDCAという手法

上の子が今年新1年制になるのに伴って色々習い事の体験をさせています。
この時期色々無料で体験できていい経験になります。
実際に受験を目指しているところやスポーツやらと色々楽しめていますが今日は「栄光サイエンス・ラボ」に行ってきました。

授業はすべて、計画や仮説を立て(Plan)、実験し(Do)、結果をまとめ(Check)、考察する(Action)というPDCAサイクルで行います。このサイクルを繰り返すことで、自然と論理的思考力が身につきます。

子供は始終楽しそうに実験をしていましたがその中でも授業の運営方法がPDCAに沿ってするということに少しばかり衝撃でした。ゼミ自体は値段が高い(とは言え他のサイエンス系も同様の費用ですね。イングリッシュ講座があるのだけど一体誰が受けているのか、今どきは小学1年制で話せるレベル?なのだろうか)ので受講はしないと思うのだけど(^^;

今回の実験では、マッチを自分でつけたり、アルコールランプを使えたりといろいろでしたが何より「本物の機材」を使って実験できるとか、親のこちらが興奮しました。

しかし今回一番びっくりしたのはゼミ(研究)の進め方がPDCAにもとづいて行われているということです。実験の前に「計画」を立て「実験(Do)」を行う、その結果を「考察(Check)」して「次回やりたいことを考える(Action)」という形で教材が成り立っていて自然とPDCAを学べるスタイルになっていました。

私自身はPDCAなんて言葉を聞いたのは社会人になってから初めて勉強した手法です。それが今では小学生の授業の進め方になっているとは驚きです。しかもこうやって何度もすれば確かに考える力はついてきそうです。

NewImage
* PDCAサイクル – Wikipedia

次回から家で何かをするときにはPDCAを積極的に取り入れていきたいです。ちょっと今度、PDCAを書く1枚シートを作ってあげようかと思います。

[WordPress] 読み込みを少し改善 (for CDN)

さすがにまったく重くても放置していたのですがこのサイトの読み込み速度の向上のために CDN (CloudFlare)とキャッシュ用のプラグイン(QuickCache)を導入して見ました。

もう少しチューニング

サイトへのアクセス速度をチェックします。

でチェックをしてみると、どうも他のサイトへのリンク(外部からの参照)が重いということがわかります(これらはキャッシュされませんからね)。

Roguer

この画像は常に表示されているのですが、iPhoneアプリの紹介用のジェネレーターで作成したので他のサイトの画像が使われています。

変更: 出来るものは画像をローカルにダウンロードしてきて利用する

ということで改善されるか暫く見てみたいと思います。

その他

画像とかを外部のサイト、以前の画像の多くはFlickrに入れていました。そうなるとこれらはキャッシュされないのですよね。

AWSを利用している場合には、CloudFrontというCDNサービスがあります。このサービスはストレージサービスのS3に画像をおいてCloudFront(CDN)から配信させるという技が使えます。さらに WordPress のプラグインで画像を(自動で)S3におく(アクセスされた画像を順次置いていく)というものがあるので非常に便利に使うことが出来るものです。

こういったものも利用していきたいですね。

「Onyx MEDIA InkPhone」をみて200LXを思い出す

InkPhoneという製品が発売されるらしい。

日本では出るのか出ないのかといえば出ないと思うのだけど。
割り切った「電話」としての仕様とスマートフォンの利便性を兼ねていいと思う。

でもそんなことは別にどうでもよくて

NewImage

これをパッと見た時に思ったのは、HP-200LX に雰囲気似ているわ!ってことだ。きっと200LXの快適性も全くない「重い(Inkだからね)」GUIの仕様になるので操作感はさっぱり違うと思うのだけどこの色合と雰囲気が好きだ。

全然関係ないが、200LXという往年の名機があるのだけど未だにあれがPDAのリファレンスなんだよ。iPhoneはiOS7.1が先日アップデートされてどんどん使いやすくなっているけど実際にしていることは200LXを実はあまり変わっていないんだよね。オフラインの辞書がオンライン化されたりして情報を手に入れやすくなった、でもOutputしていく過程においては実際には200LXで作るものとあまり変わっていない。逆に「遊び」が増えた分、Outputしているものは変わってきているのかもしれない(というかiPhoneのOutput?なんて写真ばかりだ)。

200LXはキーボードが付いていいよねって言うけど、iPhoneが出た頃からの修練の賜物としてそれなりに早く打てる技術は手に入れたいまではあまり気にならん。

そういえば我が家の200LXはどこに行ったかな?
もう電池が切れて再セットアップも出来ないよな。というかカードリーダとか持ってないからな。

[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'

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

上部へスクロール