Lucene/Solrのパフォーマンスチューニングした内容をまとめてみた

Solrのパフォーマンスチューニングを一通り行ったので、忘れないうちにまとめてみたいと思います。Lucene/Solrのバージョン6系統になら当てはまると思います。 インデクシングのパフォーマンスにも関係するところはありますが、主に検索側のパフォーマンスに…

【AWS】ALBから自身(EC2)を切り離したり登録するbashスクリプト

AWS

ALBはELBと異なり複雑な構成も取れるので、必要に応じて修正して使う前提で、LBとTargetGroupとListenerが1:1:1の基本構成で作りました。 EC2をALBから切り離し ほとんどをAPIから取得する構成にしましたが、複雑な構成なら変数として持った方が良いと思われ…

Lucene/Solr DocValuesについて調べたことをまとめてみた

DocValuesとStored&FieldCache StoredされたFieldの動き Storedの弱点とそれを補うFieldCacheの役割 DocValuesについて DocValues の注意点 Solrバージョン毎の機能制限を確認する MultiValueの順序保証 DocValuesとStoredの設定によるクエリ挙動の違い 一度…

Lucene/Solr インデクシングの簡単なデバッグログ出力の設定方法

Solrを使っいると、Luceneインデクシングの内部仕様を調べることが出てくると思っています。 Luceneのインデクシングデバッグ ということでLucene in Action読んでいたところ、「2.12. Debugging indexing」という項目見つけました。 Lucene in Action作者: …

Luceneの類似画像検索プラグインLIREのデモアプリを動かしてみた

動かしてみたのと、その時調べたことをざっくりとメモ書き。 前提ソフトウェア Javaの1.6以降 gradleをインストールしておくと簡単です gradleはmac なら以下のコマンドで入れられます。Windowsでもググればわかりやすい記事が沢山出るはずです。 brew insta…

MySQLのマイナーバージョン指定したYumインストール・更新

5.7.18 がこの記事書いている時点のMySQL 5.7の最新になります。5.7以外にも前の5.6をインストールしたいなどという時には以下の記事の手順などを参考にさせていただけば問題無くインストールできると思います。 CentOS6.8にyumでMySQLをバージョン指定イン…

【Linux I/Oチューニングに便利】vmtouchでファイルがキャッシュに乗っているか確認

LinuxでI/Oと格闘していると、重要なファイルがどのタイミングでキャッシュに乗ってくるかは死活問題になります。 このファイルってどれくらいキャッシュに乗っているの?という時に便利な vmtouch というツールがあったのでご紹介。 導入方法 導入はいたっ…

Solrのキャッシュについて調査したことまとめ

モニタリング方法 キャッシュの実装の種類 LRUCache と FastLRUCache LFUCache LRUとLFUのアルゴリズムの違い キャッシュの種類 種類 設定項目 FastLRUCacheとLFUCacheのキャッシュサイズ制御の動き filterCache useFilterForSortedQuery queryResultCache q…

Golangの練習で簡単な構文解析型のCUI電卓作ってみた

1ヵ月前くらいからGolangを書き始めています。さきほど練習で書いたプログラムを技術向上のためにもここにメモ。 仕様 利用できる変数はa〜zの26個 a=10+20 の形で演算と代入処理可能 ( ) + - * /の演算子を利用 ? で結果出力する 練習なので基本パッケージ…

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というエラーコードがあります。このエラーと格闘した話を書きます…

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…

NagiosでMySQLのslow query監視しようとして見つけたcheck_mysql_healthが色々できる

掲題の件、少し探したらcheck_mysql_healthというプラグイン見つけた。 ConSol Labs - check_mysql_health 導入方法 以下のような方法で導入します。 cat <

【Nagios】SSL証明書CRTファイルの有効期限をチェックするプラグイン作った

SSLの証明書期間チェックのためのスクリプトです。 HTTPSでアクセスして確認する方法もありますが、普段アクセスされない待機系などの確認に利用するために作ったものです。 プラグインの仕様 監視対象側のNRPE設定 Nagios側の設定 Ngios画面イメージ プラグ…

AWS EC2のタグを関連するEBSとENIにコピーするスクリプト

AWS

結構前に一回実行用に作ったものだけど、最近使う機会出たのでここにもメモ。 #!/usr/bin/env ruby require 'aws-sdk' require 'pp' region = 'ap-northeast-1' cred = Aws::SharedCredentials.new Aws.use_bundled_cert! cli = Aws::EC2::Client.new(creden…

【Windows10】Bash on Ubuntu on Windowsが0x80070005エラーで起動しなくなった

昨日まで動いていたのに突然 0x80070005 というエラーコードでbashが起動しなくなった。 調べてみると以下のような情報に辿り着いた。 Error reinstalling bash - Error 0x80070005 · Issue #473 · Microsoft/BashOnWindows · GitHub アンインストールして、…

Bashのパイプから受け取ったテキストで複数の単語をハイライト表示させる

cat や tail -f からパイプで受け取ったテキストから複数の単語を色違いにハイライト表示させたい場合に利用します。 grepのハイライト機能( grep --color=auto )だと検索ひっかかった行のみしか表示されないということで作ってみました。 スクリプト functi…

JavaからSlack API経由でメッセージを送信してみた【Simple Slack API】

JavaでSlackへメッセージ送信しようとしたのですが、Simple Slack APIというAPIを利用したら簡単にできたのでメモしておきます。 場所 github https://github.com/Ullink/simple-slack-api Mavenの場合はここです。 https://mvnrepository.com/artifact/com.…

CentOS7に移動したらselenium-webdriverがSelenium::WebDriver::Error::WebDriverErrorを吐いた

selenium-webdriver+Firefoxを使ったRubyの運用スクリプトをCentOS6環境からCentOS7に移行してきたところ、以下のようなエラー吐いて動かなくなった。 /path/to/mydir/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/fire…

CentOS7に任意のバージョンのFirefoxをインストールする方法

以下からインストールしたいバージョンのFirefoxを探す。 http://releases.mozilla.org/pub/firefox/releases/ ダウンロードする。 wget http://releases.mozilla.org/pub/firefox/releases/45.3.0esr/linux-x86_64/ja/firefox-45.3.0esr.tar.bz2 tarを解凍…

【静かな環境で仕事がしたい】騒がしい中でも静寂を手に入れるアイテム【MOLDEX耳栓】

子どもができると、今までの独身、夫婦二人きりの生活から打って変わって、家の中がいつもにぎやかになります。ただ、そんな中でも誰にでも静かになりたい時あると思います。 私は子どもに会いたくて、仕事を早めに切り上げる場合もあるので、その分時々家で…

今年最も買って良かったガジェットGARMIN vivosmart® Jとvivosmart® HR Jについて書く

2016年もそろそろ終わりです。この記事では題名の通り、今年の個人的No1ヒットガジェットのGARMIN vivosmartについて書きます。 以下の2機種を使ったので使用感や比較も書きたいと思います。 vívosmart® J vívosmart® HR J 私的ガジェットカテゴリ分け 自他…

AWS ALB(Application Load Balancer)のアクセスログをFluentdにInputする

AWS

AWS ELBのログをFluentd(td-agent)で集めて集計していました。最近、いくつかALBを使うサービスが出てきました。 このALBですが、 たぶん ALB(Application Load Balancer) が正式名称だと思っているのですが、たまに Elastic Load Balancing Version 2 と書…

EC2とEIPで冗長構成のApache Load Balancerを構築する(Pacemaker)

ELBはオートスケールで可用性も高く、ミドルウェアの心配しないでいいので便利なのですが、IP固定できないなど課題があるのと、障害時の調査がブラックボックスすぎて大変なため、Pacemakerを利用して冗長化構成のLoadBalancerを構築してみました。 CDPで言…

Pacemakerでフェールオーバー時にAmazon SNSに通知するResource Agent書いてみた

Pacemaker/Corosyncでクラスタ構築していたのですが、フェイルオーバーしてしまった時には通知が欲しいものです。 Pacemakerをインストールすると、Failover時にメール通知するMailTo というResource Agentがデフォルトでインストールされます。 resource-ag…

Apacheのmod_proxy_hcheckを利用してロードバランサーを構築してみる

Apacheの2.4.21から利用できるようになったmod_proxy_hcheckを利用してロードバランサーを構築してみます。ここではApacheの 2.4.23 を利用していきます。このバージョンのmod_proxy_hcheckにはバグがありますので、その対応も記載します。 mod_proxy_hcheck…

Apache Prefork+mod_phpからEvent+PHP-FPMへの切り替えた記録(CentOS7)

Apache のPrefork MPM + mod_phpで運用していたシステムを、Apache Event MPMに変更したので、その際の記録を残したいと思います。 ApacheのPrefork MPMは「プロセス数=同時接続数」です。しかし、Apacheに割り当てられるメモリには当然限りがあり、Prefork…

MuninデータのダッシュボードとしてGraphite+Grafanaを利用してみた

いつもお世話になっているMuninなのですが、任意のグラフを選んで並べて比較してといった使い方が簡単にできたらいいなと思っていました。 色々な実装方法があると思いますが、ここではMuninの基板であるRRDToolのような時系列データベースである Graphite …

GoogleドキュメントスプレッドシートにAWS EC2一覧を自動作成する

AWS

AWS Management Consoleはとても良く出来ていて、管理資料なんか無くても良いくらいです。 Windows使うことも無くなり、EXCEL開く回数も激減したのですが、それでもEXCELと一緒に社会人としての人生を生きてきているので、どうしてもあの表形式から離れられ…

VMWare ESXiのリソースをMuninで監視するためのプラグイン(Ruby)作ってみた

ESXiのMunin監視を行うためのプラグインを作ってみました。 監視項目 画面イメージ GEMのインストール プラグインコード munin.confの設定 1つのプラグインファイルで複数ホストを監視したい場合 監視項目 CPU利用量 Memory利用量 Datastore利用量 画面イメ…

CentOS7に最新のApache(2.4.23)をソースコードからインストール+Systemd化まで

CentOS7のレポジトリのApacheは2.4.6なのですが、2.4.7以降に導入された機能が使いたかったので、最新安定版のApache 2.4.23をインストールしました。 ソフトウェアバージョン ソフトウェアダウンロード ソフトウェア展開 APRインストール APR-UTILインスト…

タグをキーにしてEC2インスタンスのCSV形式一覧を抽出するワンライナー

AWS

Tipsだけど忘れないように。 抽出したい条件に合わせて --arg TKey "Stack" と --arg TValue "Production" を変えて実行します。 例えば以下のような条件の場合、 Key Value Stack Production こんな感じのワンライナーになります。 aws ec2 describe-instan…

ASUS Zenfone2(ZE601KL)からZenfone3(ZE552KL)に乗り換えたので比較とか

乗り換えの経緯 開封してみた 他の機種との大きさ比較 Zenfone2(ZE601KL)とZenfone3(ZE552KL)の比較 ZE552KLの良いところ 高級感 指紋認証便利 カメラの起動が速くてスムーズ ブルーライトフィルター ZE552KLでまだ評価定まってないところ USB Type-C デュア…

Mac上でEclipse CDTのDebugモードがConfiguring GDBでハングする

EclipseのCDTでデバッグしようとしたらプログレスバーが Configuring GDB というフェーズでハングして少しハマりました。 環境は以下の通り。 OS X EI Capitan Eclipse Neon Release (4.6.0) Eclipse CDTのデバッグ設定 Mac上でEclipse CDT使ってデバッグす…

AWS ELB配下のApache Http Server推奨設定のAWS公式情報

AWSの公式情報探していてググっても出ないと思っていたら英語で見つかりました。 めもめも。 Apacheの設定情報(※必ず英語に切り替えて読む) Use Apache as a Back-End Server for ELB 設定項目 値 Timeout 120 KeepAlive On KeepAliveTimeout 120 MaxKeepAli…

yumで指定バージョンのパッケージをインストールする

yumで指定で任意バージョンのパッケージをインストールする方法です。 remi リポジトリから php をインストールする時の例です。 まず、 yum list に --showduplicates オプションを付けて実行、リポジトリからインストール可能なパッケージを検索します。 #…

SolrCloud検証環境をVagrant+Ansibleで簡単自動構築

SolrCloudを簡単に試せるよう、VagrantとAnsibleで構築できるようにしました。 引用元:https://wiki.apache.org/solr/SolrCloud SolrCloudの構成 Solrサーバ ZooKeeperサーバ インストール手順(Vagrant+Ansible) 実際の手順 コレクション作成 ZooKeeperでSo…

AWS ALB(Application Load Balancer)用のMuninプラグイン作ってみた

CloudWatchでも確認できるのですが、やはり集中管理できていると便利な場面も多くMunin用のプラグイン作りました。ELBからほぼ流用できるかと思いきや調整が必要でした。 yomon.hatenablog.com グラフとメトリクス洗い出し 関連ファイル一覧 設定ファイル プ…