CentOS 5.6上でXenを使って仮想環境を作るための基本設定

2011年5月26日 19:43

 先日MSDNを契約、テスト用に自由にOSを使えるようになったので、テスト用のCore i7マシンにXenを導入して仮想マシン上でテスト環境を作ろう、という話。いままではテスト環境が必要になったら実環境上にインストール→不要になったら削除、を繰り返していたんだけど、仮想環境を使えばスナップショットも取れるし便利だろう、ということで。

 ベースの環境はCentOS 5.6。CentOS 5.6上にXen環境を構築する解説はネット上にたくさんあるわけですが、その多くがGUIを使ったセットアップ方法を解説していて、コンソールベースのCentOS環境でインストールする方法の解説は少なかったので以下に手順をメモしておきます。

 まず、仮想化関連パッケージを導入。

# yum groupinstall Virtualization
# yum install kernel-xen

 Xenを動かすには専用カーネルが必要なので、/boot/grub/menu.lstを確認してXen対応カーネル(2.6.xx-xxx.x.x.el5xen)でブートされるように設定してリブート。また、xendおよびxendomainsサービスを起動するように設定しておく。

# /sbin/chkconfig xend on
# /sbin/chkconfig xendomains on
# /sbin/service xend start
# /sbin/sercice xendomains start

 仮想マシンの作成とOSインストールは「virt-install」コマンドで行える。Fedora 15をインストールするなら下記のような感じに。

# /usr/sbin/virt-install --nographics --prompt
Would you like a fully virtualized guest (yes or no)? This will allow you to run unmodified operating systems. no
 What is the name of your virtual machine? fedora
 How much RAM should be allocated (in megabytes)? 1024
 What would you like to use as the disk (file path)? /var/lib/xen/images/fedora.img
 How large would you like the disk (/var/lib/xen/images/fedora.img) to be (in gigabytes)? 10
 What is the install URL? http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/releases/15/Fedora/i386/os/
 :
 :
インストールを開始しています...
ファイル .treeinfo を読出中...                             |  906 B     00:00
ファイル vmlinuz-PAE を読出中...                           | 3.7 MB     00:00     TA
ファイル initrd-PAE.img を読出中...                        |  94 MB     00:40     TA
ストレージファイルを作成中...                         |  10 GB     00:00
ドメインを作成中...                                        |    0 B     00:04
Connected to domain fedora
エスケープ文字は  ^] です
[    0.000000] Reserving virtual address space above 0xf5800000
[    0.000000] Initializing cgroup subsys cpuset
 :
 :

 コンソール上で仮想環境上のコンソールが表示され、インストールを行える。

コンソール上でFedoraのインストーラを操作する

コンソール上でFedoraのインストーラを操作する

 インストール完了語は、Ctrl-]でコンソールを抜けられる。稼働中の仮想マシンは「xm list」コマンドで確認可能。

# /usr/sbin/xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     2012     8 r-----    780.4
fedora                                     2     1024     1 -b----      9.9

 仮想マシンのコンソールに接続するには、「xm console <仮想マシン名>」を実行すればよい。コンソール接続の終了は先と同様Crtl-]。

# /usr/sbin/xm console fedora

nuttcpでネットワークスループットを測る

2011年5月18日 18:40

 ネットワークのスループットを測るツールには色々ある。SourceForge.JP Magazineの翻訳記事(ネットワークのベンチマーク・ツールを試す – nepim、LMbench、nuttcp)でいくつか紹介されているのだが、その中でも自分が比較的よく使っているのがnuttcpだ。ということで簡易的な使い方メモ。

インストール

 ソースコードからビルドしても良いが、nuttcpのダウンロードサイトにはRPMパッケージもあるので、こちらを利用するのが楽である。

ベンチマークの実行

 nuttcpはクライアント/サーバー型のベンチマークツールである。つまり、帯域測定をしたいネットワークの片側でサーバーを動かし、もう片側でクライアントを実行してベンチマークを行う。

 サーバー側では「-S」オプション付きでnuttcpを実行しておく。

# nuttcp -S

 クライアント側では、サーバーのIPアドレス付きでnuttcpを実行する。上り速度を測定するには「-B」を、下り速度を測定するには「-D」オプションを使う。「-i<数字>」オプションを付けると、数字で指定した間隔で途中経過を表示する。「-v」や「-vv」で経過や結果の詳細表示。

 次の例はクライアントからサーバーへの上り速度を測定する場合。

$ nuttcp -B -i1 183.181.28.64
    7.1875 MB /   1.00 sec =   60.2683 Mbps     0 retrans
    7.1875 MB /   1.00 sec =   60.2960 Mbps     0 retrans
    7.6875 MB /   1.00 sec =   64.4898 Mbps     0 retrans
    7.7500 MB /   1.00 sec =   65.0148 Mbps     0 retrans
    8.0000 MB /   1.00 sec =   67.1111 Mbps     0 retrans
    8.1250 MB /   1.00 sec =   68.0925 Mbps     0 retrans
    7.8750 MB /   1.00 sec =   66.0627 Mbps     0 retrans
    7.6875 MB /   1.00 sec =   64.4892 Mbps     0 retrans
    7.5000 MB /   1.00 sec =   62.9117 Mbps     0 retrans
    8.1875 MB /   1.00 sec =   68.6899 Mbps     0 retrans

   77.6250 MB /  10.07 sec =   64.6675 Mbps 0 %TX 6 %RX 0 retrans 9.35 msRTT

 下り速度の測定は次のような感じ。

$ nuttcp -D -i1 183.181.28.64
    6.1250 MB /   1.00 sec =   51.3391 Mbps     0 retrans
    7.5625 MB /   1.00 sec =   63.4470 Mbps     0 retrans
    7.3750 MB /   1.00 sec =   61.8740 Mbps     0 retrans
    7.3125 MB /   1.00 sec =   61.3443 Mbps     0 retrans
    6.9375 MB /   1.00 sec =   58.1962 Mbps     0 retrans
    7.1875 MB /   1.00 sec =   60.2891 Mbps     0 retrans
    7.3750 MB /   1.00 sec =   61.8149 Mbps     0 retrans
    7.7500 MB /   1.00 sec =   65.0144 Mbps     0 retrans
    7.5625 MB /   1.00 sec =   63.4413 Mbps     0 retrans
    7.5625 MB /   1.00 sec =   63.4363 Mbps     0 retrans

   73.2500 MB /  10.07 sec =   60.9941 Mbps 0 %TX 5 %RX 0 retrans 9.11 msRTT

Apacheチューニング:プロセス設定を変更

2011年3月4日 20:00

 hylom.netがだいぶ遅くなっていたのでちょっとチューニングした。原因としてはメモリ不足、DBが遅い、I/Oが遅い、ネットワークが遅いなどがあるが、さくらVPSのコントロールパネルを見た限りではCPUやネットワーク、I/Oには余裕がある感じだったので、メモリ不足ではないかと検討をつける。ということで、各プロセスのメモリ使用状況をチェック。

# ps aux --sort -rss| lv

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
apache   28879  0.1  6.6 269404 33728 ?        S    Mar01   9:40 /usr/sbin/httpd
apache   28966  0.1  6.5 269072 33484 ?        S    Mar01   9:54 /usr/sbin/httpd
apache   30532  0.1  6.5 272696 33412 ?        S    Mar02   4:48 /usr/sbin/httpd
apache   30542  0.1  6.2 274072 31680 ?        S    Mar02   4:41 /usr/sbin/httpd
apache   29002  0.1  6.0 274684 30804 ?        S    Mar01   9:31 /usr/sbin/httpd
apache   28868  0.2  5.9 273812 30556 ?        S    Mar01  10:30 /usr/sbin/httpd
apache   28750  0.2  5.8 274168 29964 ?        S    Mar01  10:56 /usr/sbin/httpd
apache   30543  0.1  5.7 274040 29212 ?        S    Mar02   4:23 /usr/sbin/httpd
apache   30529  0.1  5.2 273992 26952 ?        S    Mar02   4:33 /usr/sbin/httpd
apache   28580  0.2  4.8 274152 24852 ?        S    Mar01  10:36 /usr/sbin/httpd
apache   27032  0.1  4.3 273148 22224 ?        S    Mar01   6:06 /usr/sbin/httpd
apache    8773  0.1  3.9 268900 19944 ?        S    Mar03   2:44 /usr/sbin/httpd
apache   27108  0.1  3.7 274016 19224 ?        S    Mar01   6:03 /usr/sbin/httpd
apache   30530  0.1  3.3 273152 17020 ?        S    Mar02   4:45 /usr/sbin/httpd
apache   18789  0.1  2.7 269340 14000 ?        S    Mar01   5:38 /usr/sbin/httpd
apache   28998  0.1  2.6 274204 13616 ?        S    Mar01   9:11 /usr/sbin/httpd
apache    8767  0.1  2.1 273544 10756 ?        S    Mar03   2:53 /usr/sbin/httpd
apache   28976  0.1  1.9 273572  9740 ?        S    Mar01   9:32 /usr/sbin/httpd
apache   28877  0.2  1.4 274668  7308 ?        S    Mar01  10:14 /usr/sbin/httpd
apache   30506  0.1  1.1 273528  5688 ?        S    Mar02   4:12 /usr/sbin/httpd
 :
 :

 見て分かるように、httpdのプロセスが多数走っており、メモリを食いつぶしていることが分かる。そこで、httpdで使用するプロセス数を調整することで対処を図る。

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
# MaxSpareServers   20
MaxSpareServers   16
#ServerLimit      256
ServerLimit      32
#MaxClients       256
MaxClients       32
MaxRequestsPerChild  4000
</IfModule>

 MaxSpareServersとMaxClientsを減らしてとりあえず様子見。

 なお、@ITの「httpd.confによるWebサーバの最適化」という記事などを参考にした。

EmacsでC#(csharp-mode)を使う

18:31

 EmacsでC#コードをいじりたかったのでcsharp-modeを導入した。

 csharp-modeはGoogle Codeのcsharpmodeプロジェクトから入手可能。

 とりあえず現時点での最新版「csharp-mode-0.7.6.el」をダウンロードし、csharp-mode.elにリネームして~/.emacs.d/lisp/以下にコピーし、.emacs.elに下記を追加した。

;; C# mode
(require 'csharp-mode)
(setq auto-mode-alist
      (append '(("\\.cs$" . csharp-mode)) auto-mode-alist))

 ちなみに私の場合、.emacs.el中で下記のように~/.emacs.d/lispをロードパスに追加しているが、そうでない場合はsite-lispディレクトリなどロードパスに含まれている場所にcsharp-mode.elを置く必要がある。

;; add ~/.emacs.d/lisp to load-path
(add-to-list 'load-path "~/.emacs.d/lisp")

 最後にEmacs上でM-x byte-compile-fileを実行してcsharp-mode.elを指定してバイトコンパイルして完了。これでC#のコードが色付き(ハイライト)で表示されるようになる。

Maildirでの日本語フォルダの扱い(procmailで日本語フォルダへ振り分ける)

2011年3月3日 18:43

 最近procmailでメールの振り分けをしているのだが、日本語のフォルダへの振り分けってどうするの? と悩んだので調べた。

 命名規則自体はRFC2060に記載されているとおり、UTF-7の修正版が用いられている(UTF-7についてはIT用語辞典を参照のこと)。

 Maildir以下のサブフォルダはこの規則に従って作成されるので、目的となる日本語フォルダ名を修正版UTF-7(IMAP-UTF7などとも呼ばれる)に変換し、それを振り分け先として指定すれば良い。

 IMAP-UTF7への変換は文字コード変換ツールがあるので、こちらを使えばお手軽。たとえば「登録関係」というフォルダなら、「.&dnuTMpWiT8I-」というフォルダ名となる。