サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
GPT-4o
kazeburo.hatenablog.com
この記事はMackerelアドベントカレンダー9日目の記事です。 今年新たに作ったmackerel pluginの数がとても少なかったのでショックを受けているMackerelアンバサダーのkazeburoです。 この記事ではそのうちの一つを紹介します。 mackerel-agent-pinging github.com 公式のpluginとして、check-pingがありますが、こちらはmetricsを取得するためのpluginとなります。 ariarijp さんによる mackerel-plugin-ping もありますが、こちらとは取得しているメトリクスが異なります。 github.com 使い方 $ sudo /usr/local/bin/mackerel-plugin-pinging --count 10 --key-prefix=example --host x.x.x.x pi
Mackerelアンバサダーになりました Mackerelアンバサダーになったので、グッズ頂いた。ありがとうございます pic.twitter.com/UzCmANa84O— Masahiro 💺 (@kazeburo) March 23, 2019 ということで、新しいmackerel-pluginの紹介です。 mackerel-plugin-axslog とは Mackerelの公式プラグインに mackerel-plugin-accesslog というとても便利なプラグインがあります。公式のブログに詳しく解説があります。 mackerel.io これを使うと、アクセスログのファイルサイズを記録しながら差分を読み、ステータスコードごとのアクセス数や割合、レイテンシなどを集計、可視化できます。 mackerel-plugin-accesslog、サーバの可視化のため、とても便利そうでと
振り返り的なやつです。 作った no_excl_open github.com LD_PRELOADをつかって、ファイルを作成する際の O_EXCLを取り除いてみるもの。 詳しくは YAPC::Okinawa 2018 前夜祭で喋った speakerdeck.com relaxlogs github.com daemontoolsで動かしているデーモンのログをもう少し長くとりたいということで書いたもの。lestrratさんのfile-rotatelogsをコマンドにしたものとも言える wsgate-server github.com なんらかの汎用的な認証を通して、MySQLに繋ぎたいということで書いていたもの。WebSocketはインターンにきていた優秀な若者がだしたアイディアからきている。 wsgate-client github.com wsgate-serverのclient。そう
Googleのhuproxyみたいなもので、任意のprotocolが通しやすく、Google Cloud Load BalancingのIdentity aware proxyに対応したものが欲しかったので、作ってみた。 github.com github.com GCPの中のMySQLに対して、service accountで認証して接続するイメージとしては以下のようになる。 server側 pathとforward先の設定を行うmapファイルをまずつくる mysql,10.0.x.x:3306 ssh,127.0.0.1:22 起動 $ wsgate-server --listen 0.0.0.0:8080 --map map-server.txt これで、 ws://example.com/proxy/mysql にWebSocketで通信を行うと 10.0.x.xの3306 に対し
2018年も後半だけど、普通のサーバ上でコンテナをHot Deployしたいと思ってproxy書いた github.com 任意のラベルがついたDocker containerのpublic portをdocker api経由で取得して、private portをlistenして、proxyを開始するものです。 ラベルがついたコンテナが複数個あると、必ず一番新しいものだけにproxyするようになってます。 これで、みんな大好きserver_starterと組み合わせると、Hot Deployができます。 使い方 コンテナを起動 $ KILL_OLD_DELAY=5 start_server -- docker run -P -l app=nginx nginx public portが32774、private portが80となります $ docker ps CONTAINER ID I
YAPC::Hokkaido、YAPC::Fukuoka に続き YAPC::Okinawa 2018 に行ってきました。 発表 発表は2つ。 前夜祭 開催前日に作った資料。logrotateとfluentdとPHPが絡んだわりと複雑な問題に対してLD_PRELOADというやや斜め上の方法をとった話です。 本編スペシャルセッション PHPとGo言語が中心になっている企業の中での「Perlのお仕事」の紹介です。cronlogにslackへの通知機能を盛り込んだslacklogと、大規模なトラフィックの一部を支えているPerlとQ4Mの話を紹介しました。今後Perlがどのような立場になっていくのか個人的な考えも含め述べさせていただきました。 冒頭でmemcachedの問題についてもすこし紹介しています。 他にもバススポンサーをやらせていただいていたので、バスの中でトークなどを行いました。 会場
振り返り的なエントリです。 3月 さくらインターネット プレゼンツ メルカリ×はてなの夕べ さくらさん、はてなさんのイベントのセッションに参加しました。専用サーバをどのように使っているかという話をはてな id:wtatsuru さんとしました。 hatenanews.com SendGrid Night 7 SendGrid Night 7 メルカリUS-UKでの事例とバウンスメール処理/Mercari US-UK and Bounced mail processing // Speaker Deck メルカリUS/UKで使っているメール配信の話をしました。EventHookを使ってリターンメール処理とmackerelによるモニタリングを実現しています。 sendgrid.kke.co.jp AWS Dev Day 2017 Cloud connect the world as a Glu
ISUCON7に id:sugyan と id:gfx と、チーム「スギャブロエックス」で出場して、2日目の2位、全体でも2位で予選通過できました。 icon画像さえ突破できれば、よく練られている問題で楽しめました。サーバもベンチマークも快適に動いて課題に集中出来ました。運営の皆様ありがとうございます。 すでに同じチームの2名がblogを書いているので、そちらも御覧ください memo.sugyan.com gfx.hatenablog.com チームのソースコード、設定もgithubで公開しています。 github.com 最終スコアは 522461、ベストスコアも 522461 です。 言語の選択 最初はGo or Perlという話をしていたのですが、nodejsがサポートされるということが発表された段階で、gfxよりnodejsで行きたいという提案があり、nodejsで行くことにしまし
GCP HTTP(S) load balancing の X-Forwarded-For ヘッダは少し変わっているのでメモ。 X-Forwarded-For とクライアントIP ELBや他のproxyを使って、その配下のサーバにリクエスト元のIPアドレスを伝える際には、X-Forwarded-For ヘッダが使われます。 X-Forwarded-For: $remote_addr リクエストにすでにX-F-Fヘッダがあった場合は、後ろに追加します。 X-Forwarded-For: $http_x_forwarded_for, $remote_addr となります。 X-F-Fを受け取ったサーバでは、アクセス元のIPが信用できるIPアドレスまたはIP帯域の場合に、X-F-Fの最後のIPアドレスを、remote_addrとして利用します。 nginxでは ngx_http_realip_mo
pt-query-digestだったり調査のために、N秒間だけmysqlの全クエリのログを取得したいということはよくありますよね そんな時はこんなコマンドを使うと簡単に指定の秒数slowlogを切り替えて保存、取得後に元に戻してくれます。 $ slowlog.pl --duration 10 -- --default-extra-file=/hoge/my.cnf -uuser -- のあとはmysqlコマンドに渡すオプション ソース #!/usr/bin/perl use strict; use warnings; use IO::Handle; use Getopt::Long; use File::Spec; sub find_path { my $pg = shift; my $path; for ( split /:/, $ENV{PATH} ) { if ( -x "$_/$p
JPAの新しいメンバーのもと、REBOOTされたYAPC::Asia、YAPC::Hokkaido 2016 SAPPOROに、ゲストスピーカーとして呼んでいただけたので、行ってきました。 発表資料はこちら。 メルカリの技術ブログで紹介したSRE、1年たってエンジニアの新しいロールとして少しずつ浸透してきたと思います。今回の発表ではSREとはということで、本家であるGoogleのSREについて、メルカリでの取り組みについて、そしてYAPCなので、SREとPerlを結びつけてまとめとしました。参考になれば幸いです。 今回のYAPC、試させる大地での開催、それも29年ぶりの大雪という悪天候に見舞われましたが、普段なかなかない環境ということでかなり楽しめました。 1日目 まず飛行機が30分遅れ。途中で引き返すかもよという条件付き飛行で出発 11:00 発が 11:25 発になったぞ。。— mas
Ruby 2.4.0-preview3 で Hash まわりの改善があったということで、pico_http_parser のベンチマークを取ってみた Ruby 2.4.0-preview3 リリース GitHub - kazeburo/pico_http_parser: Fast HTTP Parser using picohttpparser ベンチマークは。pico_http_parser/benchmark 以下のscript。結果としては1.5倍程度パフォーマンスが上がっていることが観測できました。リアルなアプリケーションでも速度アップが見込めるんじゃないかなと思います。素晴らしい ヘッダが0個の時だけパフォーマンスが悪くなるのは、Hashの要素数が少ないときの最適化が変わったのかなと予想
libeatmydataというLD_PRELOADを使って、起動したプロセスのfsyncを無効化するライブラリがあったので試してみています。 libeatmydata - disable fsync and SAVE! fsyncがないと何が嬉しいかというとクラウドのようなIOまわりの環境が弱いところで、安全性は若干犠牲になりますが、パフォーマンスを稼ぐことができるようになります。 まず perlでfsyncを発行してどうなるかstraceをつかって確認してみます。 libeatmydataなし $ strace perl -MIO::Handle -e 'open(my $fh,">:unix","test.txt"); print $fh "test"; IO::Handle::sync($fh);' open("test.txt", O_WRONLY|O_CREAT|O_TRUNC,
OSS活動の成果発表のお時間です。 Plackの 1.0038と2015年11月27日時点のmasterにはPlack::Request、Plack::Responseのパフォーマンスをあげる変更が入ってます。その紹介とベンチマークです。 github.com Plack 1.0038 で HTTP::Headers::Fast 0.20 につけた flatten メソッドを使うようになってます。Plack::Response->finalizeのパフォーマンス向上が期待できます。 github.com こちらはまだmasterにmergeされた状態。リリースはされてない。POSTリクエストのパースにHTTP::Bodyではなく、HTTP::Entitiy::Parserを使い、パラメータのパースに WWW::Form::UrlEncodedを使うようになっています。 HTTP::Enti
crontabファイルをrespositoryで管理していますが、テストができてなかったので、それを解消すべくTravis-CIでやってみました。 .travis.yml language: ruby script: - cat crontab.ok.txt | crontab - cat crontab.fail.txt | crontab travisで実行された様子 意外なことに簡単に動いた。 Travisはcrontabが登録されても実際にはコマンドが動かない、はず。 songmuさんのParse::Crontabも非常に良いのですが、今のプロジェクトはPerlのプロジェクトではないので若干入れにくい。 参考 おそらくはそれさえも平凡な日々: 運用におけるcrontabのテストとParse::Crontab 第25回 cron周りのベストプラクティス(1):Perl Hackers
今年のblogはまだ書いてないけど書きました、これまでYAPC::Asia Tokyo で喋ってきたblog記事をまとめてみました 2007年から2015年まで10回中9回、トーク(2007年はLT)をさせて頂きました。 2015 ISUCONの勝ち方 isucon優勝するぞー! blog.nomadscafe.jp 2014 Dockerで遊んでみよっかー 2014年はDockerの話をしました blog.nomadscafe.jp 2013 PSGI/Plack・Monocerosで学ぶハイパフォーマンスWebアプリケーションサーバの作り方 2013年はPlackのサーバを作る話。前夜祭LTもやりました blog.nomadscafe.jp 2012 1台から500台までのMySQL運用(YAPC::Asia編) 2012年はDB運用の話 blog.nomadscafe.jp 2011
Herokuに続き、Unicornの2倍のパフォーマンス発揮するRackサーバ「Rhebok」をパパボさんのPaaSであるSqaleで動かしてみる。15日間は無料お試しが出来るそうですよ。 Sqale - 開発者のためのホスティングサービス【スケール】 Ruby on Rails 対応。 Gemfileの用意 まず Gemfileを用意します。適当なディレクトリで $ bundle init して Gemfileを編集します cat Gemfile # A sample Gemfile source "https://rubygems.org" gem "rails", "4.2.0" とりあえず最新のRails 4.2.0で固定して、bundle install $ bundle install --path vendor/bundle Railsアプリケーションの作成 $ bundle
Unicornの2倍のパフォーマンス発揮するRackサーバ「Rhebok」をherokuで動かしてみる アプリケーションは heroku で Sinatra のアプリを動かす - Please Sleep を参考にさせて頂きました。 Gemfile まずGemfileを用意します $ cat Gemfile source 'https://rubygems.org' ruby "2.1.5" gem 'sinatra' gem 'gctools' gem 'rhebok' rubyのバージョンは2.1系を使い、gctoolsもいれます。Rhebokはgctoolsに含まれるGC::OOBを利用し、リクエスト処理終了後(Out Of Band)のGCを効率的に行います。 tmm1/gctools · GitHub 日本語訳: Ruby 2.1: Out-of-Band GC — sawano
GazelleでやったことをRubyでもやってみようと思い、まず picohttpparser の Ruby バインディングと、perforkなサーバを書く時に便利なモジュールであるParallel::PreforkのRuby版を書いてリリースしました。 pico_http_parser http://rubygems.org/gems/pico_http_parser prefork_engine http://rubygems.org/gems/prefork_engine そしてこの2つを使って、StarletのRuby版を書いてみました。ソースコードはprefork_engineのrepositoryにあります。 https://github.com/kazeburo/prefork_engine/blob/master/example/starlet.rb 動かし方 まず上の2つ
I released Gazelle, new Plack handler Gazelle - Preforked Plack Handler for performance freaks - metacpan.org Gazelle is a Plack Handler/PSGI server. This server is optimized for running HTTP application server behind a reverse proxy like nginx. When start Gazelle behind nginx and connect via unix domain socket, Gazelle is 3 times faster than starman. Here is benchmark of Gazelle, starman and Star
本選までの間に地道に復習をした結果です。 repositoryはここで公開されています https://github.com/kazeburo/isucon4-elimination-myhack 最終スコア 派手な点ではありませんが、63000弱となりました $ ~/benchmarker bench --workload 8 07:26:29 type:info message:launch benchmarker 07:26:29 type:warning message:Result not sent to server because API key is not set 07:26:29 type:info message:init environment 07:26:44 type:info message:run benchmark workload: 8 07:27:44
年末恒例 kazeburo.hatenablog.com 今年は家を買いました。 新築マンションですが、早い時期から相談していたのでオーダーメイドで間取りを変更して、書庫をつくりました。 仕事机まわり いくつかのプロジェクトで出社しての打ち合わせが多い時期もあったけど、今年も基本リモートワーク。 引っ越して机も買い替えで KANADEMONOさんの リノリウム天板にした kanademono.design 机の下にはサンワダイレクト ケーブルトレーを設置している。横90cmあるのでいろいろ収められて便利 サンワダイレクト ケーブルトレー デスク下 メッシュ ケーブル配線トレー 幅90cm ネジ固定タイプ 200-CT005BK サンワダイレクトAmazon モニタは Intehill のモバイルモニター U16NAってのものを買った。 16" 4K+ Monitor with P3 98%
AMIが公開されたのでもう一度やってみた。 AMIについてはこちらのエントリに書かれています ISUCON4 予選問題の解説と講評 & AMIの公開 : ISUCON公式Blog まず ami-e3577fe2 を m3.xlargeで起動します。 CPUは model name : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz でした。 とりあえず、MySQLのindexを追加する。init.shに追加 $ cat init.sh cat <<'EOF' | mysql -h ${myhost} -P ${myport} -u ${myuser} ${mydb} alter table login_log add index ip (ip), add index user_id (user_id); EOF ベンチマークツールのhttp keepal
I made a simple heroku-buildpack for perl. With using this buildpack you can run any perl application from Procfile. github: https://github.com/kazeburo/heroku-buildpack-perl-procfile Sample and Usage This sample runs a PSGI server and a worker in 1 Dyno (It's free). $ ls cpanfile Procfile server.pl lib/ $ cat cpanfile requires 'HTTP::Tiny','0.043'; requires 'Getopt::Long'; requires 'Proclet'; req
DBIx::TransactionManager 1.13で子プロセスでrollbackを実行しないような変更が入っています。 https://metacpan.org/release/NEKOKAK/DBIx-TransactionManager-1.13 TengやDBIx::Sunnyなどでトランザクションを使用し、File::RotateLogsでログを書き出している場合はバージョンアップをお勧めします。 経緯など 某サービスにおいて、DBIx::TransactionManagerを使ってトランザクションを実行している箇所で9時にトランザクションが意図せず終了するという問題がありました。 コードにするとこんな感じ my $rotatelogs = File::RotateLogs->new( logfile => '/path/to/access_log.%Y%m%d%H%M',
社内で少し話題になったので。 運用上の話はfujiwaraさんの MySQLをmaster:slave=1:1構成にして参照をslaveに向けるのがなぜ良くないか - 酒日記 はてな支店 MySQLで参照の負荷分散を行うslaveは3台から構成するのがよいのでは - 酒日記 はてな支店 をみてください。 最近、新しくサービスができたり、新規機能でデータベースを追加する際には必ず全ての参照をmasterに向けてもらっています。理由は上記のエントリを読んでください。このような構成が取れるのはもちろん性能的にそれで問題ないからです。 新しいハードウェアに、設定されたMySQL、問題のないように書かれたSQLであれば、数千QPSは余裕に、また少し頑張れば数万QPSを一台で賄えます。なので大体のサービスはmaster一台で十分です。 さらにこの考え方を進めて、Webアプリケーションの中で sub d
Starlet-0.21がリリースされました。 Starlet-0.21 - a simple, high-performance PSGI/Plack HTTP server - metacpan.org - Perl programming language このバージョンからServer::Staterとの組み合わせでUNIX domain socketをListenすることができるようになりました。 $ start_server --path /tmp/app.sock -- plackup -s Starlet app.psgiServer::Stater は以前からUNIX domain socketをサポートしていたのですが、Starlet側でうまくハンドリングできていなかったのを修正したのが今回のリリースです。 ベンチマーク #plackconでの発表にもある通り、UNIX
ISUCON3 の予選AMIが公開されてから、ごにょごにょとHackした結果、スコアで65000まで出す事ができました。(一回だけ66000でけどたぶんインスタンスガチャ) 「ISUCON 本戦出場者決定のお知らせ」をみると予選の時のトップのスコアが3.3万(自分たちは1.5万ぐらい)、その後の解説記事「ざっくりと #isucon 2013年予選問題の解き方教えます」だと、5.6万という話でしたので、その数字よりも良いスコアを出すことができました。 んで、本選終わったのでそのソースコード公開しました。 https://github.com/kazeburo/isucon3qualifier-myhack 構成はnginx + perlです。主なポイントは セッションに直接ユーザIDを埋める / と /recent は静的にHTMLを書き出して、nginxのssiを使ってセッション情報を埋め
セッション管理モジュールやルーティングライブラリが速くなる事で何もしなくても isucon3 予選のperlのアプリケーションが高速化していく— masahiro nagano (@kazeburo) October 10, 2013 ということで、やってみた。 初期 「オンライン予選で使用した問題が手元で再現できるAMIを公開しました」に書かれているAMIを使って起動し、まず、初期状態でのベンチマークを取ってみる。 2013/10/28 14:21:18 done benchmark Result: SUCCESS RawScore: 865.9 Fails: 0 Score: 865.9 disble? たぶんミスだと思うのですが、Starmanの起動オプションがdisbleになっていたので修正 - command=/home/isucon/env.sh carton exec --
次のページ
このページを最初にブックマークしてみませんか?
『Hateburo: kazeburo hatenablog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く