freeコマンドでlinuxメモリの状態を確認する
サーバー管理上メモリの使用状況は非常に重要な点となるので
free
コマンドの使い方を整理しておく。
まずはとりあえず
free -h
で状態を見てみる
オプション * -m (メガバイトで表示) * -t スワップも表示 * -s 指定した秒で繰り返し表示 * -h とりあえずざっくり読みやすくしてくれる
$ free -h total used free shared buff/cache available Mem: 3.4G 531M 243M 168M 2.6G 2.3G Swap: 0B 0B 0B
ここで表してるもの Mem:列 total ->実メモリの容量
used -> 実メモリの使用量
free -> 実メモリの空き容量
shared -> 共有メモリ量
buff/cache -> (実メモリの used) - (buffers + cached )
avaliable -> この値は、新しいアプリがスワップせずに使える容量はどれくらいか。といった値を示しているようです
sharedは複数のプロセスで共有されてるメモリ領域 buffとcacheはその名の通りOSが確保しているバッファとキャッシュの領域。 なのでこの領域は事実上プロセスが確保できる領域のはず。
実際の使用メモリ量は
used - buffers - cached
実際の空きメモリ量は
free + buffers + cached
実運用上で最も見ることになるのはこの二つと思われ(保有しているメモリの量とプロセスが使えるメモリ量)
total buff/cache Mem: 3.4G 2.6G
メモ
バッファとキャッシュとは? www.math.kobe-u.ac.jp
Linux(っていうか UNIX かな?) では, 各プロセスにメモリを割り振った残りを バッファ(buffer)とキャッシュ(cache)に利用して, ディスク入出力の負荷を減らしている.
osがよしなにやってくれてる領域で、プロセスから必要になったら解放してくれる。 って認識で合ってるのかな。
CakePHP3でのマイグレーションについて最低限の事だけ書いておく
参考
http://book.cakephp.org/3.0/ja/migrations.html http://qiita.com/ran/items/c45d0228858accea0e86
まずは現在のステータスを確認
bin/cake migrations status
マイグレーションファイルを作成する 引数にカラム名と使える方を渡しておくと雛形作ってくれる
bin/cake bake migration CreateUser name:string age:integer birthday:date time
/app名/config/Migrations/以下にマイグレーションファイル作ってくれる
マイグレーション実行
bin/cake migrations migrate
マイグレーションはバージョン管理されてるのでロールバックとか出来る
bin/cake migrations rollback
カラムの変更をしてみる
動詞(DDL)->対象カラム->TBL名 targetのカラム名
bin/cake bake migration RemoveBirthdayUser birthday
基本的なアプリケーション実装のライフサイクルは tbl作成 -> tbl情報をもとにbakeでcontrollerとmodelを作成するっぽい
CakePHP3でのリクエストパラメータの取り方
基本的な事
HEADER
$this->request->header('X-HOGE');
POST
$this->request->data('postのキー'),
リクエスト(URL)パラメータ
- アプリケーション側で名前つきで扱いたい時のマッピング
/config/routes.php
に
$routes->connect('/hoge/foo/:bar_number', ['controller' => 'Good', 'action' => 'bad']);
/hoge/foo/123 でアクセスされた時に GoodControllerのbadアクションが呼ばれて、
$this->request->param('bar_number');
で取得できる。
GET
$this->request->query('getのキー');
ElasticBeanstalkでEnvironmentsが削除出来ない時
Deleting security group named: *** Reason: Group *** is used by groups:
のようなメッセージが出てしまいEnvironmentsが削除出来なくてハマった。
直接セキュリティグループを探し当てて削除しようとしても 「使ってるからダメ」と言われる。
どうすりゃいいんだ。。。
と思ってたら
対象EnvironmentsのセキュリティグループがRDSのセキュリティグループに入ってるからだった。 (接続許可リスト) 他にもElasticCacheとかで疎通させててもダメみたいだ。 という事で開通リストから対象のセキュリティグループを削除して解決。
なんとまあ。。。めっちゃハマった。 どこで使われてるのかせめて教えてくれよ。。。
phpで稼働しているサービスを32bitから64bitに移行してハマった事
php5.3系のサービスをRedhat系32bitから64bitへ移行した際に若干はまった
「phpのarray_sliceやarray_mergeで配列から配列を生成した際にキー値が消失する」 という内容だった。
データを覗いてみるとキー値にintegerを指定してた。
上記の関数はキー値が振られ直すので
http://php.net/manual/ja/function.array-merge.php
そもそも使い方が悪い。というのが前提なのだが 「旧環境では動いてたんじゃ!」と言われると原因を話さないとどうにもならない。
って事で調べてみた。
結論
という仕様のためだった。
http://jp.php.net/manual/ja/language.types.array.php http://d.hatena.ne.jp/hnw/20070521
要するに32bit時にはPHP_INT_MAX(2147483647)以上の値をたまたまキーとして指定してたからキーが消失しなかったんだけど、64bitのinteger上限値が9223372036854775807となってしまい、 数値として扱われるようになって関数を噛ました瞬間に添字が振り直されてしまった。
多分余り役に立たない内容だけど、 何かの足しになるかも。と思って記しとく。