UnixBenchで仮想サーバのベンチマークを行なう


Linux/Unixの性能を比較するのに、UnixBenchというベンチマークテストがよく使われます。このエントリは、Ubuntuで、UnixBenchを実行する手順のメモです。

UnixBenchを実行するには、makeとgccが必要です。それぞれ同名のパッケージをインストールします。

$ sudo apt-get install make gcc

UnixBenchのソースファイルをダウンロード、展開します。2014/5/11時点では、最新版はバージョン5.1.3です。

$ wget https://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz
$ tar xvzf UnixBench5.1.3.tgz 

ソースはUnixBenchというディレクトリに展開されるので、そこにcdして、ベンチマークを実行します。実行には結構時間がかかります。

$ cd UnixBench/
$ ./Run 

実行結果は標準出力に表示されます。次の例は、さくらVPS 2G(3 CPU、メモリ: 2GByte、HDD)の実行結果です。

スコアは2344.6(150行目)。マルチCPUの場合には、1CPUのスコア858.7も表示されます(117行目)。

npmでパッケージインストール時に、依存パッケージが見つからないというエラーを回避する


npmでパッケージをインストールしている際に、依存パッケージが見つからずにエラーになってしまうことがあります。

次の例では、generator-marionetteパッケージをインストールしている際に、colorsパッケージのバージョン0.3.0がインストールできずにエラーになっています。

cond@derby:marionette-x$ npm install generator-marionette
npm http GET https://registry.npmjs.org/generator-marionette
npm http 200 https://registry.npmjs.org/generator-marionette
npm http GET https://registry.npmjs.org/generator-marionette/-/generator-marionette-0.1.5.tgz
npm http 200 https://registry.npmjs.org/generator-marionette/-/generator-marionette-0.1.5.tgz
npm http GET https://registry.npmjs.org/generator-buster
npm http GET https://registry.npmjs.org/underscore.string

......

npm http GET http://packages:5984/colors/-/colors-0.3.0.tgz
npm ERR! fetch failed http://packages:5984/colors/-/colors-0.3.0.tgz
npm ERR! network getaddrinfo ENOTFOUND
npm ERR! network This is most likely not a problem with npm itself
npm ERR! network and is related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly.  See: 'npm help config'

npm ERR! System Linux 3.2.0-58-generic
npm ERR! command "/home/cond/nvm/v0.10.25/bin/node" "/home/cond/nvm/v0.10.25/bin/npm" "install" "generator-marionette"
npm ERR! cwd /home/cond/tmp/marionette-x
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.24
npm ERR! syscall getaddrinfo
npm ERR! code ENOTFOUND
npm ERR! errno ENOTFOUND
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /home/cond/tmp/marionette-x/npm-debug.log
npm ERR! not ok code 0
cond@derby:marionette-x$

これは、リポジトリ(?)に記録されているcolorsパッケージのURLのホスト名が間違っているのが原因です。

対症療法ですが、あらかじめ単独でcolors@0.3.0をインストールしておけば、問題なくインストールできます。

具体的には、11行目に示されているURL


http://packages:5984/colors/-/colors-0.3.0.tgz

の「packages:5984」という部分を「registry.npmjs.org」に置き換えたURLを指定して、npm installを実行します。

つまり、コマンド

$ npm install http://registry.npmjs.org/colors/-/colors-0.3.0.tgz

を実行すれば、colorパッケージのバージョン0.3.0がインストールされます。

cond@derby:marionette-x$ npm install http://registry.npmjs.org/colors/-/colors-0.3.0.tgz
npm http GET http://registry.npmjs.org/colors/-/colors-0.3.0.tgz
npm http 200 http://registry.npmjs.org/colors/-/colors-0.3.0.tgz
colors@0.3.0 node_modules/colors
cond@derby:marionette-x$

これでcolors@0.3.0がインストールできました。もう1度次のコマンドを実行してやれば、今度は失敗せずにgenerator-marionetteパッケージがインストールされます。

$ npm install generator-marionette

MySQLの文字コード関連の設定を調べる方法


前のエントリに引き続きMySQLについての話です。今回は、文字コードの設定を確認するためのコマンドを紹介します。

文字コード関係の設定を表示する

次のコマンドを実行すると、文字コードに関する設定が表示されます。

mysql> show variables like 'character_set%';

前回のエントリで書いたように、Ubuntuでは特に何もしないと、MySQLのデフォルトの文字コードはlatin1になっています。ですから、次のように表示されます。

mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

前のエントリで説明したように、my.cnfにcharacter_set_server = utf8という設定をしておくと、次のように文字コードがutf8となります。(character_set_filesystemはファイルシステムの文字コードで、binaryで構いません。)

mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

このような設定になっていれば、文字コードを指定しないでcreate databaseやcreate tableを実行した時に、データベースやテーブルの文字コードがutf8になります。

データベースの文字コード設定を表示する

特定のデータベースの文字コード設定を知るには、次のコマンドを実行します。

mysql> show create database データベース名;

次の例は、mydbデータベースの文字コードを表示しています。「DEFAULT CHARACTER SET utf8」となっているので、文字コードがutf8に設定されていることがわかります。

mysql> show create database mydb;
+----------+---------------------------------------------------------------+
| Database | Create Database                                               |
+----------+---------------------------------------------------------------+
| mydb     | CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)

テーブルの文字コード設定を表示する

特定のテーブルの文字コード設定を知るには、次のコマンドを実行します。

mysql> show create table テーブル名;

次の例は、mydbデータベースのusersテーブルの文字コードを表示しています。11行目の「DEFAULT CHARSET=utf8」から、文字コードがutf8に設定されていることがわかります。

mysql> show create table mydb.users \G
*************************** 1. row ***************************
       Table: users
Create Table: CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

UbuntuでMySQLを使う際の文字コードの設定


Ubuntu (12.04LTS)でMySQLを使う際に必要な設定についてまとめてみました。

このように、最初に1回だけ行なう設定や手順は、次に必要になった時には忘れていて、改めて調べ直すことが多いものです。

MySQLをインストールする

mysql-serverパッケージをインストールすれば、最新版のMySQL一式がインストールされます。(2013/1時点では、MySQL 5.5系です。)

$ sudo apt-get install mysql-server

MySQLの起動と停止

起動や停止といったいわゆる運用系の操作は、Ubuntuの標準的なやり方で行ないます。

# MySQLを起動する
$ sudo /etc/init.d/mysql start

# MySQLを停止する
$ sudo /etc/init.d/mysql stop

# MySQLを再起動する
$ sudo /etc/init.d/mysql restart

# MySQLの現在の状態を表示する
$ sudo /etc/init.d/mysql status

utf8を使うように設定する

Ubuntuでは、MySQLの設定ファイルmy.cnfは、/etc/mysql/my.cnfに置かれています。

Ubuntuでは、デフォルトではサーバの文字コードは(utf8ではなく)latin1になります。そのために、文字コードを指定せずにデータベースやテーブルを作成すると、文字コードがlatin1となり日本語(utf8)が文字化けしてしまいます。

日本語のデータを扱うならば、デフォルトの文字コードをutf8としておくとよいでしょう。それには、my.cnfに次の設定を追加します。

[mysqld]
character_set_server = utf8

Ubuntuのパッケージキャッシュをクリアして、ディスク使用量を減らす


ノートPCのVMware Player上で運用しているUbuntu Linuxで、特に心当たりもないのに、いつの間にかディスクの使用量がかなり増えていました。

増えたといっても数百Mバイトなので、大容量のHDDならほとんど気にならないレベルですが、ディスクを15Gしか割り当ててない仮想マシンなので無視できないレベルです。

調べてみたところ、/var/cache/apt以下の容量が増えていました。

ディレクトリの名前の通り、apt-getでインストールしたパッケージファイルがキャッシュされています。


$ ls -lAR /var/cache/apt
/var/cache/apt:
total 45104
drwxr-xr-x 3 root root 299008 Sep 29 22:18 archives
-rw-r--r-- 1 root root 23041799 Sep 29 22:19 pkgcache.bin
-rw-r--r-- 1 root root 22875039 Sep 29 07:52 srcpkgcache.bin

/var/cache/apt/archives:
total 293516
-rw-r--r-- 1 root root 146028 Sep 5 03:03 apport_2.0.1-0ubuntu13_all.deb
-rw-r--r-- 1 root root 9198 Sep 5 03:03 apport-gtk_2.0.1-0ubuntu13_all.deb
-rw-r--r-- 1 root root 1089260 Aug 21 08:37 apt_0.8.16~exp12ubuntu10.3_i386.deb
-rw-r--r-- 1 root root 16308 Aug 21 08:37 apt-transport-https_0.8.16~exp12ubuntu10.3_i386.deb
-rw-r--r-- 1 root root 192574 Aug 21 08:37 apt-utils_0.8.16~exp12ubuntu10.3_i386.deb
-rw-r--r-- 1 root root 54114 Sep 14 02:03 bind9-host_1%3a9.8.1.dfsg.P1-4ubuntu0.3_i386.deb
-rw-r--r-- 1 root root 137468 Mar 23 2012 curl_7.22.0-3ubuntu4_i386.deb
-rw-r--r-- 1 root root 367572 Sep 21 01:33 dbus_1.4.18-1ubuntu1.1_i386.deb
-rw-r--r-- 1 root root 21508 Sep 21 01:33 dbus-x11_1.4.18-1ubuntu1.1_i386.deb
........

このキャッシュされたパッケージファイルを削除する方法を調べてみたところ,apt-getコマンドでcleanを指定してやればよいようです。(詳しくはman apt-getを参照のこと。)

つまり,apt-get cleanを実行すると,/var/cache/apt以下のファイルを(ロックファイルを除いて)削除してくれます。

実行前の/var/cache/aptの容量は330M強でした。

$ du /var/cache/apt
4 /var/cache/apt/archives/partial
293812 /var/cache/apt/archives
338624 /var/cache/apt

sudo apt-get cleanを実行します。

$ sudo apt-get clean

実行後の/var/cache/aptの容量は0.3Mに減りました。めでたしめでたし。

$ du /var/cache/apt
4 /var/cache/apt/archives/partial
300 /var/cache/apt/archives
304 /var/cache/apt
$

マニュアルページも書かれているように、時々手動で実行してキャッシュをクリアしてやるとよいようです。