CubicLouve

Spring_MTの技術ブログ

workerの枯渇状況が分かるrack-server_statusというgemを書いています

unicornのwokerのbusy数とidle数の比率がわからなくて、うっかりworkerが枯渇して大変なことになったので、workerの状況を返すエンドポイントを追加するrackミドルウェアを書いています。

github.com

ぶっちゃけkazeburoさんのPlack-Middleware-ServerStatus-Liteのruby版です。

github.com

この中で使っているkazuhoさん製のParallel-Scoreboardも移植しました。(まだREADMEがない。。。)

github.com

元は下記です。

github.com

Kazuho@Cybozu Labs: Parallel::Scoreboard でワーカープロセスをモニタリングする方法

使い方

config.ruに下記の用に書く。

# In config.ru
use Rack::ServerStatus, scoreboard_path: './tmp'

それでrackサーバーを立ち上げるて、/server-statusというエンドポイント叩くと、workerの状態を返してくれます。(jsonでも返すように指定できます。)

% curl http://server:port/server-status
Uptime: 1432227723 (12 seconds)
BusyWorkers: 1
IdleWorkers: 3
--
pid status remote_addr host method uri protocol ss
55091 _  -    0
55092 _  -    1
55093 A 127.0.0.1 localhost:3000 GET /server-status HTTP/1.1 0
55094 _  -    0

# JSON format
% curl http://server:port/server-status?json
{"Uptime":1432388968,"BusyWorkers":1,"IdleWorkers":3,"stats":[{"remote_addr":null,"host":"-","method":null,"uri":null,"protocol":null,"pid":87240,"status":"_","ss":2},{"remote_addr":"127.0.0.1","host":"localhost:3000","method":"GET","uri":"/server-status?json","protocol":"HTTP/1.1","pid":87241,"status":"A","ss":0},{"remote_addr":null,"host":"-","method":null,"uri":null,"protocol":null,"pid":87242,"status":"_","ss":3},{"remote_addr":null,"host":"-","method":null,"uri":null,"protocol":null,"pid":87243,"status":"_","ss":3}]}

まだ、本番環境に投入していないですが、もうそろそろ投入予定です。

投入してみて、運用実績ができたらまた報告します。

2015/06/30 本番に投入して様子見中