タグ

ブックマーク / blog.nomadscafe.jp (51)

  • Unicornの2倍のパフォーマンスを実現したRackサーバ「Rhebok」をリリースしました - blog.nomadscafe.jp

    “Hello World”なベンチマークでUnicornに比べ2倍高速に動作するRackサーバをリリースしました。 rubygems: http://rubygems.org/gems/rhebok github: https://github.com/kazeburo/rhebok PerlのGazelleをベースに作っています。Rackアプリケーションの運用経験がほぼないので、機能不足があると思います。issue等で教えて頂ければ幸いです。 なぜ高速に動作するアプリケーションサーバが必要なのか Unicornは高速に動作します。多くのアプリケーションにとっては十分でしょう。それでもRhebokでさらに上のパフォーマンスを出そうとしたのは、技術的なチャレンジの他に以下のようなアプリケーションで高速なアプリケーションサーバが必要とされると考えているからです。 ソーシャルゲーム、広告サーバ、

    hiboma
    hiboma 2014/12/19
    "スピードの向こう側"
  • listen()のbacklogが不足した際のTCP_DEFER_ACCEPTの動作について - blog.nomadscafe.jp

    TCP_DEFER_ACCEPTは、LinuxでサポートされているTCPのオプションで、サーバ側で使用した場合にはaccept(2)からのブロック解除をTCP接続が完了したタイミングではなく最初のデータが到着したタイミングで行ってくれるオプションです。 Webサーバ・アプリケーションサーバではリクエストが到着してからaccept(2)のブロックを解除するので、リクエストの到着をWebサーバ・アプリケーションサーバで待つ必要がなくなり、特にprefork型のサーバでは効率的にプロセスを使えるようになるという利点があります。PerlではStarletがこの機能を有効にしています ところが、某サービスでTCP_DEFER_ACCEPTが有効にも関わらず、accept後のreadでデータが読めず、最悪の場合、デフォルトのtimeoutである5分間プロセスがストールすることがありました。strace

  • memcached おすすめ起動オプションまとめ - blog.nomadscafe.jp

    ここを書き直して転載 memcachedに関する記事は「第1回 memcachedの基:memcachedを知り尽くす|gihyo.jp … 技術評論社」など何回か書いていますが、最近のmemcachedでの起動オプションのおすすめをまとめてみようと思います。なおこの記事はMemcached Advent Calendarではありません。 まとめるとこんな感じです。 $ memcached -v -p 11211 -U 0 -u memcached -m 1024 \ -c 100000 -t 4 -C -B ascii ひとつずつ簡単に紹介します。 -v ログ出力 ログを verbose モードで起動します。エラーや警告が表示されます。弊社ではmemachedをdaemontools経由で起動し、ログを記録しています。 -v -vオプションは -vv、-vvv と v の数を増やす事で

  • Vagrantのprovisionerを使ってmroongaのrpmを作る方法 - MySQL Casual Advent Calendar 2013 - blog.nomadscafe.jp

    このエントリーはMySQL Casual Advent Calendar 2013 11日目の記事です。2011年のAdvent CalendarはQ4Mの導入方法を書いたので、今回はmroongaを書きます。 lestrratさんのエントリにもありますが、某サービスの検索システムをmroongaに置き換えるってのを準備しています。今のところメモリ64GB/ioDriveなマシンに、番で想定している倍の量の9000万件/台の記事データをストレージモードで突っ込んでいますが、遅くても0.5秒ぐらいで検索結果が得られるのでなかなか上々です。 mroongaを導入している環境は、CentOS6系でMySQLは5.6系を使っています。MySQLOracle公式rpmです。mroongaの公式サイトで配布しているrpmはOS付属のMySQLのバージョンに合わせたrpmなので、Oracle公式rp

    hiboma
    hiboma 2013/12/11
  • HTTP/1.1 の Transfer-Encoding: chunked をビジュアライズするツール書いてみた - blog.nomadscafe.jp

    Chunked Transferとは 一般にHTTP KeepAliveを利用するには、レスポンスのボディがどこで終わり、次のレスポンスがどこから始まるかをクライアントが知る必要があります、そのためHTTP/1.0ではKeepAliveを行う為にボディの長さをContent-Lengthをヘッダに入れなければなりませんでしたが、サイズを測るためにデータをすべてメモリに読み込むなどの処理が必要になり、レスポンス開始までの時間もかかります。(一般的なアプリケーションにはあまり影響がありませんが) そこでHTTP/1.1ではChunked Transferという仕組みが入っていて、事前に全体のレスポンスの長さが分からなくても、chunk=固まり毎にサイズを記してレスポンスを返していき、最後に0byteと送信することで、コンテンツの切れ目がわかるようになっています。 HTTP/1.1 200 OK

    hiboma
    hiboma 2013/05/27
  • Apache HTTP ServerをRFC6585の"429 Too Many Requests"に(とりあえず)対応させるパッチ - blog.nomadscafe.jp

    mod_dosdetectorなどを使ってbotの大量アクセスを検知して、エラーをかえしたい場合に DoSDetection on DoSPeriod 10 DoSThreshold 30 DoSBanPeriod 60 DoSTableSize 200 DoSIgnoreContentType image|javascript|css RewriteEngine On RewriteCond %{ENV:SuspectDoS} =1 RewriteRule .* - [R=503,L] と設定したりしますが、深遠なる理由でウェルノウンな503や402を使いたくない環境で、RFC6585で追加された”429 Too Many Requests“の存在に気付き、 RewriteRule .* - [R=429,L] の様に設定したみたのですが、動きませんでした。 Syntax error o

    hiboma
    hiboma 2012/12/11
    こんなステータスあったとは!
  • Perlでstrace -p pidして目的のシステムコールが来たら終了する - blog.nomadscafe.jp

    riywoさんの「Perlでssh tail -fして目的の行が来たら終了する」に便乗するコネタ。 ログをtailしながら(ほぼ)リアルタイムで解析していくworkerの処理がどれくらい遅延しているのか確認して、それをgrowthforecastでグラフ化したいなと思ったので以下のようなスクリプトを書いてcronで実行しているよという話 #!/usr/bin/perl use strict; use Time::Piece; use LWP::UserAgent; my $worker = `/usr/bin/pgrep worker.pl`; chomp($worker); die "couldnot find worker pid" unless $worker; pipe my $logrh, my $logwh or die "Died: failed to create pipe

    hiboma
    hiboma 2012/08/09
    素敵ハック
  • mod_copy_header ってのを書いた話 Re: Apache上のPerl FastCGIはCustomLogにデータを書くことができるか? - blog.nomadscafe.jp

    この記事は「Apache上のPerl FastCGIはCustomLogにデータを書くことができるか?ついでにmod_perlでのお話」へのレスです 「FCGIので動いているアプリケーションがあって、コードの中の変数をapacheのLOGに出したいのですよ。」とのことらしいので昔書いた mod_copy_header というモジュールを思い出しながら再現して github に置いた https://github.com/kazeburo/mod_copy_header これを使うと任意のレスポンスヘッダを Apacheのnoteにコピーすることができます。あとはmod_headersでレスポンスヘッダを消すなり、CustomLogでログに記録するなりできます。 なぜこのモジュールが必要なのかというと、ヘッダだけでやろうとした場合、元記事でも紹介されてますが、 <Location ..> C

  • CloudForecast で Redis の監視 - blog.nomadscafe.jp

    Redisをサービスで利用するというので、CloudForecastで監視するプラグインを作ってみました。 監視項目は Percona の Monitoring Plugins を参考にしてます Redis の統計情報は info コマンドを実行すると得られます。telnet でも実行可能です。 info $1020 redis_version:2.4.11 redis_git_sha1:00000000 redis_git_dirty:0 arch_bits:64 multiplexing_api:epoll gcc_version:4.1.2 process_id:18078 uptime_in_seconds:781399 uptime_in_days:9 lru_clock:1553555 used_cpu_sys:1.90 used_cpu_user:0.82 used_cpu_

  • Apache httpd.conf の Allow from .. にコメントを書いてしまうとDNSの逆引きが行われてレスポンスが悪化するので注意の件 + コメントが書けるようになるパッチ - blog.nomadscafe.jp

    Apacheのconfにコメントを書く際に、設定の後ろに書く事はできないのは知られているのかどうかよくわかりませんが、その通りです。例えば MaxRequestsPerChild 200 #少なめに これは syntax error になります % ./local/httpd/bin/apachectl -t Syntax error on line 12 of /Users/.../local/httpd/conf/httpd.conf: MaxRequestsPerChild takes one argument, Maximum number of requests a particular child serves before dying. よくやりがちなんですが、ドキュメントにも Directives in the configuration files are case-in

    hiboma
    hiboma 2012/04/04
    ホスティング鯖だとユーザーさんが自由に .htaccess 書けるから隠れてこの罠踏んでる可能性も..
  • blog.nomadscafe.jp

    PHPの勉強会なので、いままでお会いしたことのない方とお話ができてよかったです。 発表内容は大きくなってしまったmaster.phpファイルをどうやって高速に読むかというお話です。PHPではリクエストの終了とともに全てのメモリを捨ててしまうので、変わらないデータもリクエストの度にキャッシュからロードしなくてはいけません。大きなphpファイルがあれば当然毎回の読み込みがオーバーヘッドとなってきます。そんな環境でどうやってアプリケーションのパフォーマンスをあげていったのかを紹介しています。 スライドの中でfile sizeを小さくする必要があると書きましたが、@hnwさんによると、VM命令が多過ぎるのが問題で、構造を簡単にしたことでVM命令が減ったのがよかったのではとのことでした。非常に参考になりました。ありがとうございました そろそろ傷が癒えてきた。。 ISUCON5の選にメルカリのインフ

    hiboma
    hiboma 2012/03/23
    どういうケースで効果高いのかな
  • CloudForecastでMySQLのレプリケーション監視 - blog.nomadscafe.jp

    MySQLのレプリケーションの遅延状況を取得するプラグインをCloudForecast体に追加しました。 host_configで --- component_config: resources: - traffic:eth0 - traffic:eth1 - basic - mysql - innodb - mysqlreplication このように追加すれば使えます。 作られるグラフな下のような感じで、秒数による表示とバイナリログのポジションの2つが作成されます。 グラフは某サービスの実際のレプリケーション遅延状況です。データが非常に多いので結構遅れてる事が多いですね。蛇足ですがMySQL4系の場合は「Seconds Behind Master」がないので秒数は常に0になります^^ 大きくレプリケーションが遅延するタイミングがあれば、その際に発行されているクエリを見直してみる等の用

    hiboma
    hiboma 2012/03/15
  • 最新のログファイルにリンクが作れるようになった Apache 2.4.1 の rotatelogs を試す - blog.nomadscafe.jp

    この機能欲しかったんだよねー。 CustomLogで、pipeしてrotatelogsを使ってログ分割を行う場合、 CustomLog "|/path/to/rotatelogs /path/to/log/access_log.%Y%m%d%H 7200 540" ログファイルは、 $ ls -1 access_log.2012030116 access_log.2012030118 の様に最新のファイルが変更になります。tail -f で追いかけていた場合は、途中でファイルを手動で切り替えないとならないのでとても不便です。また、fluentdのtail pluginも利用できません。 Apache 2.4.1 のrotatelogsでは、最新のファイルに対してハードリンクを張る機能が追加されたので、とりあえず試してみました。 $ wget http://ftp.riken.jp/net/

    hiboma
    hiboma 2012/03/02
    地味便利
  • GrowthForecastに1分更新グラフ作成とサマリーなどのJSONフォーマットでの出力機能追加 - blog.nomadscafe.jp

    「GrowthForecastというグラフ表示ツールで捗る話」で紹介したGrowthForecastですが、モリス氏のfluent meetupでの発表やriywo氏の発表で少し紹介されていたりするわけですが、社内でも少しずつメトリクスが増えて活用されています。 データが既に入っているので大きな変更はできないのですが、少し機能追加をしています。 ソースコード https://github.com/kazeburo/GrowthForecast GrowthForecast はWebアプリケーションとWorkerの2つから構成されています。APIに対してPOSTされたデータは、一旦SQLiteDBに格納され、Workerがそれを取得、RRDファイルを更新します。これまでは5分毎に動くworkerがいるだけでしたが、そこに1分毎動くworkerを追加しました。 上の図のようにworkerが2

  • nginx-1.1.x で httpなupstreamにもkeepaliveができるようになったので検証してみた - blog.nomadscafe.jp

    画像配信など大量にアクセスを捌く際にちょっと気になっていたhttpなupstreamとkeepaliveできない件が、nginx-1.1系でできるようになったので試してみた 今回keepaliveできるようになったのは↑のbackendと通信するところ。 家のドキュメントはこちら http://nginx.org/en/docs/http/ngxhttpupstream_module.html#keepalive keepalive機能を使うには、以下のように設定します http { upstream backend { server 127.0.0.1:5000; keepalive 16; } server { listen 8080; server_name localhost; location / { proxy_http_version 1.1; proxy_set_head

  • ImageMagickとOpenMPの件 - blog.nomadscafe.jp

    PerlMagick が OpenMP 有効だと高負荷になる件 :: drk7jp」の件 どうやら、Perlに限らずマルチプロセスでOpenMPが有効なImageMagickを動かすとパフォーマンスが悪くなるようです。 Enabling OpenMP for most algorithms creates 8 threads (1 per core). If your process creates 8 threads that’s a total of 64 threads and that is a whole lot of contention and possible misuse of your processor cache. 「ImageMagick • View topic - Multi Process Contention?」より ということで、small_light

  • そろそろSTFのデータベース運用についてひとこと言っておくか - blog.nomadscafe.jp

    祝オープンソース化。 STF 分散オブジェクトストレージシステム http://labs.edge.jp/stf/ ライブドアのサービスで主に画像管理用に使っているSTFがオープンソースで公開されています。 Perl/PSGI、Q4M、MySQL、Apacheという、Webアプリケーションエンジニアにとってとてもなじみやすい構成を取っており、実際運用もしやすくなっています。 ただひとつ気になるのはMySQLのデータのデカさ。3億オブジェクト/10億エンティティを保存した段階でのMySQLのデータサイズは、約220GBにもなります。これを潤沢にメモリを積み、SSDを4RAID10にしたサーバにて運用しております。 データの取り回しも大変で、データのダンプに数時間、リストアに数十時間、レプリケーションが追いつくのにまた数時間と移設作業を行うのにまるまる一週間かかるような感じです。とってもカジ

    hiboma
    hiboma 2012/01/04
    "3億オブジェクト/10億エンティティを保存した段階でのMySQLのデータサイズは、約220GBにもなります。これを潤沢にメモリを積み、SSDを4本RAID10にしたサーバにて運用しております。"
  • Q4Mを簡単に導入する方法 - MySQL Casual Advent Calendar 2011 - blog.nomadscafe.jp

    xaicronとネタが被ったようだけど気にしない>< livedoorでOperations EngineerやってるkazeburoだYo。最近livedoorからオープンソース化された3億ファイルを管理してるオブジェクトストレージ「STF」でも使ってるMessage QueueのQ4Mのインストール方法を紹介するよ! カジュアルだからインストールだけ! 知ってる人も多いと思うけどQ4Mはkazuhoさんによって開発されたMySQLのストレージエンジンとして実装されてるMessage Queue。livedoorではもちろん、mixiやDeNAをはじめソーシャルゲーム各社でも使われている。 Message Queueの説明や使い方はDIS_COMMENTでテーブルスペースフルの神様が書いてるので参考になるね! Perl Hackers Hub 第10回 ジョブキューで後回し大作戦―Th

  • GrowthForecastというグラフ表示ツールで捗る話 - blog.nomadscafe.jp

    追記 2012/06/22 公式ページを作りました。そちらも参考にしてくださいませ GrowthForecast - Lightning fast Graphing / Visualization http://kazeburo.github.com/GrowthForecast/ Kansai.pmのLTでも紹介したんだけど、APIを叩く事でグラフを更新するツールを書きました。話の発端としては「cloudforecastのグラフを外からAPIで更新したい」ということでしたが、cloudforecastではグラフの追加が重い処理になってしまうので、別のプロダクトとしています。 サーバの負荷などのメトリクスを収集し、グラフ化することで、システムに掛かっている負荷を把握し、パフォーマンスに影響がでるまえに対策をうったり、改善の結果を知る事ができますが、同じ事はシステムだけではなく提供しているサ

    hiboma
    hiboma 2011/12/01
    素敵
  • YAPC::Asia Tokyo 2011 で発表してきました。 - blog.nomadscafe.jp

    今年もYAPC::Asiaに参加してきました! 牧さん、941さんをはじめスタッフの皆様、スピーカーの皆様、そして参加者の方、お疲れさまでした。ありがとうー。 去年の発表はcloudforecastでしたが、今年は、「運用しやすいWebアプリケーションの構築方法」としてログ、DBI、memcached、matricsと4つほどトピックをあげて紹介しました。 YAPC::Asiaが始まるまえに id:tagomoris が「YAPC::ASIAで、あるいは他の勉強会で、しゃべりたいこと、聞きたいこと」というエントリーで、以下のようなことを書いていました。 ソフトウェア関連の勉強会に行ってしゃべらせてもらうとき、当然「自分は何をやったのか」を話しに行く。世の中にあるコレがこうなってるよというセッションももちろんあるけど、もちろんその話をする人はカタログを読み上げてるだけじゃなくて、その人が読み