タグ

cacheに関するbayashi_netのブックマーク (27)

  • Stale-While-Revalidate ヘッダによるブラウザキャッシュの非同期更新 | blog.jxck.io

    Intro システムにおいてキャッシュの設計は永遠の課題であり、 Web のパフォーマンスにおいても非常に重要である。 Web では、 HTTP ヘッダを用いてブラウザやプロキシにキャッシュの制御を指定する。 Stale-While-Revalidate ヘッダは、このキャッシュ制御に選択肢を追加する新しい仕様である。 このヘッダの概要と、サイトへの適用を解説する。 Web におけるキャッシュ キャッシュの種類 まず、ブラウザが持つ従来のキャッシュの機構について整理する。 そもそも、キャッシュを行う意義は大きく二つある。 リソースの取得を高速化する サーバへの負荷を減らす これまでは HTTP ヘッダを用いて、キャッシュを管理させる方法を用いてきた。 Web における、キャッシュの指定には大きく二つの方式がある。 ブラウザはリクエストを発行せず、保持するキャッシュを使用する(Cache-

    Stale-While-Revalidate ヘッダによるブラウザキャッシュの非同期更新 | blog.jxck.io
  • dentry cacheの解放 - wyukawa's diary

    メモリ使用量がずっと増え続けているマシンがあったんだけどtop+shift+mしても別に特定のプロセスがメモリをいつぶしているわけではないので原因が分からなくて困ってました ambari-serverとprestogresが動いているマシンで同じ傾向だったことから状況証拠としてはpostgresqlが怪しいんだけどpostgresql再起動しても状況変わらなかったです。ちなみにOSはCentos 6.5です。 で、結論から言うとどうもdentry cacheが原因で sudo /sbin/sysctl -w vm.drop_caches=2すればメモリががつっと減りました。 一番メモり使用量が大きかったマシンだと/proc/meminfoのSlabが38GBぐらい占めててslabtopでdentryが多いのを確認してキャッシュを解放しました。 そうすると以下のようにがつっと減りました。こ

    dentry cacheの解放 - wyukawa's diary
  • slab肥大化とdentry_cacheに辿り着くまでの話 - Qiita

    内容(3行) memoryの使用量を監視している所からアラートが来て調査した アプリケーションのheap使用率は高くなく、top等を見ても他に怪しいプロセスが存在しない /proc/meminfoからslab領域の肥大を確認、slabtopでdentry_cacheが肥大化している事がわかったので、echo 2 > /proc/sys/vm/drop_caches を実施した 何があったのか 運用中のとあるサーバーのmemoryが残り20%を切ったとアラートが来たため、調査を行った。 当初は何かしらのプロセスがメモリリークしているか何かだろうとあたりをつけていた。 freeで現状確認 キャプチャとるの忘れた… が、一旦確かにfree(buffers, cahceを足したもの)がtotalの20%を切っていることを確認。 topで確認する アプリケーションプロセスにメモリを大量消費しているプ

    slab肥大化とdentry_cacheに辿り着くまでの話 - Qiita
  • Tutorials

    Jitsi Meet is a secure videoconference service that allows you to host your conference on your se...

  • にひりずむ::しんぷる - shipped Cache::LRU::WithExpires

    Cache::LRU::WithExpires - can set an expiration for the Cache::LRU - metacpan.org Cache::LRU に expires の機能をつけただけのモジュールですね。 最初はプロダクトのコードで使っていましたが、だれか (たしかグニャラくん?) がコピペして再利用していたという話を聞いて、まぁ需要あるなら出すかーって感じで考えててすっかり忘れてたんですが思い出したので出しましたっていうストーリーです。 使い方は簡単で、オケツに expires を指定するだけです。Time::HiRes しているので、ミリ秒も OK。 use Cache::LRU::WithExpires; my $cache = Cache::LRU::WithExpires->new; $cache->set('hirose', '31',

  • FRiCKLE Labs / nginx / ngx_cache_purge

    nginx / ngx_cache_purge (project fully funded by yo.se) Module adding ability to purge content from nginx's FastCGI, proxy, SCGI and uWSGI caches. View: README file, CHANGES file. Download: ngx_cache_purge-2.3 (SHA1: 69ed46a23435e8dfd5579422c0c3996cf9a44291) GitHub repository: http://github.com/FRiCKLE/ngx_cache_purge/ Example configuration: proxy_cache_path /tmp/cache keys_zone=tmpcache:10m; loca

  • ナイーブなオンメモリキャッシュ実装をかいた - tokuhirom's blog

    https://github.com/tokuhirom/Cache-Memory-Simple/blob/master/lib/Cache/Memory/Simple.pm Expire されたデータがとれなくなるだけのナイーブなキャッシュ実装をかきました。 わりとみんな手でかいてるとおもうんですが、手でかくとバグりやすいしテストかくのも面倒なので CPAN にあげておくといういつものアレです。Expire がきいてシンプルではやそうなのがなかったんでまあ。 10秒ぐらいhttpdの中にオンメモリキャッシュしときたいなあ、という時などにどうぞ。 使い方は以下のようなかんじです。 use Cache::Memory::Simple; use feature qw/state/; sub get_stuff { my ($class, $key) = @_; state $cache = C

  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • isuconお遊びチーム(事前社内β組)の設定あれこれ - hideden.hatenablog.com

    ISUCONに行ってきました。社内での事前βテストに参加して問題を知っていたので出場はせず。社内β参加を持ちかけられたときは、正直「めんどくせーなw」が素直な感想だったんですが、実際にやってみるとスコアがリアルタイムにわかる&ちょっとずつ自分のスコアが上がっていくってのは楽しくて、わりと気でチューニングしてしまいました。 さて、戦でも14時頃からお遊び用としてサーバー一式が解放されたので、大人げも無くそこで112500req/minをたたき出して参加者のやる気を削いだ(・・と懇親会で言われました。色々すいません!)構成について。 reverse proxy nginx(1.0.5) ngx_http_memcached + ngx_http_ssi_filter + ngx_http_scgi + ngx_http_upstream_keepalive(3rd party plugin

    isuconお遊びチーム(事前社内β組)の設定あれこれ - hideden.hatenablog.com
  • KeyedMutex::Memcached ってモジュールをリリースして何も言ってなかった件 - 日向夏特殊応援部隊

    id:kazuhooku さんがかつて作った KeyedMutex を memcached でやってしまおうと言うのがこのモジュールの目的です。 KeyedMutex の場合は、keyedmutexd と言うそれ専用の daemon を立ち上げなければいけませんが、このモジュールの場合は既存のシステムに memcached があれば普通に使えます。 trial を 0 にすると timeout で lock が expire するか、誰かが lock を開放するまで延々と lock の獲得が出来るまでビジーループします。一方で trial を有限の正整数とすると、その試行回数で lock が獲得出来ない場合は即座に諦めます。 正規の使い方としては lock を獲得出来るのが同時に1クライアントのみで他はそれが開放されるまで待たせると言うのが正解ですが、ちょっと変わった使い方としては、例えば

    KeyedMutex::Memcached ってモジュールをリリースして何も言ってなかった件 - 日向夏特殊応援部隊
  • HTTPリクエストに基づくファイルキャッシュ機構

    HTTPリクエストに基づくファイルキャッシュ機構のソースを公開しました。リクエストをしばらく集計してからキャッシュするファイルを決めて、非同期にファイルをSSDにキャッシュするので、mod_disk_cacheのようにリクエスト時にクライアントを待たせることがありません。技術的な概要は前に説明した通りです。この説明と大きく異なるのは、rsyncを実行しないで自前でファイルを更新することです。

    bayashi_net
    bayashi_net 2011/03/09
    「リクエストをしばらく集計してからキャッシュするファイルを決めて、非同期にファイルをSSDにキャッシュするので、mod_disk_cacheのようにリクエスト時にクライアントを待たせることがありません」
  • Cache::Memcached::Fastの高速化

    一番簡単に高速化するには シリアライザをData::MesagePackにするとよいかもしれない。 #! /usr/bin/perl use strict; use warnings; use Cache::Memcached::Fast; use Data::MessagePack; use Benchmark qw/timethese/; my $normal = Cache::Memcached::Fast->new({ servers => ['127.0.0.1:11211'], serialize_methods => [ \&Storable::freeze, \&Storable::thaw ], }); my $msgpack = Cache::Memcached::Fast->new({ servers => ['127.0.0.1:11211'], serialize

  • キャッシュシステムの Thundering Herd 問題対策モジュール Cache::Isolatorというのを書いた。 - blog.nomadscafe.jp

    やや大袈裟な名前ですが「memcachedにおけるキャッシュシステムの Thundering Herd 問題への対策案」とか「キャッシュシステムの Thundering Herd 問題への対策案。その2 排他制御」で書いていたコードをモジュールにした github: https://github.com/kazeburo/Cache-Isolator 機能としては、平行動作数を制御できるget_or_setと、一定の確率で少し早く有効期限が切れるキャッシュの保存、取得、削除あたりがあげられます 使い方ですが、まず、get_or_setの例。 my $isolator = Cache::Isolator->new( cache => Cache::Memcached::Fast->new(...), concurrency => 4, # get_or_setのcallbackの最大平行動作

  • memcachedにおけるキャッシュシステムの Thundering Herd 問題への対策案 - blog.nomadscafe.jp

    キャッシュシステムの Thundering Herd 問題とは、 通常、キャッシュに格納されるデータは、それぞれ単一の生存時間をもっています。問題は、頻繁にアクセスされるキャッシュデータがエクスパイアした際に発生します。データがエクスパイヤした瞬間から、並行に走る複数のアプリケーションロジックがミスヒットを検知し、いずれかのプロセスがキャッシュデータを格納するまでの間、同一のリクエストが多数、バックエンドに飛んでしまうのです。 という問題。クエリが重かったりするとそれだけでシステムに致命的な負荷を与えてしまい、キャッシュがあるにも関わらずキャッシュが切れたタイミング全体が停止することも考えられます。memcachedでこの問題に対応するため、次のような手段を考えてみました。 まず、保存時に通常のキャッシュと、それよりも指定した秒数Expiresが短いキャッシュを2つmemcachedに対し

  • Cache::LRU (a handy and fast in-memory cache module in pure-perl)

    Cache::LRU (a handy and fast in-memory cache module in pure-perl) Last week, after not being able to find a handy and fast cache module, I decided to write one by myself, and the outcome is Cache::LRU. Cache::LRU is an in-memory cache module written in pure-perl. It has no dependencies, and the code is less than 100 lines long. Yet it is faster than other modules as the result of a primitive bench

  • ファイルがページキャッシュに乗っているかどうかを調べる - ablog

    Linux上で任意のファイルがページキャッシュに乗っているかどうか調べるCで書かれたプログラムを見つけたので、コンパイルして実行してみた。 Linux上のとあるファイルがページキャッシュに乗っているかどうかを調べたいなーと思ってGoogle先生にご相談したところ、こんなコマンドを教えてくれた。 ファイルをメモリにマップして、mincore(2)でページごとにRAMに存在するかどうかをチェックしているらしい。 mmapしても即メモリにロードされるわけではないのかぁ。 Cの部分だけ抜き出して、単体で動かしてみた。 #include <errno.h> /* errno */ #include <fcntl.h> /* fcntl, open */ #include <stdio.h> /* perror, fprintf, stderr, printf */ #include <stdlib.

    ファイルがページキャッシュに乗っているかどうかを調べる - ablog
  • キャッシュを制御してサイトの高速化を実現するAapcheモジュールmod_expiresのPlack版をリリースしました - blog.nomadscafe.jp

    レスポンスヘッダにExpiresやCache-Controlを追加することで、ブラウザのキャッシュを有効活用し、ダウンロードの時間をなくす事でウェブの高速化を実現できます。またサーバ側にとってもリクエスト数を減らす事ができ、負荷の削減にもなります ApacheにはExpiresやCache-Controlを付加するmod_expiresというモジュールがありますが、Plackにはまだなかったので作ってみました。VarnishのようにWebサーバ機能を持たないリバースプロキシを使う場合には、便利なんじゃないかなぁと思います CPANにリリース済みです http://search.cpan.org/dist/Plack-Middleware-Expires/ 使い方 builder { enable 'Expires', content_type => [ 'text/css', 'appli

  • ブラウザキャッシュによる HTTP 高速化チューニング

    かれこれ一年ほど前に実施した実サービスでの apache のチューニングネタを思い出したように書いています。 以前いた部署では少ないサーバ台数で大量のリクエストを如何に処理しきるかってことに燃えていたので、静的コンテンツなどをブラウザに支障のない範囲で最大限にキャッシュさせ、サーバとネットワークの負荷を最小化させていました。 当時参考にした情報源は以下の3つでした。 どのようなレスポンスヘッダを返しておけばブラウザキャッシュを最大化できるかのテクニックがまとめられています。 ブラウザキャッシュとレスポンスヘッダ - murankの日記 Kazuho@Cybozu Labs: キャッシュの上手な使い方 [Studying HTTP] HTTP Status Code チューニングにおいて重要なのは自分自身での検証。というわけで自前で検証した結果と検証するために用意したプログラムを公開します。

  • JSONPなAPIの負荷対策にngx_http_jsonp_callbackってのを書いてみた - hideden.hatenablog.com

    認証が不要で、結果をJSONPで返してくれるAPI。大体は高速化の為にmemcachedを使用し、cacheが存在すればcacheから、存在しなければDB等から引いてcacheに入れ、その後結果を返す設計になってるはず。 URL: http://api.example.com/count?user_id=12345&entry_id=12345&callback=hoge response: hoge({"status":"success", "count":1000});みたいなの。ほとんどの場合cacheにHitするので一瞬でresponseが返るけど、あまりに簡単なお仕事過ぎてそれの為にmod_perlのプロセスを使うのがもったいない。特に1日数千万回アクセスされるようなAPIだと積もり積もってすごい負荷に。 responseに使うJSONをそのままcacheに入れて、Tokyo T

    JSONPなAPIの負荷対策にngx_http_jsonp_callbackってのを書いてみた - hideden.hatenablog.com
  • nginx+squidで画像キャッシュサーバーの作り方 - hideden.hatenablog.com

    仕事で画像キャッシュサーバーを構築した時のメモ。大規模事例の設定例が検索してもあまり見つからなかったので同じような境遇の誰かの参考になれば。 ピーク時のトラフィックは数Gbps 画像総容量は数十TB バックエンドのstorageが複数種類 規模とアクセス量とアクセスされる画像の種類が多いので、squidでdisk cacheを使用するとCOSS等を使用してもdiskIOで詰まる為、全てon memory cache。cache容量を確保する為に必然的にcacheサーバーの台数も数十台。 1. squidをsibling構成で並列に並べる cache_peer 10.0.1.1 sibling 80 3130 no-query no-digest proxy-only cache_peer 10.0.1.2 sibling 80 3130 no-query no-digest proxy-o

    nginx+squidで画像キャッシュサーバーの作り方 - hideden.hatenablog.com