人間とウェブの未来

「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。

運用

viを:wqや:q!、あるいはZZで終了するのとではどちらが効率的か

後ろの方に追記をいくつか書いているのでそちらも是非参照ください 今日さくらインターネット研究所の雑談タイムで、viの終了時には:wqや:q!とかで終了するよりもZZで終了すべき、という話題が出た。 ここで簡単に整理しておくと、 :wqはファイルを上書き保…

第二回 #wsa研 でHTTPリクエスト単位でコンテナを再配置する仮想化基盤の高速なスケジューリング手法について発表しました

第二回Web System Architecture研究会で、タイトルの内容について発表してきましたので、そのスライドと予稿を以下に公開します。 speakerdeck.com 英文タイトルは以下の通り。 Fast Scheduler for a Cloud Platform to Relocate Containers at Each HTTP Re…

2018年の抱負 - Webホスティングサービスの技術を体系化したこととその意図について

2018年の電子情報通信学会論文誌BのVolume J101-B No.1(発行日:2018/01/01)「ネットワーク社会に向けたインターネットアーキテクチャ論文特集」に、我々が執筆した「Webサーバの高集積マルチテナントアーキテクチャと運用技術」という招待論文が掲載されま…

メール送受信システムを幸せにするべく受信サーバdovecotのmruby拡張を書き始めた

以前、メール送信(SMTP)サーバの振る舞いを制御するために、mrubyで機能拡張できるpmilterというMilterプロトコルベースのミドルウェアを作りました。 hb.matsumoto-r.jp その流れで、メール受信(POPやIMAP)サーバの振る舞いも同様に制御することによっ…

PHPが動くApacheのコンテナ環境をhaconiwaで1万個動かそうとしてみた

RubyKaigiに行くと本にサインを求められるすごいエンジニアが書いたhaconiwaというmruby製のコンテナエンジン(コンテナ環境構築の基盤ツール)があるのですが、少し試してみようと思って、とりあえず1サーバ上に1万コンテナぐらい動かそうとしてみました。…

CPU使用率100%のWebサーバをOSのチューニングだけでCPU使用率20%まで改善する

こんばんは、 @matsumotoryです。 hb.matsumoto-r.jp 上記エントリにおいて、プロセスの大量メモリ確保に伴うページテーブルサイズとベージテーブルエントリ数の肥大化によるcloneやexecveの性能劣化とCPU使用時間の専有問題、および、それらの解決方法につ…

特定条件下のclone(2)を4倍速くする

とあるサーバで妙にシステムCPUの使用率が高い現象が置きておりました。 そこで、まずはざっくりとperf topでプロファイルをとってみると、以下のようになっていました。 22.38% [kernel] [k] copy_pte_range 18.44% [kernel] [k] zap_pte_range 11.13% [ker…

HTTP/2へのmruby活用やこれからのTLS設定と大量証明書設定の効率化について

Webサービス事業者として僕が先行して調査したり研究・開発している技術の中で、Webサーバ設定におけるHTTP/2とそのmruby活用についてや、PFS(Perfect Foward Secrecy)を考慮したTLS設定と大量証明書設定の効率化について、社内のインフラエンジニア向けに…

mruby-cliを使ってプロセスのfdをリソース使用率を元に解析するワンバイナリなツールpfdsを作った

タイトルのままなのですが、pidから対象プロセスがopenしてるファイルとそのownerを解析し、CPU使用率やMemory使用率と合わせてレポートするワンバイナリなツールを作りました。 というのも、ホスティングにおいては負荷をかけているプロセスについて、リソ…

Webサーバの仮想ホスト単位のリソース使用量をFluentd+Norikra+GrowthForecastでグラフ化

ご存知の通り、ApacheのVirtualHost(以下vhost)、所謂、Webサーバの仮想ホストは単一のApacheで複数のホストを処理しています。そのため、複数のvhostを含めたCPU使用量といったリソース使用量をグラフ化することは簡単なのですが、vhost単位となると各vho…

ApacheのVirtualHost単位でMaxClientsを設定するApacheモジュールをOSS化

一つのサーバに多数のホストを収容するような高集積なホスティングサービス(所謂レンタルサーバ)を提供しようとすると、収容しているユーザ単位でいかにリソースをコントロールするかが運用者には求められます。 そういう状況で、これまでApacheには色々な…

H2Oとmrubyを使ってIPアドレスベースでアクセス制御しつつリバースプロキシとして動かしてWebサイトをHTTP/2化しよう

弊社インフラチームが使っているmuninをh2oのHTTP/2で高速化して、諸々の制御はmrubyでコントロールした。チームから「はやーい!」「スクロールで勝てない!」「こんな早い表示最近みたことなかったですよ!」と喜びの声が多数届いております。— MATSUMOTO,…

Mac上でCentOS6用のkernel{3,4}系イメージのrpmを一発でビルドするビルドシステム作った

Kernelの新しい機能をフルに使おうとすると、新しいkernelを使う必要があるのですが、例えばCentOS6系でシステムを運用していた場合に、新しいKernelを使うべくCentOS7とかにあげるとsystemd含め運用が大きく変わってしまうため中々踏み出せないという状況が…

Apacheやnginxの同時接続状況における各リクエストの任意の属性をカウントする拡張を作った

先日、ApacheやnginxといったWebサーバにおいてDoS的アクセスを検知して任意の制御を行うhttp-dos-detectorを公開しました。 nginxでもapacheでも使用可能なDoS的アクセスを検知して任意の制御をするWebサーバ拡張をmrubyで作った - 人間とウェブの未来hb.ma…

「ペパボのインターネット基盤技術研究・開発の活動」についてペパボテックカンファレンス福岡で発表しました #pbtech

ブログ書くまでがペパボテックカンファレンス!ということで、昨日無事福岡支社で第二回ペパボテックカンファレンスが開催されました。参加して下さった皆さん、弊社までお越し頂きありがとうございました。 第2回ペパボテックカンファレンス【福岡】 (2015/…

nginxでもapacheでも使用可能なDoS的アクセスを検知して任意の制御をするWebサーバ拡張をmrubyで作った

matsumoto-r/http-dos-detectorgithub.com 会社の運用メンバーと色々議論していた中で、「カジュアルにWebサーバへのDoSみたいなアクセスが来た時に検知して制御したいよねー」という話が上がったので、http-dos-detectorというnginxでもapacheでも使えるWeb…

virtualingを使ってプロセスのメモリ使用量上限値をOoM-Killerのタイミングで自動拡張してみた

virtualingとは、わりとセキュアでCPUやメモリ・IOといったリソースの制御が可能なプロセス実行環境上で、設定や構成を変える事なくミドルウェアのようなプロセスを動作させることができるツールです。実装はmrubyです。 matsumoto-r/mruby-virtualinggithub…

Rubyでabコマンドをプログラマブルに操作できるab-mrubyを業務で使ってみたけどまぁまぁ良かった

1年前ぐらいにab-mrubyという、Rubyでabコマンドをプログラマブルに操作・拡張できるツールを作っていたのですが、それを業務のとある環境で使ってみたところまぁまぁ良かったのでその使い方を紹介しようと思います。

ファイルをrmしたがプロセスがファイルを掴んでいる場合にそのファイル内容を再度得るには

ど忘れしていたのでメモです。 LinuxでApacheのログローテート時に、プロセスをgracefulしたつもりが何らかの原因によりできていなくて、その後古いログファイルを圧縮して、いらなくなったその生ログファイルをrmしたつもりが、プロセスはそのログファイル…

特定条件下におけるngx_mrubyのメモリリークを改善してメモリ増加量を半分にした

4月からペパボで働いているわけですが、前々から噂できいていたメモリリークの問題について、ペパボではわりと大規模かつ高負荷な環境でngx_mrubyを使ってくれているのでその環境を見ながらメモリリークを改善してみました。

独自でngx_mrubyのDockerイメージを作る方法

随分前にngx_mrubyをDocker対応していたのですが、最近になってより使いやすくなったので、ngx_mrubyをDockerで使う方法を簡単に紹介します。

ApacheでCGIを使う場合にpreforkを使った方が良い状況とそのチューニングについて

かなり今更感の漂う内容ではありますが、意外と情報が分散していたり、Apache2.4系を考慮した場合に足りていない内容があったのでこのエントリで一度まとめてみようと思います。 CGIを使うようなシステムでそれなりにアクセスが集中するサーバ、例えば日々の…