中年engineerの独り言 - crumbjp

LinuxとApacheの憂鬱

/proc/[pid]/stat まとめ

いつも忘れるので、まとめておくことにした td { border-bottom: 1px solid #D6E3F7; } stat No フィールド scanf 説明 0 pid %d プロセス ID。 1 comm %s 括弧でくくられた実行形式のファイル名。実行形式がスワップアウトされているかどうかによらず、見る…

NumberLong(64-bit integer) in MongoDB was smaller than I expected...

As you know, the default number type in MongoDB is 64-bit float. number ( 64-bit float) : double fraction 52-bit (Actually meaning 53-bit precision) exponent 11-bit sign 1-bit So "0x20000000000001=2^53+1" will cause overflow. > db.test.sav…

MongoDBの64bit整数型が思ったより小さかった

ご存じの様に、MongoDBの数値型(number)はfloat(64-bit) だ。 number ( 64-bit float) : double 指数部 52 bit(精度は53 bit) 仮数部 11 bit 符号 1 bit なので0x20000000000001=2^53+1は桁溢れを起す。 > db.test.drop() true > db.test.save({i:0x1fffff…

グラフ君

MongoDBの計測結果をグラフ化する為にjavascriptをちょろっと書いた。 hatenaに張れないのが残念だが・・・ MongoDBでレコードサイズ 400b , 4kb , 40kb , 400kb 4mb の時のInsert性能。

MongoDB 2.4 の性能 徹底評価

まとめ 超長くなったのでまとめを上に持ってきた。 巷で言われているチューニングは結構嘘が多い事が解ってきた。 ツール等 workingSet Analyzer は信用ならない。(overSecondsはまあ良い) mongoperfの値は完全に参考にならない。 insert mongoperfの値はi…

ハノイの塔

Jr エンジニア向けにアルゴリズムの勉強会を主催した時のコード Hanoi #!/usr/bin/env ruby ## -*- coding: utf-8 -*- class Poll def initialize @arr = Array.new end def push(v) raise "Could not push : " + v.to_s if @arr.size > 0 and @arr.last <= …

git-repo最高

git-repo が素晴らし過ぎる!複数のリポジトリを組み合わせて使えるのと、リビジョンがちゃんと指定できる所が非常に運用に乗せやすい。(javaの)mavenと同じノリで使えるね。 chefと組み合わせて使う(またはchefを置き換える?)と色々要らなくなるなぁ・…

Rubyのブロックを勉強した

Block Rubyにはブロックという要素があるが、File.open の様に、 値を返却したり、ブロックで扱ったりを両方出来る関数 がふと気になった。 f = File.open("file") f.each {|l| ... } File.open("file"){ |f| f.each {|l| ... } } block_given? こんな関数で…

Analyze the Analyzer (MongoDB 2.4)

Analyzer problem ? MongoDB Analyzer sometimes retuns below values that is difficult to interpret. RS:PRIMARY> db.serverStatus().mem { "bits" : 64, "resident" : 127, "virtual" : 11292, "supported" : true, "mapped" : 5262, "mappedWithJournal…

MongoDB 2.4 Analyzerをアナライズした!

前回のエントリーで釈然としなかったAnalyzerの戻す値が信用出来ない件。 このままじゃ、安心して使えないので解析した。 MongoDB analyzer 問題 db.serverStatus().mem.resident mongodプロセスが利用している物理メモリサイズ db.serverStatus({workingSet…

MongoDB 2.4 の新クエリーcapped arrayを試した

capped arrayの機能と性能を検証をした。 結論 capped arrayでは配列数が多い場合、明らかにsortが性能劣化する。 (使い難いが)sortを使わない場合は殆ど気にしなくて良いレベルになる。 LRUキャッシュに使うにはちょっと厳しいかもしれない。。 capped ar…

MongoDB 2.4 の新クエリー$setOnInsertを試した

$setOnInsertの機能と性能を検証をした。 結論 $setOnInsertには副作用は無さそう。積極的に使っていきたい。 $setOnInsertの機能 upsertと組み合わせて使う。 upsert レコードが無かった場合はinsertとして働き既にレコードがあった場合はupdateとして働く…

MongoDB2.4新機能 Working Set Analyzer

Working Set Analyzer MongoDB2.4からはサーバリソースの管理・評価にAnalyzerが使えるようになりました。利用方法は既存のコマンドdb.serverStatus()を叩くだけです。 マニュアル 翻訳 workingSet New in version 2.4. Example:output of the workingSet fi…

Scheme design in MongoDB.

非常に参考になるMongoDBのノウハウ集を和訳(&少々所感)しました。内容はデータベースの基本に忠実です。 データサイズを圧縮し、レコードの移動を防ぎ、効率の良いクエリーを発行しろという事です。 突飛な手法では無いので理解し易い。 One of things t…

MongoDB 2.4 認証周り

以前、盛大にハマったので、備忘録です。 コアサーバ keyFileオプションの扱い(2.2から変わったかもしれない。。。) keyFileオプションを指定すると、authオプションも指定された事になる。 つまりkeyFileオプションはレプリカセット・ノード間の認証と、…

MongoDB で isExist

MongoDBでドキュメントがあるか無いか?を調べたい時 原文 Checking if a document exists -- MongoDB slow findOne vs find 参考になったので和訳した One of the biggest optimisations to make MongoDB writes faster is to avoid moving documents by do…

MongoDB2.4 リリース(和訳)

MongoDB 2.4 released を和訳(&少々所感)しました。 和訳 The MongoDB Engineering Team is pleased to announce the release of MongoDB 2.4. This is the latest stable release, following the September 2012 release of MongoDB 2.2. This release c…

時系列データとMongoDB2.4の新機能Hash based sharding

実は数年前(MongoDB 1.6〜1.8の時期)にログをリアルタイムに全てmongodbに叩き込んで期間毎に解析する仕組みを作ろうとして挫折した事がある。理由は幾つかあったのだが主に cappadコレクションでは解析時の負荷とログ投入負荷が重なってしまう。 → 最終的…

MongoDB sharding 関連コマンド

Sharding関連の主要操作 勉強ついでに本家のマニュアルを翻訳しておいた。 が、、3、4日経っても反映されないのな。。。 多分ドキュメントオーナーがサボってて承認してないんだろう。 その内反映されるだろうからいいや。。 バランサーを開始 sh.startBal…

MongoDBのデータファイル同期について

MongoDBのストレージエンジン ココで触れた通り MongoDBは書き込みリクエストを受け付けると、一旦、内部キューにデータを積み、 バックグラウンドスレッド(journal)によって、journalファイルとデータファイルのmmap領域に書き込まれる。 その後、更にバッ…

簡単SNMP(監視カスタマイズ編)

SNMPで誤解してた部分を勉強し直したついでに纏めてみた。前回の続き net-snmp の監視項目をカスタマイズする方法 主に3通りの方法がある。 /etc/snmp/snmpd.conf exec コマンド net-snmpに任意のコマンドを登録する。 /etc/snmp/snmpd.conf # exec コマン…

簡単SNMP(ACL設定 v3編)

SNMPで誤解してた部分を勉強し直したついでに纏めてみた。前回の続き v3 ユーザを作る作業が面倒でメゲそうになるが、、他に選択支が無いのでやるしかない。 ユーザ作成時に暗号化用のトークンも指定してしまう所がポイント コミュニティー名 使わない。 com…

簡単SNMP(ACL設定 v1,v2c編)

SNMPで誤解してた部分を勉強し直したついでに纏めてみた。前回の続き セキュリティー設定 v1 , v2c と v3 で大きく方法が異なる。 v1,v2c OID 接続元IP コミュニティー名 でACL制御する。 事実上、コミュニティー名しか守る要素が無い上に、これらは平文でや…

簡単SNMP(環境構築編)

SNMPで誤解してた部分を勉強し直したついでに纏めてみた。前回(概要編)の続き今回は環境構築編。 設定ファイルが結構クセモノなので次回に持ち越す予定 net-snmp ( on centos6.2 x86_64 ) インストール 本体 簡単。 # yum install net-snmp ツール(SNMPク…

簡単SNMP(概要編)

SNMPで誤解してた部分を勉強し直したついでに纏めてみた。 SNMP(Simple Network Management Protocol) ご存じの通りコンピュータが健全に動作しているか否かをネットワーク越しに監視する仕組みインフラエンジニアならば必ず使った事がある程身近な仕組みな…

Mongo ghost sync & slaveDelay

I updated the previous slide that was added slaveDelay and its (serious) probrem !! Ghost sync & slaveDelay 前回のスライドをアップデートして、slaveDelayとその問題を追記しました。 概要 Ghost sync MongoDB replica set のnode間のネットワーク障…

Ghost sync

Ghost sync MongoDBのレプリカセットではデータの書き込みは常にPrimaryに行わる。 各Secondary(slave)は『基本』Primaryから同期する。 ただし、色々な理由でPrimaryから同期出来ない場合は別のSecondaryから同期をする事がある。 なんでこんな事するのか?…

Mongo threads 日本語版

この記事はmongoのソースを読み解きたい人向けです。 それ以外の人には多分有意な情報は無いかと。。また私自身がコードリーディングした時に書き散らしたメモを纏めただけなので 精確じゃなかったり諦めたりした部分もありますので、ご了承ください。 スタ…

Mongo threads

This article is for the man who try to read the source code.I have to make a lot of memos when I read the large percent of the source code.This is the summary of it. Startup sequence Threads Thread name will appear in the log. For instance…

クライアント接続時のmongod (シーケンス)

クライアント接続時の挙動 シーケンス図、第2弾mongodはクライアント毎に1本のスレッドを立てる。この辺りのコードはアッチコッチに飛びまくるので追い難い。 ASIOは昔からビルドすら通らないので無視無視・・・ 最近やっとNOT READY YETって書かれた(苦笑)…

c++11 thread on g++ and linux

C++

Check your g++ $ g++ -v Using built-in specs. Target: x86_64-redhat-linux Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --…

mongodのスレッド構成

最近mongodを解析してるのだけど超複雑なのでテキストメモじゃ駄目だーなので、理解できるまで少しずつ図にしていくつもり手始めにReplicaSetモードのmongodのスタートアップシーケンス。(master/slave等は除外)各スレッドの役割や動作などはこれから解析。…

limits.confの話

/etc/security/limits.conf プロセスが利用できるリソースを制限する奴。特にデーモンプロセス(mysqlとか)の利用可能ファイル数などをチューニングする時に使うのだけどlimits.conf が反映されない! というトラブルが多い。 PAM linuxの認証周りのモジュー…

robocode・Melee&チーム戦

Melee戦 基本的には1vs1と変わらないが中央は明らかに不利なのでフィールド中心に大きな反重力点を置と効果的。 勝ち残って1vs1になったら解除すればよい。また処理量の問題で1vs1よりパターン解析の量を減らす。 チーム戦 チーム内の機体間では自由に通信が…

robocode・移動&回避

移動の基本 反重力移動 障害物や弾を避ける常套手法。近寄りたく無い座標に仮想反重力点を設定し距離に応じた斥力を受けるように移動する。この手法の優れた点は斥力は近寄れば強くなり離れれば弱まる点にある。別に現実重力をシミュレーションしたい訳では…

robocode・パターン予測

パターン射撃 この手の処理の常套手段は機械学習なのだが1tick内の処理時間制限(15ms)がある為難しい。よってより軽量な実装を考えなければならない。 パターン射撃モード 前述の通常射撃モードに加え2種のパターン射撃を考案した。 単純移動パターン 敵の…

robocode・索敵

索敵の基礎 Robocodeでは自機のレーダーを回転させ敵に当てなければ敵は見えない。また弾はレーダーでは捉えられない。 敵が見えなければ攻撃も防御も出来ないので実は最重要。が、、実は突き詰めると答えは一つで差が付かない出来なきゃ減点法の世界・・・ …

robocode基礎

今回かなり徹底的にやったので備忘録では勿体無いと思った。ちゃんとコンテンツに纏めようかと。。あくまで僕の視点から見た3週間のマジcodeですよ 関連ページ 索敵 砲塔&射撃 パターン予測 移動・回避 チーム戦 robocode基礎 機体の種類 役割 HP 特記事項…

robocode・砲塔&射撃

砲塔&射撃の基礎 砲塔回転と自機予測 案外軽視されがちな重要な要素がある。『狙いをつけて撃つ』は『砲塔を回して撃つ』という事砲塔を回すには最低1 tick必要。1 tick で自機も敵機も最大8dot移動する。その時には既に狙うべき角度は違う。微修正しように…

robocode

備忘録的なやつ 職場でrobocodeイベントがあったので参加してみました。 ルール 3機編成のチーム戦 3 ラウンドマッチ ちゃんと纏めてこちらに移動 しました。

mongo-hadoop & mahout でドキュメントのクラスタリング(関連付け)

Solrが結構困ったちゃん 全文検索エンジンSolrは便利なのだが、どうもAvailavilityに問題がある様に思う。いや、環境がPoorなのもあるのだけれども GCも、PV負荷も、Indexing関連処理も して無い時間帯なのにクエストが刺さる事が多々ある! 今までは色々な…

またまたmongo-php-driver問題

前回の困ったちゃんをまた直しました・・・また一言!mongo-php-driver はマトモに動かん!!いつの間にかmasterブランチにメモリリークが組み込まれてる!! → v1.2ブランチは無事なんだってこんなに頻繁にメモリリークをぶっ込むんだろうか?ったく・・・…

荒ぶるmongos様の解析

前回(荒ぶるmongos様)の続きとりあえずgrepレベルでサラっと構造を読んでみた。まだ追記します 一旦終わり! 解析途中経過 DBConnectionPool コイツが重要っぽい class DBConnectionPool : public PeriodicTask { : } PeriodicTask このクラスは毎分起動task…

荒ぶるmongos様

Sharding構成で苦しんだ時の状況 現在mongosのコードを解析中なので、状況だけ。 ごく一般的な利用方法だと思うのだけどShardingは取扱いに注意が必要。 システム構成 実際はMongoDBサーバも沢山あってShardingを構成しているのですが 今回の現象は1台でも…

Cockatoo近況

まとまった時間が取れたのでCockatooの機能追加をしました。 v1.0ブランチを切りました https://github.com/cockatoo-org/Cockatoo/tree/v1.0 ある程度互換性を無視して一気に進みます。 Beak高機能化 アプリ開発の簡易化(わざわざMongoDBなどを立てなくて…

I just came back to the Engineering-field !!!

とある事情によりココ3か月程技術から遠ざかっていました。コチラはなんとか目途が立ったので、また更新を再開します!今回は2011頃から手掛けている仕事の紹介です。 クラウド特化型、PHPフレームワークCockatoo インフォシークニュースの配信を行っている…

続・javascriptの循環参照オブジェクト

以前書いた記事の続き実際に使って行くと、色々至らぬ点が見えてきたので かなり本格的にリファクタリングする事にした。 Object crawler 使い方 string の値を全て拾って来る方法 var callback_object = function(){ } callback_object.prototype = { ret :…

Emacs便利Tips集

前回emacsの設定に触れたので、ついでに僕の使っている便利関数達を紹介してみる。 折り返し表示 Emacs は長い行はデフォルト折り返し表示ですが ソースコードの場合は、却って見難く成りがちです。僕は [Ctrl+c l] で切り替えてます。 ;; truncate line (de…

ruby-mod(emacs)をちょっと便利に・・・

Emacs Emacsには{}や()や[]の対応でジャンプする機能 forward-sexp backward-sexp などという関数があります。これらはソースコードを弄る時に重宝し、例えば以下の様な場合に便利に使えます。 java int foo ( int a ) { // ※ forward-sexp この関数の終わり…

最急降下法

一ヶ月ぶりに会社復帰してみたら、ひょんな手違いから『イントラ八分』されてしまった。暇で仕方ないので、後輩の教育に勤しんでみた。 最急降下法 最急降下法(wikipedia) 多数のパラメータセットの最適値を探索する手法。 局所解に当たる事も多いが、処理が…