2013年6月13日木曜日

tcpdump をつかって HTTP 通信の中身を見る

メモです

とりあえず ポート80 の リクエストレスポンス を監視
tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'


特定の ホストからの リクエストレスポンス を監視

tcpdump -A -s 0 'src hogehoge.com tcp dst port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

特定のホストからの リクエストのみ 監視
tcpdump -A -s 0 'tcp dst port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

2013年2月10日日曜日

kumofs on CentOS6

CentOS6 に kumofs を新規インストール

インストール手順はいつもと一緒

1. TokyoCabinet のインストール
2. MessagePack C++ インストール
3. ruby, rubygems のインストール

msgpack の インストール
4. gem install msgpack -v=0.4.7

0.5.0 から msgpack の executeメソッドが使えず
/usr/local/bin/kumoctl:61:in `receive_message': undefined method `execute' for # (NoMethodError)

が出てくるので 0.4.7が必須です

5. kumofs の インストール

参考

msgpack 0.4.7 以上が インストール済みの場合
kumoctl コマンドを変更

--- /usr/local/bin/kumoctl 2013-02-10 09:55:02.965890698 +0900
+++ /usr/local/bin/kumoctl.bk 2013-02-10 10:25:01.621891205 +0900
@@ -21,7 +21,6 @@
require 'rubygems'
rescue LoadError
end
-gem 'msgpack', '0.4.7'
require 'msgpack'
require 'socket'


require msgpack 前に gem 'msgpack', 'バージョン' を追記することで
バージョン指定で動かすことが可能
0.5.0 から msgpack の executeが・・・(略
大事なことなので2回言いました。

2013年1月2日水曜日

php の 変数と定数の比較2

Writeに引き続き
Readを検証

■ 検証2 Read

以下のコードで検証を行う
比較を行わせることで READ を発生させる

DEFINE read_test1.php
<?php
define('VALUE', 99999999);
for ($i = 0; $i < 1000000; $i++) {
        if ($i < VALUE) {
        }
}
echo memory_get_usage();
?>

変数 read_test2.php
<?php
$VALUE = 99999999;
for ($i = 0; $i < 1000000; $i++) {
        if ($i < $VALUE) {
        }
}
echo memory_get_usage();
?>

結果
$ time php read_test.php
620600
real    0m0.289s
user    0m0.281s
sys     0m0.008s

$ time php read_test2.php
620328
real    0m0.164s
user    0m0.153s
sys     0m0.010s

メモリの使用量が違うのは前回の検証結果でわかっていたこと
参照時は変数のほうが早いことがわかった

ループの中での条件判定等でDEFINE参照するよりも
外側でいったん変数に格納しループ内判定処理に持ち込むのがよいと思われる

php の 変数と定数の比較

あけましておめでとうございます。

phpの書初め?がてら先日ふと気になったことがあったので検証してみました。

変数で値を持つのと定数(DEFINE)で値を持つとなにが違うのかと・・・


■ 検証1 Write
以下のコードを用いて検証

DEFINE (test1.php)

<?php
define('P_1','1');
define('P_2','2');
define('P_3','3');
define('P_4','4');
define('P_5','5');
define('P_6','6');
define('P_7','7');
define('P_8','8');
define('P_9','9');
define('P_10','10');
define('P_11','11');
・・・10万まで繰り返す・・・
define('P_100000','100000');
echo memory_get_usage();
?>

変数 (test2.php)

<?php
$P_1 = 1;
$P_2 = 2;
$P_3 = 3;
$P_4 = 4;
$P_5 = 5;
$P_6 = 6;
$P_7 = 7;
$P_8 = 8;
$P_9 = 9;
$P_10 = 10;
$P_11 = 11;
・・・10万まで繰り返す・・・
$P_100000 = 100000;
echo memory_get_usage();
?>

結果
$ time php test1.php
53942304
real    0m0.513s
user    0m0.465s
sys     0m0.047s

$ time php test2.php
38990512
real    0m11.841s
user    0m11.800s
sys     0m0.030s

Writeの部では DEFINE のほうが早いようです。ただし反面して
変数定義のほうがメモリ使用量が少ないことが判明
変数の長さとか関係あるのかな?と思い以下コードも念のため実行

DEFINE

<?php
define('P_000001','000001');
define('P_000002','000002');
define('P_000003','000003');
define('P_000004','000004');
define('P_000005','000005');
define('P_000006','000006');
define('P_000007','000007');
define('P_000008','000008');
define('P_000009','000009');
define('P_000010','000010');
define('P_000011','000011');
define('P_000012','000012');
・・・10万まで繰り返す・・・
define('P_100000','100000');
echo memory_get_usage();
?>

変数

<?php
$P_000001 = 000001;
$P_000002 = 000002;
$P_000003 = 000003;
$P_000004 = 000004;
$P_000005 = 000005;
$P_000006 = 000006;
$P_000007 = 000007;
$P_000008 = 000008;
$P_000009 = 000009;
$P_000010 = 000010;
$P_000011 = 000011;
・・・10万まで繰り返す・・・
$P_100000 = 100000;
echo memory_get_usage();
?>

結果
$ time php test3.php
53942304
real    0m0.507s
user    0m0.453s
sys     0m0.054s


$ time php test4.php
38990512
real    0m12.174s
user    0m12.133s
sys     0m0.029s
はい、変わりませんでした~

引き続き readの検証に移ります