Linuxの試験作業(メモリ食い潰し、巨大ファイル作成)

Linuxでの、ちょっとした試験作業です。

メモリーを食い潰す試験

Linux上のメモリを食い潰した時のOS挙動を確認する試験です。

参考:メモリを食いまくるプロセスがメモリ使用量に与える影響をtopで追う (←非常に分かりやすい!)

1.1秒毎にメモリを10MBずつ消費するプログラムを用意します。

$ cat mem_eat.pl
#!/usr/bin/perl
# 1秒毎にメモリを10MB単位で消費
use strict;
use warnings;

# 空の配列を作成
my @mem_push = ();

while(1){
  sleep 1;
  # 配列に追加
  push(@mem_push , 1 x 1024 x 1024 x 10);
}
$

2.別画面で以下の画面を表示しておきます。

  • top -d 1 (top画面表示中に Shiftキー + o を押下した後に、nを押下すると、メモリ使用量でソートできる)
  • tail -f /var/log/messages

3.用意したスクリプトを実行します。

$ perl mem_eat.pl

topコマンド画面で、徐々にこのperlプロセスがメモリを消費していく事が分かります。

OSが認識している空メモリ量によりますが、スクリプトを実行してからしばらくするとスクリプトが強制終了されます。

$ perl mem_eat.pl
強制終了
$

4.開いていたtopコマンド画面とmessagesログ画面を確認します。

topコマンド画面では、該当のperlプロセスが消費していたメモリが開放された事が分かります。

/var/log/messagesには、「kernel: Out of memory」メッセージが表示されます。これはLinuxに実装されている「OOM Killer」によるプロセスの強制終了の結果です。

簡単に巨大ファイルを作成する

ddコマンドでnullを書き込んだ巨大ファイルを一気に作成します。

$ dd if=/dev/zero of=testfile1 bs=1M count=10

ディスクI/O試験やトラフィック測定などにも利用できます。スクリプトを組んでシーケンシャルWrite試験として利用する事も出来ます。

Google Analytics

何年振りにサイトを立ち上げましたたので、これまた何年かぶりにGoogle Analysticsを利用する事にしました。

以前と比べて、機能がかなり増えているようです。

さまざまなトラッキング機能をうまく用いれば、ただ漠然とサイト運営するのではなく、トラッキングされたリアルタイム性の高いデータを分析しながら手を打てるので、データを使う力があれば非常に有用だと思います。

コンバージョンの目標を設定し、達成度を測定できる機能は、広告宣伝など費用対効果を見ながら手を打てるので、投資効果を制御しやすいと思います。

実際には、このサイトでは訪問者数やページビューの推移ぐらいしか使わないかもしれないですが。

まずは良質なコンテンツが必要!

ネットワーク仮想化

2012年2月に、Nicira Networks の情報が公開になった。

Niciraでは、他拠点との自由なネットワーク接続などが可能になるネットワーク仮想化ソフトウェア製品「Network Virtualization Platform(NVP)」を提供している。

ネットワーク分野でも、物理ネットワークと論理ネットワークを分離して、ハイブリッドクラウド環境や拠点間、IDC間での自由度の高いアプローチが可能となる。

NVPは、OpenFlowを用いて、Open vSwitch(仮想スイッチ)を制御する事が出来る。

http://nicira.com/


OpenFlow

構成として、OpenFlowスイッチとOpenFlowコントローラがあり、この間をOpenFlowプロトコルで制御する。

OpenFlowコントローラからOpenFlowスイッチのフローテーブルに自由度の高いルールをOpenFlowプロトコルを使って書き込む事ができる。論理構成が自由自在に出来る。

今までの今までのネットワーク機器のように1つのネットワーク機器筐体内でブラックボックス的に提供されていた機能が、「機能が分割」されて、「インターフェースが定義」されて、「オープン化」されたというところが特徴。

http://www.openflow.org/

Open vSwitch

XenServerやXen、KVMなどのハイパーバイザ上で動作する仮想スイッチ。

OpenFrowをサポートしている。

http://openvswitch.org/

Google Apps

先日、ドメインのメール環境を、Google Apps(無償版)に移行しました。

若干利用制限はありますが条件に支障はなく、カレンダーなど使える機能も増えたので、便利に使えそうです。

過去メールも移行しましたが、10GBも使えるので全然余裕です。

Googleドライブも含めると、容量スペースだけでもすごいですね。

Hadoop スタンドアロンモードでのMapReduceサンプル検証

Hadoopがビッグデータ関連の書籍に記載されていたので実際に触ってみました。

まず、下調べとして、 Wiki を読んでから、次はクイックスタートを見ながら、実際に触ってみました。


インストール

rpmでバージョンは「1.0.2」をインストール。あとは、環境に応じて(Javaなど)。

起動準備設定

/etc/hadoop/hadoop-env.sh でJAVA_HOMEを設定する。

スタンドアロンモードで実行

スタンドアロンモードで実行してみる。しかし、OutOfMemoryが発生

java.lang.OutOfMemoryError: Java heap space
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:949)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:428)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)

いろいろ調べてみるが、以下で解決。

/etc/hadoop/mapred-site.xml に以下を追加。(<configuration>の間)

<property>
<name>io.sort.mb</name>
<value>30</value>
</property>

以上で、以下を実行できるようになった。

/usr/bin/hadoop jar /usr/share/hadoop/hadoop-examples-1.0.2.jar grep input output ‘dfs[a-z.]+’

検証

まず、以下の2つのテキストファイルを準備。

$ head input/test*.txt
==> input/test1.txt <==
may
sunday
monday

==> input/test2.txt <==
saturday
info
sunday
wednesday
monday
friday
$

以下のコマンドで実行する。

$ /usr/bin/hadoop jar /usr/share/hadoop/hadoop-examples-1.0.2.jar wordcount input output
12/05/07 22:54:47 INFO util.NativeCodeLoader: Loaded the native-hadoop library
~中略~
12/05/07 22:54:57 INFO mapred.JobClient:     Combine output records=9
12/05/07 22:54:57 INFO mapred.JobClient:     Physical memory (bytes) snapshot=0
12/05/07 22:54:57 INFO mapred.JobClient:     Reduce output records=7
12/05/07 22:54:57 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=0
12/05/07 22:54:57 INFO mapred.JobClient:     Map output records=9
$

結果を見てみる。

$ cat output/part-r-00000
friday  1
info    1
may     1
monday  2
saturday        1
sunday  2
wednesday       1
$

OK!