読者です 読者をやめる 読者になる 読者になる

netstatを使って「TCPで繋がる」と思ってるものを確認する

サーバーを作った時に作ったサーバのTCPのレイヤーで接続可能か知りたい時がある。 大体の場合は 「つながる想定(セキュリティの設定とか)なんだけど繋がらない」って時にサーバーに入って確認する

netstat -anp | grep 8080

なんとなく 「誰」 が 「どこに」 どこのポートを使って接続してるのかがわかる

unicornの例

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      18431/unicorn.rb -E

stateはメモしておく

  • ESTABLISHED -> 接続確立済みで現在接続中
  • TIME_WAIT -> 接続終了待ちの状態
  • LISTEN -> 接続可能な状態(待ち受けてる)

ユースケースに則った使い方は別記事にしようと思う

因みに使ってるportを調べたい時は

lsof -i:8080

が便利そうだというのを見つけた。 これはまた別で。

wコマンドでuptime(稼働時間)とか現在時刻とか確認する

topでもいいんだけど 「知りたい情報だけサラっと見たい」ってのもスマートな気がするのでメモ。

$ w

と1文字打つだけ

$ w
 11:44:01 up 246 days, 20:16,  2 users,  load average: 0.00, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
surfing pts/0    ***************** 11:35    6:09   0.03s  0.03s -bash
surfing pts/1    ***************** 11:42    1.00s  0.03s  0.00s w

ヘッダ部分

  • 11:44:01 -> 現在時刻,timezoneがずれてないかとか見る
  • up 246 days, 20:16 -> 起動されてから何日経ってるか, 最近rebootされてないかとか見る
  • 2 users -> 今何人ログインしてるか
  • load average: 0.00, 0.02, 0.05 -> 1分, 5分, 15分のロードアベレージ

下段

USER -> ログインしてるユーザー

TTY -> tty

FROM -> アクセス元

IDLE -> アイドル時間(現在時刻-最後にttyアクセスした時間)

JCPUは、TTYから実行されている全プロセスが使った時間であり、PCPUは、「WHAT」項目で示されているカレントプロセスが使った時間です

codezine.jp

JCPUはttyからってことで実質該当のユーザーが使ったCPUの時間ってことであってるかな。 PCPUはWHATで表示されているカレントプロセスが使った時間。

ncコマンドでネットワークの疎通を確認する

外部apiを使用したい時で、 ipレベル(L4)で制約がかかっている場合はcurlでなくnc(netcat)で確認すると便利である

実用レベルのex:

nc -vz -w 1 (ipアドレス | ドメイン名でもいい) port(80など)

-v 詳細を表示

-z ポートの状態だけを確認する(これをつけないとサーバー側からの応答を待ってしまう)

-w タイムアウト値を設定

その他portをレンジで指定もできるが、 あまり使うことがないので書かない。 (portスキャンは微妙な扱いだし)

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 -> この値は、新しいアプリがスワップせずに使える容量はどれくらいか。といった値を示しているようです

ota42y.com

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とかで疎通させててもダメみたいだ。 という事で開通リストから対象のセキュリティグループを削除して解決。

なんとまあ。。。めっちゃハマった。 どこで使われてるのかせめて教えてくれよ。。。