Redis監視するためのNagiosプラグイン作ってみた(Golang)

Nagiosの監視しようとRedisプラグイン探してみたら以下が見つかりました。 check_redis.pl - Nagios Exchange ただ、PerlやPHPが必要だったので、バイナリファイルを置くだけで動くGoでプラグインを作ってみました。 コマンドのオプション オプション 説明 -…

RedisからTTL(Expire)設定されていないKeyの一覧を取得する

TTLが設定されていないキーの一覧を取得する方法です。 以下で言えば、keys=6328703 と expires=6328701 の差分の2件を知りたい場合です。 $ redis-cli info keyspace # Keyspace db0:keys=6328703,expires=6328701,avg_ttl=9169857 bashで実装 少量のデータ…

mysqlコマンドで大きいデータをパイプやリダイレクト連携するとメモリ容量が足りなくなる

以下のようにmysqlコマンドをパイプやリダイレクトで連携させたら、mysqlコマンドのメモリ使用量が急増しました。 動きを見ているとバッファリングされてしまっているみたい。全部結果を溜め込んでから、後ろに流すような動きです。 mysql $option -e "selec…

Apacheのmod_proxy_balancerのbybusynessに振り分けについて調べてみた

Apacheのロードバランシングモジュールである mod_proxy_balancer の振り分けアルゴリズムの bybusyness について調べた内容です。 byrequestsとbybusyness bybusynessの使いどころ 検証による動きの比較 シナリオ① 特定のサーバが遅くなる時を再現 シナリオ…

Apache Bench(abコマンド)で変数使ったり複数種類のURLリクエストを送りたい

デフォルトのabコマンドでは、指定できるURLは固定ですが複数のURLを送る方法を探したら、以下の方が作成していたのでありがたく使わせていただきました。 chrismiles.livejournal.com 使い方 以下のようにパラメータを入れたテキストを準備します。 name=fo…

AWS ELBの504ステータスのGateway Timeoutと格闘した話(最終的にALBで直った)

AWS

ELBのメトリクスのステータスには、バックエンドのEC2が返したステータス(HTTPCode_Backend_XXX)と、ELB自身のステータス(HTTPCode_ELB_5XX)があります。 ELB自身のステータスコードの中には504というエラーコードがあります。この504エラーと格闘した話を書…

AMIから構築したEC2は最初EBSが遅い、プレウォーミングが必要

AWS

EC2をAMIから構築したところ、ディスク(EBS)が遅い。CloudWatchでもキュー長が増加してしまっていました。 問い合わせたところ、AMI からEC2インスタンスを作成した場合、各 EBSボリュームは スナップショットからリストアした際と同様、データは S3 がダウ…

RedisにBashを使って大量データを高速挿入(INSERT)する

Redisに数千万件の大量データを挿入したいという要件がありました。 手元のテキストファイルをBash使って手軽に高速に挿入したいのですがredis-cliを普通に使うとスピードが出ない。 Redisのプロトコルで流し込む方法が推奨のようです。 大量データのインサ…

Redisの「Cannot assign requested address」のエラーが出たので対応

ローカルのRedisに大量データを入れていたところ、以下のエラーが発生しました。 Could not connect to Redis at 127.0.0.1:6379: Cannot assign requested address Socketの状態を見てみたら以下の通り。28232 TIME-WAIT が問題でした。 $ ss -tan | awk ‘{…

LinuxのI/OスケジューラのDeadlineを調べてチューニングしてみた

Deadlineスケジューラの概要 チューニングパラメータ write_expire,read_expire writes_starved fifo_batch ソースコード読む時のエントリ部分 SSD向けのチューニング例 設定方法 最後に 参考文献とURL ● SSD の並列性を引き出す I/O スケジューラに関する研…

Linuxページキャッシュの設定を変更してWrite I/Oをチューニングしたメモ

環境 設定パラメータ 計測ツール 1 ダーティーページ状況の計測ツール 出力項目 出力フォーマットと出力例 2 時間付きvmstat 3 fio(I/O負荷発生ツール) 観測 実験 チューニング例 デフォルト値 ダーティーページの最小化 キャッシュ有効活用メモリ上に乗せた…

CentOS7でSystemdがメモリリークしていて使用率がジワジワと上昇していた

ほとんどサービス動いてないサーバが急にメモリ使用率の警告出したので調べて見たら、1日に30MBくらい、1ヵ月で1GBくらいジワジワとSystemdがメモリリークしていたという話です。 事象 Systemdが異常にメモリを使っている。 $ ps aux | head USER PID %CPU %…

Solrのレプリケーション帯域幅を制御してI/Oパフォーマンスを制御する

Solrのレプリケーションが原因で、EC2のSolrサーバが定期的にIOボトルネックのパフォーマンス劣化起こしてたので、対応としてレプリケーションの帯域幅を制御できるパラメータ( maxWriteMBPerSec )を使ったのでメモ。 経緯 最初はI/Oボトルネック解消のため…

BashスクリプトからSQLiteを操作する方法(PSコマンドの結果をDB格納してみた)

Bashスクリプトやワンライナーから直接SQLiteを操作する方法です。せっかくなのでPSコマンドで出力したプロセスの一覧をDBに格納するところまでやってみました。 Bashからsqliteを操作する方法 DB作成方法。 echo ".open db_name" | sqlite3 SQL文投入はこん…

serverspecの評価結果をjson形式で出力する(複数ホストにも対応)

serverspecの結果を他の仕組みと連携させたい場合など、json形式で出力する方法です。 標準 specに標準でjsonフォーマッターが付いているので、 --format オプション指定するとjson形式の結果が得られます。 bundle exec rake spec SPEC_OPTS="--format json…